了解接口隔离原理的激励因素

时间:2019-05-16 18:28:20

标签: solid-principles interface-segregation-principle

this page上的接口隔离原理的“动机海报”为什么说“您要我在哪里插入它?”

enter image description here

接口隔离原则says

  

不应强迫客户端依赖于他们不依赖的接口   使用。

我不确定图像和标语如何与这一原则相联系。对于依赖关系反转原则,这似乎是一个座右铭,尽管隐约含糊,在这种情况下,高级对象不应依赖于低级实现(插接点不需要知道所插入设备的详细信息)< / p>

我知道这些俗语在脸颊上都是舌头,但鉴于另一种话多么可爱 讲了原理,我不想误解ISP的这个特殊海报。

2 个答案:

答案 0 :(得分:1)

如果重要流程A引用的不是那么重要的流程B,那么即使流程A实际上不需要流程B了,您现在也使流程A依赖于流程B。

应阅读“不应强迫客户端依赖于不使用的接口”-客户端,类,模块,系统,人们不应了解,引用或依赖于不需要的其他事物满足他们的功能要求。

因此,假设您有一个高级重要内容,例如用于发射核武器的开关/按钮。如果将咖啡机插入其中,那么您就有机会炸毁所有东西,因为您制造的重要导弹发射器取决于咖啡机是否正常工作。

这是一个真实的例子:

Web客户端与Web服务器通信。 Web服务器与数据库进行通信。

如果Web客户端能够直接访问数据库,那么如果客户端使用haywire并每秒发送1000个请求会怎样?

在这种情况下,Web服务器通过中介客户机和数据库之间的通信来充当接口。客户端和数据库都依赖于Web服务器,但彼此之间并不了解。由于客户端不了解(未插入)数据库,因此客户端无法破坏数据库。为什么数据库应该依赖于客户端?单独运行就可以了。

在海报中,该按钮看起来非常重要。因此,作为SOLID程序员,当有人要求您将咖啡机或不需要的东西插入导弹发射器时,您需要说“否”。

答案 1 :(得分:0)

张贴者似乎暗示胖接口更难以理解和使用,这是事实,但这不是接口隔离的重点。

ISP与管理应用程序中的耦合和内聚的一个方面有关。内聚的小型API通过仅为一个客户端提供服务,避免了将不同的客户端彼此耦合。在这方面,接口隔离与单一职责重叠,因此,我发现giant Swiss Army Knife的“单一职责失败”海报在刻画接口隔离失败方面同样有意义。

与不需要的工具耦合的用户无论如何都要支付这些工具的成本,尤其是那些不必要的工具对整体设计产生的影响。有用的工具必须容纳无用的工具,并且这种容纳会影响用户体验。

用软件的话来说,这就像API的无用部分一样简单,它可以提取用户不需要的第三方库。

有关更多背景知识,请参见tag info