Day 17: SOLID 设计原则 — SRP (待改进中... )

「SOLID 原则告诉我们该如何将函式和资料结构安排到类别中,及这些类别该如何相互关联」

「一旦我们应用了 SOLID 原则,我们将与元件(Component)世界同行,接着再进入到高层架构(Architecture)的原则」

取自: Clean Architecture (pp.49-50)

Part III: 设计原则

SOLID 原则起源於本书作者 Uncle Bob 於 1980 年代後期在 USENET 上与各方大神们讨论软件设计原则,几经增减後归纳出的五大原则,简述如下:

  1. SRP: 单一职责原则
    • 衍生自 Conway 定律
      • 软件产品的架构与专案团队的组织结构是相互影响的
    • 因此,每个软件模组都只有唯一的理由需要改变
      • P.S. 绝对不要跟「每个函式只做一件事」搞混,这不是 SRP!
    • 白话文:
      • 每个模组的改变都只该影响到一个利益相关者(角色, Actor),模组的改变不该牵动到许多角色
  2. OCP: 开放封闭原则
    • Bertrand Meyer 於 1980 年代提出
    • 要使软件系统易於修改,必须设计成:
      • 「藉由增加新代码来达成新的行为,而非更动既有代码」
  3. LSP: Liskov 替换原则
    • 1988 年 Barbara Liskov 首度提出、并於 1994 年发表成论文
    • 建置软件系统必须来自於可互换的部分,这些部分必须遵守允许这些部分相互替换的契约
    • 白话文:
      • 使用继承时,必须让父类别和子类别间能够互相替换,而不影响系统运作
  4. ISP: 介面隔离原则
    • 软件设计者必须避免依赖於不使用的东西
    • 白话文:
      • 不要定义一个包含超多函式的介面给很多不同类别实作,让每个类别各自对应到最少函式的介面
  5. DIP: 依赖反向原则
    • 实作策略的高层级程序码不应该依赖於实作细节的低层级程序码。相反地,细节应该依赖於策略

CH7: 单一职责原则 (Single Responsibility Principle, SRP)

「程序设计师很容易因为这个名字,就假设它意味着每个模组都应该只做一件事」

「SRP 的最终版本是: 一个模组应该只对唯一的一个角色负责」

取自: Clean Architecture (p. 53)

案例一

案例二

小结

  • 内聚(Cohesive)一词意味着 SRP。内聚力是种力量,将程序码绑定在一起,以对角色 (actor) 负责
  • 单一职责原则又以不同的形式出现在两个层次上
    • 元件 (Component) 层次:
      • 共同封闭原则 (Common Closure Principle, CCP)

      The classes in a component should be closed together against the same kind of changes. A change that affects a component affects all the classes in that component and no other components

      取自: The Common Closure Principle

    • 架构 (Architecture) 层次:
      • 成为负责建立架构边界(Boundaries)的变化轴

<<:  Kotlin Android 第27天,从 0 到 ML - TensorFlow Lite -物体检测 (Object detection)

>>:  Youtube Analytics API 教学 - OAuth2.0 开放授权 (3)

[Day1]-关於我自己

为什麽会来参加 简单来说参加这个比赛是学校要我们参加的,同时也是算成绩的,那我对我自己的期许是希望自...

沟通技巧中的利害关系人管理

产品经理平常需要沟通的对象很多,而这些对象对专案的影响程度大小可能不尽相同,为了有效的擅用产品经理自...

[Day 04] 用 Exposed 和资料库进行串接

安装 Exposed 框架完成之後,再来我们要和资料库进行串接。 首先我们将原本的 main(){}...

Chapter5 - 轻松用Canvas实现转场动画和运镜处理

接下来时间真的很紧,也顾不上结构了,只能就目前想到的功能,先以直觉的方式编写了,如果讲不太清楚还多多...

【C language part 4】阵列与字串&函式

阵列 阵列是一群具有相同名称或资料型态的变数集合。 由於整个阵列中的变数均具有相同的名称,因此若要存...