架构师之路——单一职责原则SRP (我单纯,我快乐)

定义:

  不要存在多于一个导致类变更的原因。通俗地讲,一个类只做一件事情。

单一职责原则的好处:

  1.类的复杂性降低,实现什么职责都有清晰明确的定义;

  2.可读性提高,复杂性降低,那当然可读性提高了;

  3.可维护性提高,可读性提高,那当然更容易维护了;

  4.变更引起的风险降低,变更是必不可少的,如果接口的单一职责做得好,一个接口修改只对相应的实现类有影响,对其他的接口无影响,这对系统的扩展性、维护性都有非常大的帮助。

建议:

  接口一定要做到单一职责,类的设计尽量做到只有一个原因引起变化

SRP好处:

  组织代码、减少脆弱、更松耦合、代码改变、维护性、易于测试、易于调试

哪些地方需要单一职责?

  方法、类、包、模块  
如何识别SRP被破坏?

  1.类有太多依赖 构造器有太多参数,意味着测试有太多依赖,需要制造mock模拟太多测试输入参数,通常意味着已经破坏SRP了

  2.方法有太多参数 类似类的构造器,方法参数意味着依赖

  3.测试类变得复杂 如果测试类有太多变量,意味着这个类有太多职责

  4.类或方法太长 如果方法太长,意味着内容太多,职责太多。一个类不超过200-250

  5.描述性名称 如果你需要描述你的类,方法或包,比如使用“xxx和xxx”这种语句,意味着可能破坏了SRP

  6.低聚合Cohesion类 低聚合特点:一个类有两个字段,其中一个字段被一些方法使用;另外一个字段被其他方法使用

  7.在一个地方改动影响另外一个地方 如果在一个代码地方加入新功能或只是简单重构,却影响了其他不相关的地方,意味着这个地方代码可能破坏了SRP

  8.猎枪效果Shotgun Effect 如果一个小的改变引起一发动全身,这意味SRP被破坏了

  9.不能够封装模块

时间: 2024-08-05 08:35:13

架构师之路——单一职责原则SRP (我单纯,我快乐)的相关文章

[OOD] 为什么单一职责原则(SRP)是最难运用的

单一职责原则(SRP)已经几乎是每一个程序员都知道的设计原则.最早由Robert C. Martin在<<敏捷软件开发 - 原则.模式与实践>>中正式提出.书中作者在结论中提到:  SRP是所有设计原则最简单的,但也是最难运用的.(中文翻译有之一,略去了) 现实工作中,关于一个类是否符合SRP,或者是否有必要符合SRP的讨论是经常发生的.争论的关键在于职责的定义,但我理解SRP真正的核心是关注于变化.这并不是我的新见解,全是来自Martin大叔的解释: 首先职责的定义是: 引起变化

Java 设计模式(十) 单一职责原则(SRP)

单一职责原则(Single Responsibility Principle) SRP 基本概念 单一职责原则 定义:应该有且仅有一个原因引起类的变更,也就是接口或类和职责的关系是一一对应的. 难点:职责的划分: 在不同情景和生产环境下我们对职责的细化是不同的(职责单一的相对性) 单一职责原则提出的是一个评价接口是否优良的标准,但是职责和变化原因是不可度量的,因项目而异,因环境而异(不可度量性) 优势: 类的复杂性降低:每个类或接口都只实现单一的职责,定义明确清晰 可读性提高:定义明确清晰,自然

敏捷开发:原则,模式与实践——第8章 单一职责原则SRP

鲍勃大叔说: 单一职责原则(SRP):就一个类而言,应该仅有一个引起它变化的原因. 我最开始理解成只能有一个原因去改变,跟我以前的认知有问题,从我开始学OOP以来,我觉得一个类就是一个事物的抽象,比如书,BOOK类,如果按照我理解的意思,book类就有很多可以改变它的原因,例如翻书或者买书,我感觉SRP说的是函数的职责,不是类的职责,于是我就去找了一个同学讨论,然后我们讨论了一会,得出的结论是这样的(以保龄球为例): SRP指的是只改变保龄球相关的内容算一件事,如果我用一个比赛类去代替保龄球的话

