设计原则(二):SRP 单一职责原则

简介: 设计原则(二):SRP 单一职责原则

背景介绍


这是我的《架构整洁之道》系列的第六篇,这一篇我们将一起学习 SRP 单一职责原则~

《架构整洁之道》系列:



SRP 单一职责原则


SRP 原则总是被误解,有很多程序员认为这个原则的内涵是:每个模块都应该只做一件事


但是其实并不是这样的,与之混淆的设计原则为:一个函数只完成一个功能,我们在重构复杂函数的时候经常会使用这个原则,但这只是一个面向底层实现细节的设计原则,并非 SRP 原则的全部。


对 SRP 原则的描述应该为:任何一个软件模块都应该只对某一类行为者负责

这里的行为者指的是:一个或多个有共同需求的人


这里的软件模块指的是:一组紧密相关的函数和数据结构,“相关”这个词实际上就隐含了 SRP 这一原则。代码与数据就是靠着与某一类行为者的相关性被组合在一起的

这里我举一个例子:


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


某个工资管理程序中的 Employee 类有三个函数: calculatePay()、reportHours() 和 save()。

  • calculatePay() 函数是由财务部门制定的,他们负责向 CFO 汇报
  • reportHours() 函数是由人力资源部门制定并使用的,他们负责向 coo 汇报
  • save() 函数是由 DBA 制定的,他们负责向 CTO 汇报

程序员这样做实际上就等于使三类行为者的行为耦合在了一起了,违反了 SRP设计原则


针对上面这个问题,解决方案也很简单:


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


将相关的函数划分成不同的类。

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


或者如上图采用 facade 模式,EmployeeFacade 类仅需要包含初始化和调用三个具体实现类的函数。


结束语


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


单一职责原则主要讨论的是函数和类之间的关系一一但是它在两个讨论层面上会以不同的形式出现。在组件层面,我们可以将其称为共同闭包原则,在软件架构层面,它则是用于奠定架构边界的变更轴心。


最后


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

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

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

相关文章
|
设计模式 关系型数据库 数据安全/隐私保护
软件架构设计原则之单一职责原则
单一职责(Simple Responsibility Pinciple,SRP)是指不要存在多于一个导致类变更的原因。假设我们有一个类负责两个职责,一旦发生需求变更,修改其中一个职责的逻辑代码,有可能导致另一个职责的功能发生故障。这样一来,这个类就存在两个导致类变更的原因。如何解决这个问题呢?将两个职责用两个类来实现,进行解耦。后期需求变更维护互不影响。这样的设计,可以降低类的复杂度,提高类的可读性,提高系统的可维护性,降低变更引起的风险。总体来说,就是一个类、接口或方法只负责一项职责。
117 0
软件架构设计原则之单一职责原则
|
设计模式 安全 Java
设计原则之接口隔离原则
设计原则之接口隔离原则
74 0
设计原则之接口隔离原则
|
设计模式 安全 Java
设计原则之依赖倒置原则
设计原则之依赖倒置原则
81 0
设计原则之依赖倒置原则
|
设计模式 XML JSON
【Java设计模式 经典设计原则】一 SOLID-SRP单一职责原则
【Java设计模式 经典设计原则】一 SOLID-SRP单一职责原则
99 0
|
设计模式 程序员 测试技术
设计模式 - 六大设计原则之SRP(单一职责)
单一职责原则(Single Responsibility Principle, SRP)又称单一功能原则,是面向对象的五个基本原则(SOLID)之一。 它规定一个类应该只有一个发生变化的原因。
266 0
设计模式 - 六大设计原则之SRP(单一职责)
|
数据安全/隐私保护
软件架构设计原则--单一职责原则
> 本专栏内容参考自:咕泡学院Tom老师的《Spring5核心原理与30个类手写实战》,仅作个人学习记录使用,如有侵权,联系速删
软件架构设计原则--单一职责原则
|
设计模式
单一职责原则|设计原则
本文带大家学习和了解第一种设计原则,单一职责原则
|
Java API 开发工具
接口隔离原则|设计原则
今天为大家带来的依旧是 设计原则 的知识: 接口隔离原则
开闭原则|设计原则(二)
由于在软件体系中,唯一不变的,就是软件一直在变。
|
设计模式 测试技术
开闭原则|设计原则(一)
由于在软件体系中,唯一不变的,就是软件一直在变。