论坛首页 Java企业应用论坛

关于SRP原则的问题

浏览 6226 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2004-02-26  
对于SRP(Single Responsibility Priciple)有些问题,
Responsibility是否就是Interface
而实现SRP的手段是否就是将object的各个Responsibility用
Interface来实现?
   发表时间:2004-02-27  
引用
Uncle Bob:
在SRP中,我们把职责定义为“变化的原因”(a reason for change)。如果你能够想到多于一个的动机去改变一个类,那个这个类就具有多于一个的职责。


在具体的类实现中,类的公共方法和属性就是一个类提供给外界的接口(广义上的接口,并非等同于具体编程语言的Inteface)。通过这些接口,类的状态会被改变。也就是说,这些接口体现了类的职责。
结果是,是否使用Interface来实现和类的职责是否单一没有什么必然关系。
0 请登录后投票
   发表时间:2004-02-27  
fournight 写道
引用
Uncle Bob:
在SRP中,我们把职责定义为“变化的原因”(a reason for change)。如果你能够想到多于一个的动机去改变一个类,那个这个类就具有多于一个的职责。


在具体的类实现中,类的公共方法和属性就是一个类提供给外界的接口(广义上的接口,并非等同于具体编程语言的Inteface)。通过这些接口,类的状态会被改变。也就是说,这些接口体现了类的职责。
结果是,是否使用Interface来实现和类的职责是否单一没有什么必然关系。
既然接口体现了类的职责,那SRP是否意味类只能实现
一个接口??
好像不太合理吧
0 请登录后投票
   发表时间:2004-02-29  
xugreat 写道
既然接口体现了类的职责,那SRP是否意味类只能实现
一个接口??


理论上是的。
但是Bob大叔也说了,那几个面向对象的原则并不能在类设计中同时完全遵守,它们有些是相互矛盾的,问题就看你如何平衡。
规则是死的,灵活的应用规则,适当的违反些规则,也是考验我们的设计功力的地方。
0 请登录后投票
   发表时间:2004-04-27  
That's only a choice ! (from Matrix)

呵呵,我总觉得黑客的编剧一定很熟悉软件开发。
0 请登录后投票
   发表时间:2004-04-28  
xugreat 写道
fournight 写道
引用
Uncle Bob:
在SRP中,我们把职责定义为“变化的原因”(a reason for change)。如果你能够想到多于一个的动机去改变一个类,那个这个类就具有多于一个的职责。


在具体的类实现中,类的公共方法和属性就是一个类提供给外界的接口(广义上的接口,并非等同于具体编程语言的Inteface)。通过这些接口,类的状态会被改变。也就是说,这些接口体现了类的职责。
结果是,是否使用Interface来实现和类的职责是否单一没有什么必然关系。
既然接口体现了类的职责,那SRP是否意味类只能实现
一个接口??
好像不太合理吧


就像Uncle Bob说得,从引起变化的角度去理解!
0 请登录后投票
   发表时间:2004-04-29  
我觉得这些规则不是在设计的初期就要一一想清楚,处处留心,相反,它是用在设计中发现了问题后怎样解决的一种方法(原则)!

测试(Unit Test)为先,渐进式(迭代)的开发!
0 请登录后投票
   发表时间:2004-05-08  
引用
Responsibility是否就是Interface
而实现SRP的手段是否就是将object的各个Responsibility用
Interface来实现?


我来发表一个意见:

Bob 所说的 responsibility 当然不是 interface.
Bob 说的很清楚:responsibility is
    a axis of change
通常说来, 一个class 完全可以提供多个interface. 这和SRP 没有任何矛盾。

当然, 类的responsibility 与接口会有关联(事物是普遍联系的:-) , 但是,这是两个完全不同的概念。
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics