一个
answer到Stack Overflow问题表示,一个特定的框架违反了简单和简单的OOP规则:单一责任原则(SRP)。
单一责任原则真的是OOP的规则吗?
我对于面向对象编程的定义的理解是“使用对象及其行为来创建软件的范例”。这包括以下技术:封装,多态和遗产。
现在不要误会我 – 我相信SRP是最好的OO设计的关键,但我觉得有些情况下这个原则可以而且应该被打破(就像数据库规范化规则)。我积极推动SRP的好处,我的大部分代码遵循这一原则。
但是,这是一个规则,因此意味着它不应该被打破?
在软件开发中很少有规则(如果有的话)也无一例外。有些人认为goto没有地方,但他们错了。
就OOP而言,没有一个面向对象的定义,所以根据你的问题你会得到一套不同的硬,软原则,模式和实践。
OOP的经典思想是将消息发送到其他不透明对象,并且对象使用自己的内部知识解释消息,然后执行某种功能。
SRP是一种可应用于类,功能或模块角色的软件工程原理。它有助于一些东西的凝聚力,使其表现良好,没有无关的位悬在其上,或具有交织和复杂的多个角色。
即使只有一个责任,这仍然可以从一个单一的功能到一组松散相关的功能,这是一个共同的主题的一部分。只要你避免陪审团追究某件事情的责任,它不是主要设计的,或者是做一些稀释物体的简单性的其他特殊事情,那么违反任何你想要的原则。
但是我发现更容易获得SRP的正确性,然后做一些更精细的一些同样健壮的事情。