首页 / 知识
关于java:接口隔离原理背后的原因是什么?
2023-04-15 03:02:00
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换人条款的行为。
而且,说一个客户不应该实现它不使用的方法甚至没有道理。接口的客户端未实现其方法。 我的意思不是要夸张引用这篇论文,好像它是圣旨或其他东西一样。但是,如果我们要使用文章中描述的原理的名称(文章本身的名称),那么我们还应该考虑该文章中包含的实际定义和解释。 |
最新内容
相关内容
linux命令测试客户端?
linux命令测试客户端?,地址,系统,网络,工具,工作,分析,环境,命令,下行,资料,linux测试网速的工具1、speedtest-cli是一个用Python编写的轻量级linux查看接口命令?
linux查看接口命令?,地址,系统,标准,命令,管理,工作,文件,端口,目录,路径,linux命令?1、linux常用命令如下:查看内核版本:uname-a。控制台-》图使用linux命令调接口?
使用linux命令调接口?,网络,系统,地址,信息,工具,情况,服务,灵活,电脑,名称,简述grub启动引导程序配置及命令行接口详解grub 命令行接口(一次性linux命令安装原理?
linux命令安装原理?,系统,软件,服务,信息,位置,官网,通用,状态,通信,管理,Linux系统怎么安装应用软件?1、linux怎么安装软件首先去官网下载jdklinux命令的实现原理?
linux命令的实现原理?,地址,系统,基础知识,基础,时间,信息,地方,网络,流程,在线,Linux下实现断点续传的原理介绍1、所谓断点续传,也就是要从文linux命令添加接口?
linux命令添加接口?,地址,网络,名称,系统,工具,设备,信息,服务,中心,密码,Linux用shell创建子接口称为子shell shell中创建的变量局部于创建它安卓linux命令客户端?
安卓linux命令客户端?,系统,软件,名字,设备,互动,服务,工具,基础,发展,代码,android系统,在终端可以输入那些命令1、logcat 输出日志 printenv安装客户端linux命令?
安装客户端linux命令?,软件,中心,在线,发行,全国,公司,工作,国家,信息,命令,请列出linux下安装软件的命令.aptitude——详细查看已安装或可用linux接口模式命令?
linux接口模式命令?,设备,系统,信息,网络,工具,端口,服务,数字,地址,情况,Linux系统中列出PCI设备和USB设备的命令详解1、lspci lspci是另一个linux命令运行原理?
linux命令运行原理?,系统,时间,网络,基础知识,工作,数据,基础,设备,地址,命令,Linux系统中tracert命令使用详解1、traceroute [参数] [主机]命linux使用命令的原理?
linux使用命令的原理?,系统,管理,工作,设备,服务,工具,管理系统,标准,名称,通信,linux下的shell是什么?1、是在Linux内核与用户之间的解释器程linux客户端连接命令?
linux客户端连接命令?,系统,地址,服务,工具,位置,基础知识,网络,工作,基础,命令,Linux中使用ln命令在文件之间建立连接的用法讲解1、ln 在文件