2008-08-19 56 views
22

answer堆栈溢出问题指出,特定的框架违反了简单和简单的OOP规则:单一职责原则(SRP)。是单一责任原则OOP的一个规则?

是单责任原则真的 OOP的规则?

我的面向对象编程的定义的理解是“在那里的对象和他们的行为被用于创建软件的范例”。这包括以下技术:封装,多态性&继承。

现在不要误会我的意思 - 我相信SRP是最好的OO设计的关键,但我觉得有些情况下这个原则可以并且应该被打破(就像数据库规范化规则一样)。我积极推动SRP的好处,并且我的绝大多数代码遵循这一原则。

但是,它是一个规则,从而意味着它不应该被打破?

回答

22

很少的规则,如果有的话,在软件开发中是没有例外。有人认为goto没有地方,但他们错了。

至于OOP去,没有面向对象性,从而取决于你问,你会得到不同的软硬原则,模式和做法,谁的单一定义。

OOP的经典思想是,消息被发送到否则不透明的物体和物体解释该消息与自己的内脏的知识,然后执行某种功能。

SRP是一种软件工程原理,可以应用于类,函数或模块的角色。它有助于某种东西的凝聚力,以使它表现得很好,没有不相干的东西挂在一起,或者有多重角色交织在一起并使事情复杂化。

即使只是一个负有责任,仍然可以从单一功能到一组松散相关的功能是一个共同的主题系列的一部分。只要你避免陪审团操纵一个元素来承担一些不是主要设计的事情的责任,或者做一些稀释对象简单性的特殊事情,那么就违反了你想要的任何原则。

但是,我发现SRP更准确,然后做更精细的事情也同样强大。

+0

的“问题”,我努力克服有关SRP是“有多少是远”?你可以把它放到一个荒谬的级别,这样做,为每个实体生成100个类。 – 2011-05-26 12:51:41

+3

@PERERER ZERO:阅读这个问题的答案:[如何确定如何粗略或细粒度责任应该当](http://stackoverflow.com/问题/ 2455705 /你怎么确定如何 - 粗略或细粒度 - 责任 - 应该 - 何时)他说得很好。 – User 2011-07-22 23:34:07

5

这些规则都不是法律。他们更多的指导方针和最佳实践。有时候,遵循“规则”是没有意义的,你需要做一些最适合你的情况。

不要害怕做你认为正确的事。你可能会想出更新更好的规则。

1

啊,我猜这个属于我给的答案。 :)

与大多数规则和法律一样,这些规则有相关的动机 - 如果潜在的动机不存在或不适用于您的案例,那么您可以自由地根据你自己的需求。

话虽这么说,SRP是不是OOP本身的规则,但被认为是最佳实践创建既易于扩展和单位可测试的OOP应用程序。

两者都是,我认为作为企业应用程序开发,在现有应用程序的维护占用比新的发展做更多的时间最重要的特征。

5

引述巴伯萨船长:

“ ..和其次,你必须对海盗的代码申请海盗和你不 第三,代码越多,你想叫什么”准则“比实际的规则......”

引述杰克斯派洛&吉布斯。 “我以为你应该遵守代码。” 吉布斯先生:“我们估计,他们更实际的指导方针。”

所以很明显盗明白这相当不错。

的“规则”可以通过运动模式可以理解为“力”

所以有试图让这个类有一个责任的力量。 (凝聚力)

但也有试图保持连接到其他类下跌的力量。

与所有设计(不仅仅是代码)一样,答案在于它取决于。

0

正如许多其他海报所说,所有规则都被打破。
这就是说,我认为SRP是编写优秀代码的更重要的规则之一。它不是特定于面向对象的编程,但是如果类没有单独的责任,OOP的“封装”部分很难做到。

毕竟,你如何正确而简便地封装与多重责任的一类?通常情况下,答案是多个界面,并且在很多语言中可以提供很多帮助,但是对于班级的用户来说,它仍然会让人感到困惑,因为它可能会在不同情况下以完全不同的方式应用。

0

SRP只是ISP的另一个表达:-)。

而“P”的意思是“原则”,而不是“规则”:d