fyun
发贴: 1
积分: 0
|
于 2004-04-23 16:04
SRP的描述是:就一个类而言,应该仅有一个引起它变化的原因。 每一个职责都是一个变化的轴线,当需求变化时会反映为类的职责的变化。如果一个类承担的职责多于一个,那么引起它变化的原因就有多个。一个职责的变化甚至可能会削弱或者抑制类完成其他职责的能力,从而导致脆弱的设计。 这就好比生活中一个人身兼数职,而这些事情相互关联不大,甚至有冲突,那他就无法很好的解决这些职责。 什么是职责?那就是“变化的原因”,如果你能够想到多于一个的动机去改变这个类,那么这个类就有多于一个的职责。 比如,对于下面的Modem接口: interface Moden{ public void dial(String pno); public void hangup(); public send(char c); public char recv(); } 大多数情况下我们会认为这个设计非常合理,也符合我们对于Modem的认识,但实际上它承担了两个不同的职责:连接管理和数据通信。如果通信的处理比较复杂并且经常变化,那么我们就应该进行分离。 如果变化总是引起两个或者多个职责同时发生变化,那我们应该怎么处理呢?这时候最好的做法就是将这些职责放到同一个类中。 对于变化的封装,应该遵循以下原则: 1,一个类只能有一个引起它变化的原因 2,一个变化不应该分散在多个类中;
实际上SRP是对象设计最简单,同时也是最难运用的一个原则。Uncle Bob说设计的大部分内容就是发现职责并适当的将其隔离。 在实际的设计中,我们应该要考虑到明显变化的因素,同时也没有必要挖空心思去寻找所有变化。变化只有在实际发生时才具有真正的意义。我们可以按当前的情况完成设计,在变化发生时再考虑改变设计来将变化隔离。
|