的回答堆栈溢出的问题指出,一个特定的框架违反了简单明了的OOP原则:单一职责原则(SRP)。
是单一职责原则真正 OOP的规则?
我的面向对象编程的定义的理解是“在那里的对象和他们的行为被用于创建软件的范例”。 这包括以下技术:封装,多态和继承。
现在不要误会我的意思 - 我相信SRP是关键,以最良好的面向对象设计,但我觉得有情况下,这个原则可以而且应该被打破(就像数据库标准化规则)。 我积极推动SRP的好处,而绝大多数的我的代码如下这个原则。
但是,它是一个规则,从而意味着它不应该被打破?
只有极少数的规则,如果有的话,在软件开发中是没有例外。 有些人认为双方有没有转到地方,但他们错了。
至于OOP去,没有面向对象性,从而取决于你问,你会得到不同的软硬原则,模式和做法,谁的单一定义。
OOP的经典思想是,消息被发送到否则不透明的物体和物体用自己的内脏的知识解释该消息,然后执行某种功能。
SRP是可以适用于一类的角色,或函数,或模块软件工程的原则。 它有助于事物的凝聚力,使其表现好放在一起而不无关位挂的,或具有相互交织和复杂的事情多重角色。
即使只是一个负有责任,仍然可以范围从单一功能到一组松散相关的功能是一个共同的主题的一部分。 只要你避免陪审团操纵的元素来采取的东西它不是主要设计用于负有责任或这样做淡化对象的简单一些其他临时的事情,那么违反任何你想要的原则。
但我发现,它更容易获得SRP正确的,那么做的更精致,这也是一个强大的。
这些规则都不是法律。 他们更准则和最佳做法。 有些时候它没有任何意义遵循“规则”,你需要做什么是最适合你的情况。
不要害怕做你认为是正确的。 你实际上可能拿出更新更好的规则。
引述巴伯萨船长:
“..和其次,你必须对海盗的代码申请海盗和你没有。第三,代码越多,你会称之为‘指引’不是实际的规则......”
引用杰克·斯派洛和吉布斯。 “我以为你应该保持的代码。” 吉布斯先生:“我们估计,他们更实际的指导方针。”
所以很明显盗明白这一点非常好。
该“规则”可以通过运动模式可以理解为“力”
因此,有试图使类有一个责任的力量。 (凝聚)
但也有试图保持连接到其他类下跌的力量。
如同所有的设计(不只是代码)的答案是,这取决于。
啊,我想这涉及到一个答案我给了。 :)
与大多数规则和法律,有潜在动机通过这些规则的有关 - 如果底层的动机不存在,或者适用于你的情况,那么你可以自由弯曲/根据自己的需要,打破规则。
话虽这么说,SRP是不是OOP本身的规则,但被认为是最佳实践创建既易于扩展和单位可测试的OOP应用程序。
两者都是,我认为作为企业应用程序开发极为重要,其中的现有应用程序的维护占用比新的发展做更多的时间特性。
正如许多其他的海报说,所有的规则都是用来被打破的。
话虽这么说,我认为,SRP是编写好的代码更重要的规则之一。 这不是具体到面向对象编程,但OOP的“封装”部分是很难做到的权利,如果该类没有一个单一的责任。
毕竟,你如何正确而简便地封装与多重责任的一类? 通常情况下,答案是多种接口和在许多语言,可以帮助不少,但它仍然是混淆你的类,它可以适用于完全不同的方式在不同情况下的用户。