在直接应用依赖倒置时,摘要是 由上层/政策层拥有。这个架构组合了 更高/策略组件和定义更低的抽象 在同一个包中一起服务。较低层是 通过继承/实现这些抽象类或者创建 接口
理想情况下,wiki文章也说过(在实现部分的方法2中)抽象模块应该是松耦合的单独模块,
但我对引用声明的方法1有疑问。在我的经验中,无论2在哪里都没有实现/可能,我总是看到抽象类是用低级模块而不是高级模块打包的。
包装抽象/高级包接口的缺点是,如果有10个高级模块调用给定的低级模块,那么我们需要在所有10个模块中打包接口。考虑我必须在接口中添加一个方法,我必须修改所有10个模块来添加该方法。不是吗?因此,根据我的理解,抽象类应该用低级模块而不是高级模块打包。
纠正我如果我在这里错了吗?
答案 0 :(得分:0)
我不同意你的观点,“我总是看到抽象类是用低级模块而不是高级模块打包的”。如果您已经看到相同的那样,那么类设计肯定是错误的。
让我们将抽象与现实世界的例子进行比较。假设你有一个电动开关/插座,认为它是一个abstration /接口或高级模块。套接字不知道它连接到哪个设备。在这种情况下,设备是低级模块。事实上,套接字(高级模块)不想知道它连接到哪个低级模块(设备)。任何与该套接字兼容的设备都可以连接到该套接字。 兼容性是一种实现抽象(socket)的方法。只有那些设计用于连接该套接字的设备才能连接到套接字。假设为印度设计的设备无法连接到英国插座。现在,如果高级模块知道低级模块,则它相当于每个设备的设计套接字,因为在这种情况下,设备不是基于抽象。
现在回答你实现所有类的接口的问题,如果有变化,有时我们无法避免它,但是在设计抽象时不会使它变胖(接口隔离原则)。对接口进行逻辑分组,而不是将所有内容放在一个接口中。设计界面时要多次考虑分组。我同意我们仍然会在界面中添加更多行为,最终会在课程中阻止它。但是如果我们在逻辑组中设计interace,那么该实现对于所有类都是必需的。