![]() |
1
34
ISP声明:
ISP与重要特性有关-
cohesion
和
coupling
.
如果您想了解更多关于软件设计原则的信息,请获取一份副本 属于 Agile Software Development, Principles, Patterns, and Practices 书 |
![]() |
2
10
Struts可以被认为是专家们提出的一组最佳实践和建议(也就是说它们已经被证明),以便为我们设计应用程序提供可靠的基础。这些实践力求使我们的应用程序更易于维护、扩展、调整和扩展。 我为什么要关心SOLID编程? 首先,你必须意识到你不会永远停留在你现在的位置。如果我们使用标准和众所周知的体系结构,我们可以确信我们的代码将很容易被我们之后的其他开发人员维护,而且我确信您不会想处理修复一个没有应用任何已知方法的代码的任务,因为这将很难理解。 界面分离原则。 知道我们知道什么是坚实的原则,我们可以更详细地了解接口隔离原则,但接口隔离到底说了什么?
这意味着,有时我们倾向于使用许多方法制作接口,这些方法在一定程度上是好的,但这很容易被滥用,最终我们可能会得到实现空方法或无用方法的类,这当然会给我们的应用程序增加额外的代码和负担。 假设您在单个接口中声明了许多方法,如果您喜欢visual aids,那么一个正在实现接口但实际上需要几个方法的类将如下所示:
另一方面,如果您正确地应用接口隔离并将接口拆分为更小的子集,您可以确保实现那些只需要的:
看见这样更好!实施这一原则将使您具有低耦合,这有助于更好的可维护性和高抗更改性。因此,您可以真正利用接口的使用,并在真正应该的时候实现方法。 现在让我们回顾一个不那么抽象的示例,比如您声明了一个名为Reportable的接口
如果您有一个客户端,它只需要以Excel格式导出一些数据,您可以实现该接口,但您只需要实现Excel方法吗?答案是否定的,即使您不打算使用这些方法,您也必须为所有方法的实现编写代码,这可能会导致大量垃圾代码,从而使代码难以维护。。 记住保持简单,不要重复你自己,你会发现你已经在不知不觉中使用了这个原则。 |
![]() |
3
5
|
![]() |
4
4
一个原因是,拥有多个接口,每个接口的方法数量最少,这使得实现每个接口和正确实现它们更容易。大型接口可能难以控制。此外,在场景中使用聚焦接口使代码更易于维护,因为您可以看到对象的哪个方面正在被使用(例如,IComparable接口让您知道对象仅用于给定场景中的比较)。 |
![]() |
5
3
这一原则主要有两个目的
设计师必须向ISP提出一些问题
为了进一步讨论这个问题,我还必须补充一点,这个原则在严格意义上并不是一个“原则”,因为在某些情况下,将ISP应用到设计中,而不是提高可读性,可能会使对象结构不可读,并被不必要的代码弄乱。 您可以在java.awt.event包中观察到这一点 更多信息请访问我的博客: http://design-principle-pattern.blogspot.in/2013/12/interface-segregation-principle.html |
![]() |
6
3
ISP 这很重要。 ISP的基本思想:客户端不应该被迫依赖于它不使用的方法。 这一原则似乎更符合逻辑。理想情况下,客户端不应该实现客户端未使用的方法。 有关代码示例,请参阅以下SE问题: Interface Segregation Principle- Program to an interface 优势:
|
![]() |
7
2
Robert Martin's paper 关于该主题,给出了一个较少提及的解释:
如果两个类直接依赖于第三个类的两个不同方法,则前两个类中的任何一个的更改都会影响另一个类。
假设我们有三个类:
违反这一原则的行为正在发生
这可能会造成什么问题?
这就是“向后的力量”。我们有时会因为客户的需要而改变一个类。如果该类有不同的客户端将其用于不同的事情,我们就有可能影响它们。 如上所述,接口隔离原则的简单定义为:
在这一点和罗伯特·马丁论文中的上述观点之间,很明显,对ISP的许多解释实际上是在谈论其他原则。
如果我们在谷歌上搜索“接口隔离”,那么大多数包含代码示例的顶级结果都显示了 接口,这不是ISP的重点。有些人甚至错误地重申了这一原则:
…但那是 不 原则。定义文件提到了违反ISP的副作用,但指出它们是违反Liskov替换的。
更重要的是,说客户机不应该实现它不使用的方法是没有意义的。这个
一个接口的成员不实现他们使用或不使用的方法-他们使用它的方法。客户
我并不想夸大其词地引用这份报纸,好像它是一份神圣的令状或什么的。但是,如果我们要使用文章中所描述的原则(文章本身的名称),那么我们也应该考虑文章中所包含的实际定义和解释。 |