SOLID principals in D

Jacob Shtokolov jacob.100205 at gmail.com
Sun Jun 17 09:47:51 UTC 2018


On Saturday, 16 June 2018 at 19:20:30 UTC, FromAnotherPlanet 
wrote:
>  - Interface segregation principal: Essentially breaking the 
> program up into smaller interfaces. Sometimes only consistent 
> of one or two methods/properties (can feed into 'S' of SOLID 
> quite nicely).
>
>  - Dependency inversion principle: Things should depend on 
> abstractions not concretions. Strongly enables dependency 
> injection.
>
> D seems to have all of the features *required* to make this 
> happen, but I guess the real question is the last two, and more 
> specifically the last one.

Then D supports everything you need (and even better, just look 
at interface with contracts: 
https://dlang.org/spec/interface.html)

Interface segregation example: 
https://run.dlang.io/gist/6aa1710dd5a8327f20e605b0ac3b978f

Keep in mind that D doesn't support multiple inheritance, so if 
you want to follow DRY principle, you need to use interfaces + 
template mixins to make it happen (so in this point D is way 
better than the plain Java, because D's templates mixins are like 
traits).

Dependency injection is also supported. However, D doesn't supply 
any DI containers in its standard library, so you have to rely on 
3rd-party components, or implement it on your own.

Look at this page: 
https://wiki.dlang.org/Dependency_Injection_Containers
The most popular and actively maintained are "aedi" and 
"poodinis".


More information about the Digitalmars-d mailing list