Dependency Injection has gained popularity in recent years. This is good, but Dependency Injection does not enjoy the full benefit of Dependency Inversion perscribed by the SOLID principles. This post will clarify the difference and some of the addition power enjoyed by Dependency Inversion.
Choosing the right amount of process is an art. Too much process is smothering and too little is a mess. However, I think incremental, stable, and additive processes naturally start simple and mature progressively with our demands.
I was refactoring an older code base and noticed a pattern I used to follow where a project keeps implementations private and only leaves the interfaces public. The motivation behind this was to force consumers to depend on the interface and not concrete implementations. This is a nice motivation, but it’s only a patch to a deeper design flaw.