Single Responsibility Principle(SRP) 单一职责,是OO原则中的基本原则之一,也是最重要的原则之一.
一个类承担一个职责的全部内容,而且只承担一个职责(Once and only once),并且要做得很好.
[list]
[*]每个职责都应该是独立的类,因为每个职责都是变化的中轴.
[*]一个类应该只有一个原因引起变化.
[*]业务规则的变化所导致的类的改变,这个类不应该被数据库,GUI或其它部分的变化强制改变.
[/list]
怎么去定义职责呢?通常我们称之为类所承担的职责,其实就是引起类变化的原因.如果一个类被两个以上的原因改变,那么就要重新审视这个类的职责,把不同的职责拆分到不同的类里面去.你可能会质疑,这是不是会产生太多的类?类的数量从来都不是个问题.唯一的可能是对代码的理解变得困难.实际上这是假像,分散的代码让你更容易关注自己应该关注的代码,不会使你陷入沼泽.
单一职责就是降低设计上的耦合,这是自然而然的事情.通常一个类太多方法,太多代码,或者太容易变化,都有可能是违反了SRP.
以简单的银行帐户为例,它的职责只包括增加余额,减少余额,获取余额的职责.而余额的增加是通过现金存入,还是转账或是其它方式,都不应该影响这个类的职责,也就是它不会因为现金存入方式发生变化而变化,也不会因为要把余额显示在不同的终端上而变化.
如果发现你的代码违反了SRP,也不要惊讶,重构代码,去除代码中的bad smell.
推荐阅读:
[url=http://samuelray.iteye.com/blog/182917]依赖倒置[/url]。
[url=http://samuelray.iteye.com/blog/178463]开闭原则[/url]。
[url=http://samuelray.iteye.com/blog/170463]OO设计原则[/url]。
一个类承担一个职责的全部内容,而且只承担一个职责(Once and only once),并且要做得很好.
[list]
[*]每个职责都应该是独立的类,因为每个职责都是变化的中轴.
[*]一个类应该只有一个原因引起变化.
[*]业务规则的变化所导致的类的改变,这个类不应该被数据库,GUI或其它部分的变化强制改变.
[/list]
怎么去定义职责呢?通常我们称之为类所承担的职责,其实就是引起类变化的原因.如果一个类被两个以上的原因改变,那么就要重新审视这个类的职责,把不同的职责拆分到不同的类里面去.你可能会质疑,这是不是会产生太多的类?类的数量从来都不是个问题.唯一的可能是对代码的理解变得困难.实际上这是假像,分散的代码让你更容易关注自己应该关注的代码,不会使你陷入沼泽.
单一职责就是降低设计上的耦合,这是自然而然的事情.通常一个类太多方法,太多代码,或者太容易变化,都有可能是违反了SRP.
以简单的银行帐户为例,它的职责只包括增加余额,减少余额,获取余额的职责.而余额的增加是通过现金存入,还是转账或是其它方式,都不应该影响这个类的职责,也就是它不会因为现金存入方式发生变化而变化,也不会因为要把余额显示在不同的终端上而变化.
如果发现你的代码违反了SRP,也不要惊讶,重构代码,去除代码中的bad smell.
推荐阅读:
[url=http://samuelray.iteye.com/blog/182917]依赖倒置[/url]。
[url=http://samuelray.iteye.com/blog/178463]开闭原则[/url]。
[url=http://samuelray.iteye.com/blog/170463]OO设计原则[/url]。