关于 SOLID 编程实践的实践问题

Practical question about SOLID programming practises

一道关于依赖倒置原则的实战题:

我们想在许多库或 DLL 中构建我们的系统。

如果较低级别库的组件或 classes 应该依赖于抽象,无论是接口还是纯抽象 class 并且被调用者可执行文件或更高级别的库也应该依赖基于该抽象而不是具体的 class 那么应该将抽象编译到哪个库中?

当然可以,混凝土 class 由工厂接线和提供...

从逻辑上讲,它属于可执行文件或更高级别的库,但出于实际目的,它应该被编译到更低级别的库中。

最灵活(模块化)的方法是将抽象编译成自己的二进制文件(库)。这允许任何人使用 and/or 扩展抽象而不继承任何实现细节。理想情况下,这意味着不继承任何传递依赖性。

如果抽象只会被一个客户端使用,您可以安全地将它与它的使用者一起编译,以减少二进制文件的数量。这将使具体实现与客户端分离。

您不应该做的一件事是编译抽象及其任何实现。这会将每个客户端耦合到实现代码及其传递依赖项。