SRP:单一职责原则 一个类应该只有一个发生变化的原因。 为何把两个职责分离到单独的类中很重要呢?因为每一个职责都有变化的一个轴线。当需求变化时,该变化会反映为类的职责的变化。如果一个类承担了多于一个的职责,那么引起它变化的原因就会 ...
SRP:单一职责原则 一个类应该只有一个发生变化的原因。
为何把两个职责分离到单独的类中很重要呢?因为每一个职责都有变化的一个轴线。当需求变化时,该变化会反映为类的职责的变化。如果一个类承担了多于一个的职责,那么引起它变化的原因就会有多个。
如果一个类承担的职责过多,就等于把这些职责耦合在了一起。一个职责发生变化可能会削弱或抑制这个类完成其他职责的能力。这种耦合会导致脆弱的设计,当变化发生时,设计会遭受到意想不到的破坏。
有两个不同的应用程序使用Rectangle类。一个应用程序是有关计算几何学方面的,利用Rectangle类计算几何形状,但不会再屏幕上绘制矩形。另外一个应用程序实质上是有关图形绘制方面的,它可能也会进行一些计算几何方面的工作,但是它肯定会在屏幕上绘制矩形。
这个设计违反了单一职责原则(SRP)。Rectangle类具有两个职责。第一个职责提供了一个矩形几何形状的数学模型;第二个职责是把矩形在一个图形用户界面上绘制出来。
对于SRP的违反导致了一些严重的问题。首先,我们必须在计算几何应用程序中包含进GUI代码。在.Net中,就必须要把GUI组建和计算几何应用一起构建、部署。
其次,如果GraphicalApplication的改变由于一些原因导致了Rectangle的改变,那么这个改变会迫使我们重新构建、测试以及部署ComputationalGeometryApplication。如果忘记这样做,ComputationalGeometryApplication可能会以不可预测的方式失败。
一个较好的设计是把这两个职责分离到两个完全不同的类中。这个设计把Rectangle类中进行计算的部分移动到了GeometricRectangle类中。现在矩形绘制方式的改变不会对ComputationalGeometryApplication类造成影响。
定义职责
在SRP中,我们把职责定义为变化的原因。如果你能够想到多于一个的动机去改变一个类,那么这个类就具有多于一个的职责。有时,我们很难注意到这一点。我们习惯于以组的形式去考虑职责。
public interface Modem{ public void Dial(get='_blank'>string pno); public void Hangup(); public void Send(char c); public char Recv();}
原标题:敏捷软件开发 – SRP 单一职责原则
关键词:
*特别声明:以上内容来自于网络收集,著作权属原作者所有,如有侵权,请联系我们:
admin#shaoqun.com
(#换成@)。