关于依赖性反演原则的一个实际问题:
我们希望在许多库或DLL中构建我们的系统。
如果底层库的组件或类应该依赖于抽象,无论是Iinterface还是纯抽象类,被调用的可执行的或更高级别的库也应该依赖于该抽象而不是具体的类,那么应该将抽象编译到哪个库中呢?
是的,当然,混凝土类是由工厂提供的.
从逻辑上讲,它属于可执行或更高级别的库,但出于实际目的,它可能应该被编译到较低级别的库中。
发布于 2018-12-10 20:55:02
最灵活的(模块化)方法是将抽象编译到自己的二进制文件(库)中。这允许任何人在不继承任何实现细节的情况下使用和/或扩展抽象。理想情况下,这意味着不继承任何传递依赖项。
如果抽象只由一个客户端使用,您可以安全地与它的使用者一起编译它,以减少二进制文件的数量。这将使具体实现与客户端保持解耦。
您不应该做的一件事是编译抽象以及它的任何实现。这将使每个客户端耦合到实现代码以及它的传递依赖项。
https://stackoverflow.com/questions/53570253
复制相似问题