Comment by tyleo
1 day ago
I don’t think I’ll ever understand the affinity for DI libraries. I write a lot of tested code but it’s always just plain old interfaces and constructor arguments for me.
Other parts of our org use a DI framework and I feel like it causes a new class of dependency ordering bugs or missing dependencies. These just don’t exist when everything is passed in the ctor.
> I’ll ever understand the affinity for DI libraries
DI addresses/can address/affects more than 10 different aspects of application lifecycle. We've described our reasoning in several talks linked at https://github.com/7mind/izumi?tab=readme-ov-file#docs
> I feel like it causes a new class of dependency ordering bugs or missing dependencies
That's precisely where phased approach shines.
I looked at the link you shared but it’s just a page of additional links.
Can you provide specific examples here instead?
What I think is most useful in cases like this is before-and-after code snippets showing how the library adds value.
There are docs and examples here: https://izumi.7mind.io/distage/
Not in before-after form though, but there was that "I'll eat my hat" discussion exactly in this form: https://www.reddit.com/r/hascalator/comments/aigfux/comment/...?
Agreed. Modern Spring brags about not requiring pages of external XML files like it did in the old days. But plain constructors is still an improvement on both.
Configurable apps (see "axis" and "role" concepts in distage) are prohibitevely hard to setup and maintain, dual test with sound opt-in memoization are, probably, practically impossible.
So I looked at the examples and it just seems like a lot for a little.
https://izumi.7mind.io/distage/basics.html#activation-axis
I feel like all you need there is a ctor param that takes a greeter and pass in whichever you want.
Those params can be cached as necessary or part of larger config POD objects if they are often passed with other dependencies.
1 reply →
It just gets rid of the boilerplate. Never had a problem with ctor injection in Spring.