设计原则(五):ISP 接口隔离原则

简介: 设计原则(五):ISP 接口隔离原则

背景介绍


这是我的《架构整洁之道》系列的第九篇,这一篇我们将一起学习 ISP 接口隔离原则~

《架构整洁之道》系列:



ISP 接口隔离原则


我们先一起看下图的这种软件结构:


网络异常,图片无法展示
|


有多个用户需要操作 OPS 类。现在,我们假设这里的 User1 只需要使用 op1, User2 只需要使 op2, User3 只需要使用 op3。


很明显,User1 虽然不需要调用 op2、op3,但在源代码层次上也与它们形成依赖关系。这种依赖、意味着我们对 OPS 代码中 op2 所做的任何修改,即使不会影响到 User1 的功能,也会导致它需要被重新编译和部署。


这个问题可以通过将不同的操作隔离成接口来解决:


网络异常,图片无法展示
|


现在 User1 的源代码会依赖于 U1Ops 和 op1,但不会依赖于 OPS。这样一来,我们之后对 OPS 做的修改只要不影响到 User1 的功能,就不需要重新编译和部署 User1 了。

在一般情况下,任何层次的软件设计如果依赖于不需要的东西,都会是有害的。从源代码层次来说,这样的依赖关系会导致不必要的重新编译和重新部署,对更高层次的软件架构设计来说,问题也是类似的。现在我们举一个例子:


我们假设某位软件架构师在设计系统 S 时,想要在该系统中引入某个框架F。这时候,假设框架F的作者又将其捆绑在一个特定的数据库D上,那么就形成了S依赖于F, F又依赖于D的关系。


网络异常,图片无法展示
|


在这种情况下,如果 D 中包含了 F 不需要的功能,那么这些功能同样也会是 S 不需要的。而我们对 D 中这些功能的修改将会导致 F 需要被重新部署,后者又会导致 S 的重新部署。更糟糕的是,D 中一个无关功能的错误也可能会导致 F 和 S 运行出错。


结束语


网络异常,图片无法展示
|


任何层次的软件设计如果依赖了它并不需要的东西,就会带来意料之外的麻烦。


最后


✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨

少年向来不识天高地厚
放眼处皆自负才高八斗
虽是自命风流
倒也坦诚无忧
我爱这样的少年
谦和而狂妄
骄傲又坦然☀️

✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨

相关文章
六大设计原则-接口隔离原则【Interface Segregation Principle】
六大设计原则-接口隔离原则【Interface Segregation Principle】
43 0
七大设计原则之接口隔离原则应用
七大设计原则之接口隔离原则应用
53 0
|
设计模式 关系型数据库
软件架构设计原则之接口隔离原则
接口隔离原则符合我们常说的高内聚、低耦合的设计思想,可以使类具有很好的可读性、可扩展性和可维护性。我们在设计接口的时候,要多花时间去思考,要考虑业务模型,包括对以后有可能发生变更的地方还要做一些预判。所以,对于抽象、对于业务模型的理解是非常重要的。下面我们来看一段代码,对一个动物行为进行抽象描述。
94 0
|
设计模式 安全 Java
设计原则之接口隔离原则
设计原则之接口隔离原则
68 0
设计原则之接口隔离原则
|
设计模式 安全 Java
设计原则之依赖倒置原则
设计原则之依赖倒置原则
77 0
设计原则之依赖倒置原则
|
设计模式 消息中间件 存储
【Java设计模式 经典设计原则】四 SOLID-ISP接口隔离原则
【Java设计模式 经典设计原则】四 SOLID-ISP接口隔离原则
159 0
|
设计模式 测试技术
设计模式 - 六大设计原则之ISP(接口隔离原则)
接口隔离原则(Interface Segregation Principle, ISP),要求尽量将臃肿庞大的接口拆分成更小的和更具体的接口,让接口中只包含相关的方法。 接口隔离是为了高内聚、低耦合。 在实际的开发中,通常都是先定义好需要开发的接口,并由各个服务去实现。 但是如果没有经过考虑和设计,很可能造成一个接口中包含了众多的接口方法,而这些接口并不一定在每一个类中都需要实现, 这样的接口很难维护, 也不易于扩展,每一次修改验证都有潜在的风险。
201 0
设计模式 - 六大设计原则之ISP(接口隔离原则)
|
消息中间件 监控 NoSQL
接口隔离原则介绍
接口隔离原则介绍
266 0
|
Java API 开发工具
接口隔离原则|设计原则
今天为大家带来的依旧是 设计原则 的知识: 接口隔离原则