接口隔离原则和单一职责原则区别

单一职责原则是备受争议的原则,根据不同的业务逻辑,它会将系统功能模块划分成不同种类,产生多样的接口,同时每个接口尽量只包含一个功能(方法)。

而产生争议的原因就是这个业务逻辑的概念太过于模糊,同时它与接口隔离原则又似乎有些冲突。

接口隔离原则,是指一个类对另一个类的依赖应该建立在最小的接口上。

通过定义我们可以得知,单一职责原则注重的是职责的划分,而接口隔离原则注重的是类对接口的依赖的隔离。两个定义站在的角度是不同的,就像不同的两个对象,站在的角度不同,所划分的角度就有所不同。

同时单一职责原则是直接在业务方面划分,所以是站在接口的角度上观看来约束类,业务逻辑首先应该考虑大的模块,这个大的模块就应该是最顶层的抽象类或接口,所以是站在接口的角度上来看;而接口隔离原则定义说的是“一个类对另一个类的依赖”,这个定义是类与类直接的,所以接口隔离原则应该是站在类的角度上来约束接口。

单一职责原则与接口隔离原则之间还是有共同点的:

单一职责原则与接口隔离原则最终表现出来的都是将接口约束到最小功能,所以在这个表现结果层面来看二者都是将接口可以被实现的方法变得越来越小。

所以我们定义接口时应该从两个方面来考虑。

首先是业务逻辑层面,要先将业务划分好,所需要的每个模块的功能进行划分,尽量划分到一个功能模块仅有一个方法。

其次我们在定义类的时候也要再次考虑接口的定义是否有冗余,是否有可以再度拆分的可能,功能可否达到更简等。

通过两个层面的考虑,我们就可以最终敲定上层接口了。

以上内容仅为个人对接口隔离原则和单一职责原则的理解,如有漏洞欢迎指教。

接口隔离原则和单一职责原则区别相关推荐

  1. 经典设计原则:单一职责原则(SRP)

    本文详解设计原则中的单一职责原则,目的还是提高代码的可读性.可扩展性.复用性.可维护性等. 目录 1. 单一职责原则(SRP) 2. 如何理解单一职责原则? 3. 如何判断类的职责是否足够单一? 4. ...

  2. 面向对象的七种原则:单一职责原则,开放关闭原则

    我们的知识星球马上就要开始更新设计模式了,在更新设计模式之前,我们是不是需要做一些准备呢?否则设计模式中一些遵循的原则大家会一头雾水,所以我今天来给大家说一些面向对象的七种原则,有人说是6种有人说是7 ...

  3. SOLID原则:单一职责原则(SRP)

    SOLID:SOLID 原则并非单纯的1个原则,而是由5个设计原则组成,它们分别是:单一职责原则.开闭原则.里式替换原则.接口隔离原则和依赖反转原则,SOLID 由5个设计原则的头一个字母组成. 如何 ...

  4. 设计模式六大原则(一)----单一职责原则

    设计模式六大原则之[单一职则原则] 一.什么是单一职责原则 首先, 我们来看单一职责的定义. 单一职责原则,全称Single Responsibility Principle, 简称SRP. A cl ...

  5. Java设计原则之单一职责原则、开闭原则、里氏代换原则

    文章目录 面向对象设计原则概述 单一职责原则 开闭原则 里氏代换原则 面向对象设计原则概述 软件的可维护性(Maintainability)和可复用性(Reusability)是两个非常重要的用于衡量 ...

  6. 六大设计原则之单一职责原则(SRG)

    在做代码练习或者开发的过程中,我们会发现自己写的类越来越大,该类的功能也越来越多.有一些开发者包括之前的我看到自己写的类够大,功能够多是往往会充满自豪感.但是当某个功能需要做一个小改动时,就会发现整个 ...

  7. 六大设计原则之单一职责原则

    单一职责原则 单一职责原则(Single Responsibility Principle)–SRP: There should never be more than one reason for a ...

  8. 【软件架构设计原则】单一职责原则和接口隔离原则

    文章目录 软件架构设计原则 单一职责原则 接口隔离原则 其他设计原则 软件架构设计原则 本文通过实例来讲解 单一职责原则 接口隔离原则 单一职责原则 单一职责(Simple Responsibilit ...

  9. 【设计模式六大原则】:单一职责原则-带你走梦幻西游(一)

    依赖倒置原则(二) 开闭原则(三) 迪米特原则-带你走进梦幻西游(四) 里氏替换原则(五) 接口隔离原则(六) 定义       单一职责原则的英文名称是Single Responsibility P ...

最新文章

  1. Js touchg事件在移动端网页中左右滑动效果
  2. P1944 最长括号匹配(栈模拟/DP)
  3. Objective-c 实用代码
  4. 关于matlab中的梯度使用
  5. keepalived lvs
  6. 兰州谋定百合品牌-农业大健康·万祥军:功能性农业产业脱贫
  7. python字典更新值_Python 字典 update() 使用方法及示例
  8. linux opencl(AMD) Example
  9. 进程间通信之共享内存
  10. Python入门学习笔记(6)
  11. 【100题】第三十二 数组、规划
  12. Android Support Annotation Library使用详解
  13. 追剪算法C语言,基于PLC的追剪控制系统设计.doc
  14. 远程接入Linux、unix、Windows工具-opentext ETX
  15. 教你自己搭建一个ip池(绝对超好用!!!!)
  16. 深度技术Windows XP SP3 完美精简版【2合1】(转自深度论坛)
  17. open sl java audio_webrtc学习(二): audio_device之opensles
  18. 违反mysql三范式_违反数据库第三范式引发的一个问题
  19. 【机器学习入门到精通系列】OVR SVMs
  20. springboot gradle 打包排除依赖 排除文件

热门文章

  1. linux怎么开启telnet命令,linux如何开启telnet服务?linux开启telnet服务的方法
  2. Vivado2018.3的下载安装
  3. 钢琴陪练软件打分测试有必要吗,警惕钢琴陪练,这几点千万不要
  4. 手把手教你:如何使用滴滴云搭建GPU环境
  5. 【HTML+CSS+JavaScript】实现萤火虫闪烁效果
  6. 基于投影点密度的建筑物立面提取
  7. python可以开发app吗-怎么用python开发app
  8. Long值范围你知道吧,Long值10进制有多少位你晓得不?
  9. 【从零开始学爬虫】采集亚马逊商品信息
  10. 1、登录云服务器(Linux_Ubuntu)