2单一职责原则SRP

一.什么是单一职责原则 单一职责原则(Single Responsibility Principle ): 就一个类而言,应该仅有一个引起它变化的 原因. 二.多功能的山寨手机 山寨手机的功能: 拍照.摄像.手机游戏.网络摄像头.GPS.炒股 等等. 功能多.但是每一个功能都不强. 拍摄功能 ------>专业摄像机或照相机 手机游戏 ------>PSP 网络摄像头---->专业摄像头 GPS功能------>专业GPS导航系统 三.烦人的山寨手机 每一个职责都是一个变化的轴线,

.NET 高级架构师0005 架构师之路(4)---面向对象的设计原则

1         OO的设计原则 采用面向对象的分析和设计思想,为我们分析和解决问题提供了一种全新的思维方式.我们在拿到需求之后(略去OOA,以后补全),接下来的问题就是:如何对系统进行面向对象的设计呢? 按照软件工程的理论,面向对象的设计要解决的核心问题就是可维护性和可复用性.尤其是可维护性,它是影响软件生命周期重要因素,通常情况下,软件的维护成本远远大于初期开发成本. 一个可维护性很差的软件设计,人们通常称之为"臭味"的,形成的原因主要有这么几个:过于僵硬.过于脆弱.复用率低或者

(1)Single Responsibility Principle【单一职责原则】

单一职责原则 SRP:Single responsibility principle [概述]单一职责原则又称单一功能原则,面向对象五个基本原则(SOLID)之一.它规定一个类应该只有一个发生变化的原因.该原则由罗伯特·C·马丁(Robert C. Martin)于<敏捷软件开发:原则.模式和实践>一书中给出的.马丁表示此原则是基于汤姆·狄马克(Tom DeMarco)和Meilir Page-Jones的著作中的内聚性原则发展出的. 所谓职责是指类变化的原因.如果一个类有多于一个的动机被改变

设计模式(3)-----单一职责原则

单一职责原则(SRP) 定义 就一个类而言,应该仅有一个引起它变化的原因.一个类,只有一个引起它变化的原因.应该只有一个职责.每一个职责都是变化的一个轴线,如果一个类有一个以上的职责,这些职责就耦合在了一起.这会导致脆弱的设计.当一个职责发生变化时,可能会影响其它的职责.另外,多个职责耦合在一起,会影响复用性.例如:要实现逻辑和界面的分离. 例子 例如在做一个根据参数对用户表进行查询再显示出来的功能,把这些东西写在一个类里面是非常不好的.如果一个类承担的职责过多,就等于把这些职责耦合在一起,一个

《大话设计模式》——单一职责原则

单一职责原则(SRP):就一个类而言,应该仅有一个能引起它变化的原因. 如果一个类承担的职责过多,就等于把这些职责耦合在一起,一个职责的变化可能会削弱或抑制这个类完成其他职责的能力.这种耦合会导致脆弱的设计,当变化发生时,设计会遭受到意想不到的破坏. 软件设计真正要做的许多内容,就是发现职责并把那些职责相互分离. 如果能想到多于一个的动机去改变一个类,那么这个类就具有多于一个的职责.就应该考虑类的职责分离.

第3章 单一职责原则

单一职责原则(SRP),就一个类而言,应该仅有一个引起它变化的原因. 如果一个类承担的职责过多,就等于把这些职责耦合在一起,一个职责的变化可能削弱或者抑制这个类完成其他职责的能力.这种耦合会导致脆弱的设计,当变化发生时,设计会遭受到意想不到的破坏. 软件设计真正要做的许多内容,就是发现职责并把哪些职责相互分离.如果你能够像到多于一个的动机去改变一个类,那么这个类就多于一个的职责,就应该考虑类的职责分离. 比如俄罗斯方块游戏,在移动端移植到PC端,可以将界面类和逻辑类分离,达到复用的目的. 第3章