What is the reasoning behind the Interface Segregation Principle?接口隔离原理(ISP)说,许多客户端特定的接口比一个通用接口要好。 为什么这很重要? ISP指出:
ISP与重要特性-内聚力和耦合力有关。 实施ISP可为您带来以下好处:
如果您想了解有关软件设计原理的更多信息,请获取一份副本 界面隔离是SOLID原则上的" I",在深入探讨前者之前,让我们解释一下后者的含义。 SOLID可以被视为专家提出的一组最佳实践和建议(这意味着它们已被证明),以便为我们设计应用程序的方式提供可靠的基础。这些实践努力使维护,扩展,适应和扩展我们的应用程序变得更加容易。 我为什么要关心SOLID编程? 首先,您必须意识到自己永远不会永远存在。如果我们使用标准和众所周知的体系结构,则可以确保我们的代码将易于跟随我们的其他开发人员进行维护,并且我确定您将不想处理修复未完成的代码的任务。没有应用任何已知的方法,因为很难理解它。 接口隔离原则。 知道我们知道SOLID原理是什么,我们可以更详细地了解接口隔离原理,但是接口隔离究竟说明了什么?
这意味着有时我们倾向于使用很多方法来建立接口,这些方法在一定程度上可能是好的,但是很容易被滥用,并且我们最终会得到实现空方法或无用方法的类,这当然会增加额外的代码和负担。到我们的应用程序。
另一方面,如果您正确地应用接口隔离并将接口拆分为较小的子集,则可以确保实现仅需要的子集:
看到!更好!加强该原理将使您具有较低的耦合,从而有助于更好的可维护性和较高的抗更改性。因此,您可以在需要时真正利用接口的用法并实现方法。
并且您有一个仅以Excel格式导出某些数据的客户端,您可以实现该接口,但是您是否仅需要实现excel方法?答案是否定的,即使您不打算使用所有方法,也必须对所有方法的实现进行编码,这可能会导致大量垃圾代码,从而使代码难以维护。 记住要保持简单,不要重复自己,您会发现自己已经在不知不觉中使用了这一原理。 它简化了任何一个客户端将使用的界面,并删除了它们可能会在不需要的界面部分上开发的依赖关系。 该原则主要用于双重目的
设计师必须向ISP提出的几个问题
为了使讨论更深入,我还必须补充一点,从最严格的意义上讲,该原理并不是"原则",因为在某些情况下,将ISP应用于设计而不是提高可读性可能会使对象结构不可读且混乱。不必要的代码。 有关更多信息,请访问我的博客:http://design-principle-pattern.blogspot.in/2013/12/interface-segregation-principle.html 一个原因是,拥有许多接口且每个接口使用最少的方法,可以更轻松地实现每个接口并正确实现它们。较大的界面可能不规则。同样,在方案中使用重点界面使代码更具可维护性,因为您可以看到正在使用对象的哪个方面(例如,IComparable接口可让您知道对象仅在给定方案中用于比较)。 ISP很重要。 ISP的基本思想:不应强迫客户端依赖于不使用的方法。 这个原则似乎更合乎逻辑。理想情况下,客户端不应实现客户端不使用的方法。 有关代码示例,请参见下面的SE问题: 接口隔离原理-编程接口 好处: 灵活性:在没有ISP的情况下,您只有一个通用FAT接口和许多实现它的类。假设您有1个接口和50个类。如果接口发生更改,则所有50个类都必须更改其实现。 使用ISP,您可以将通用FAT接口划分为精细的小型接口。如果小型粒度接口发生变化,则仅会影响实现该接口的类。 可维护性和易用性:由于更改仅限于精细的粒度接口,而不是常规的FACT接口,因此代码维护更加容易。不相关的代码不再是实现类的一部分。 罗伯特·马丁(Robert Martin)关于该主题的论文给出的解释很少被提及:
如果两个类直接依赖于第三类的两种不同方法,则前两个类中任何一个的更改都会影响另一个类。
假设我们有三个类:
在 这可能会导致什么问题?
那就是"向后的力量"。我们有时会根据客户的需求更改班级。如果该类有不同的客户将其用于不同的事物,则我们有可能影响他们。 如前所述,接口隔离原理的简单定义是:
在此与罗伯特·马丁(Robert Martin)论文的上述观点之间,很明显,对ISP的许多解释实际上是在谈论其他原理。
如果我们使用Google进行"接口隔离",则大多数包含代码示例的顶级结果都表明了无法完全实现接口的类,而这并不是ISP的重点。有些人甚至重申了这一原则:
...但这不是原则。定义文件将此类担忧视为违反ISP的副作用,但指出它们是违反Liskov换人条款的行为。
而且,说一个客户不应该实现它不使用的方法甚至没有道理。接口的客户端未实现其方法。 我的意思不是要夸张引用这篇论文,好像它是圣旨或其他东西一样。但是,如果我们要使用文章中描述的原理的名称(文章本身的名称),那么我们还应该考虑该文章中包含的实际定义和解释。 |