只有类对应的(唯一)职责(需求)的变更才会引起代码的重构。

The single responsibility principle states that every ​​module​​ or ​​class​​ should have responsibility over a single part of the ​​functionality​​ provided by the ​​software​​, and that responsibility should be entirely ​​encapsulated​​ by the class. All its ​​services​​ should be narrowly aligned with that responsibility. ​​Robert C. Martin​​ expresses the principle as follows:​[1]

 

A class should have only one reason to change.


 



2.2  单一职责原则

2.2.1 引言

         一个优良的系统设计,强调模块间保持低耦合、高内聚的关系,在面向对象设计中这条规则同样适用,所以面向对象的第一个设计原则就是:单一职责原则(SRP,Single Responsibility Principle)。

         单一职责,强调的是职责的分离,在某种程度上对职责的理解,构成了不同类之间耦合关系的设计关键,因此单一职责原则或多或少成为设计过程中一个必须考虑的基础性原则。

2.2.2 引经据典

         关于单一职责原则,其核心的思想是:

                  一个类,最好只做一件事,只有一个引起它变化的原因。

    单一职责原则可以看作是低耦合、高内聚在面向对象原则上的引申,将职责定义为引起变化的原因,以提高内聚性来减少引起变化的原因。职责过多,可能引起它变化的原因就越多,这将导致职责依赖,相互之间就产生影响,从而极大的损伤其内聚性和耦合度。单一职责,通常意味着单一的功能,因此不要为类实现过多的功能点,以保证实体只有一个引起它变化的原因。

    因此,SRP原则的核心就是要求对类的改变只能是一个,对于违反这一原则的类应该进行重构,例如以Façade模式或Proxy模式分离职责,通过基本的方法Extract Interface、Extract Class和Extract Method进行梳理。

 

 


------------------越是喧嚣的世界,越需要宁静的思考------------------ 合抱之木,生于毫末;九层之台,起于垒土;千里之行,始于足下。 积土成山,风雨兴焉;积水成渊,蛟龙生焉;积善成德,而神明自得,圣心备焉。故不积跬步,无以至千里;不积小流,无以成江海。骐骥一跃,不能十步;驽马十驾,功在不舍。锲而舍之,朽木不折;锲而不舍,金石可镂。蚓无爪牙之利,筋骨之强,上食埃土,下饮黄泉,用心一也。蟹六跪而二螯,非蛇鳝之穴无可寄托者,用心躁也。