软件设计之美
郑晔
开源项目 Moco 作者
19890 人已学习
新⼈⾸单¥59
登录后,你可以任选4讲全文学习
课程目录
已完结/共 42 讲
软件设计之美
15
15
1.0x
00:00/00:00
登录|注册

23 | 接口隔离原则:接口里的方法,你都用得到吗?

你好!我是郑晔。
在前面几讲中,我们讲的设计原则基本上都是关于如何设计一个类。SRP 告诉我们,一个类的变化来源应该是单一的;OCP 说,不要随意修改一个类;LSP 则教导我们应该设计好类的继承关系。
而在面向对象的设计中,接口设计也是一个非常重要的组成部分。我们一直都在强调面向接口编程,想实现 OCP 也好,或者是下一讲要讲的 DIP 也罢,都是要依赖于接口实现的。
也许你会说,接口不就是一个语法吗?把需要的方法都放到接口里面,接口不就出来了吗?顶多是 Java 用 interface,C++ 都声明成纯虚函数。这种对于接口的理解,显然还停留在语法的层面上。这样设计出来的只能算作是有了一个接口,但想要设计出好的接口,还要有在设计维度上的思考。
那什么样的接口算是一个好接口呢?这就需要我们了解接口隔离原则。

接口隔离原则

接口隔离原则(Interface segregation principle,简称 ISP)是这样表述的:
不应强迫使用者依赖于它们不用的方法。
No client should be forced to depend on methods it does not use.
这个表述看上去很容易理解,就是指在接口中,不要放置使用者用不到的方法。站在使用者的角度,这简直再合理不过了。每个人都会觉得,我怎么会依赖于我不用的方法呢?相信作为设计者,你也会同意这种观点。然而,真正在设计的时候,却不是人人都能记住这一点的。
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

接口隔离原则是面向对象设计中的重要原则之一,强调在接口设计中不应该强迫使用者依赖于不需要的方法。本文通过实际案例解释了接口设计不当可能带来的问题,以及如何根据接口隔离原则进行接口设计的优化。作者以银行系统的业务处理为例,说明了如何通过接口的细化和业务处理方法的改造来减少接口的“胖”和提高系统的稳定性。通过引入“瘦”接口和对应的业务处理方法,可以有效减少接口的修改对系统其他部分的影响,从而实现了接口隔离原则的应用。文章强调了识别对象的不同角色,设计小接口的重要性,并提出了思考题,引发读者对于如何更好地符合OCP的思考。整体而言,本文通过具体案例和清晰代码示例生动地阐述了接口隔离原则的重要性和实际应用,对于读者快速了解和掌握该原则具有很高的参考价值。

仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《软件设计之美》
新⼈⾸单¥59
立即购买
登录 后留言

全部留言(23)

  • 最新
  • 精选
  • 李文彬
    “识别对象的不同角色,设计小接口”,想到一个段子~ 给女性朋友的六个建议: 1. 找个能让你笑的男人。 2. 找个有稳定工作的男人。 3. 找个喜欢做家务的男人。 4. 找个诚实的男人。 5. 找个和你在性方面能契合的男人。 6. 不要让他们五个人见面。

    作者回复: 哈哈哈,这个比喻真有意思

    2021-03-12
    3
    25
  • Janenesome
    我们现在是贫血模式,一个模块的所有接口都在一个service里面,我们的代码和设计还是数据为主。 这一章节的内容感觉有点无从下手,不知道该怎么拆分,是不是应该按前面说的先从关注行为开始优化现有的设计

    作者回复: 是的,先关注行为。

    2020-10-23
    7
  • 0xABC
    接口的定义不应该和具体的业务细节过度耦合,应该业务细节依赖更高层面的抽象

    作者回复: 总结得不错。

    2020-07-29
    7
  • 阳仔
    总结一下:软件设计时候需要从不同的用户角色来考虑,接口设计要尽量小。小接口其实也体现了单一职责原则,如果一个功能需要用到多个接口,那么可以通过组合(或者实现)各个小接口成一个大的接口。

    作者回复: 分别用不同的接口就好了,不一定要组合。

    2020-07-20
    7
  • OlafOO
    想到一个场景是之前在电商公司一个中台服务提供给外部业务部门的接口大部分都是胖接口

    作者回复: 有什么不开心的,可以说出来开心一下。

    2020-07-20
    4
  • 阿布黑皮诺
    五张生动阐述SOLID原则的图片 http://web.archive.org/web/20160521015258/https://lostechies.com/derickbailey/2009/02/11/solid-development-principles-in-motivational-pictures/

    作者回复: 很好的补充

    2020-12-31
    1
  • Being
    在LSP里面有提到公共接口是宝贵的资源,学习完ISP后,更觉得设计小接口的必要性了。

    作者回复: 理解得不错。

    2020-07-22
    1
  • 桃子-夏勇杰
    郑老师,有金融类的,设计的比较好的,可以用来学习的开源项目么?如果是TDD方式开发的更佳。

    作者回复: 这方面,我也不是很了解,有一些模块,但不是整个项目。

    2020-07-20
    3
    1
  • Geek_0315ca
    把握好接口粒度:不应该让使用者依赖于用不到的接口

    作者回复: 对,难点在于把握粒度。

    2021-02-04
  • 蓝士钦
    日常开发中常常为了写接口而写接口,一个service中的所有方法都提取到一个接口类中,感觉这样和不写接口没啥区别,因为这样实现类要实现接口类中的所有方法。 应该把不同行为的接口抽离出来,service组合这些接口实现类才比较灵活吧,controller不一定非得通过接口去调用service吧。毕竟controller的职责是处理入参校验,直接通过方法调用业务service没什么不妥吧
    2020-07-21
    1
    2
收起评论
显示
设置
留言
23
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部