Is Single Responsibility Principle a rule of OOP?一个对Stack Overflow问题的回答表明,一个特定的框架违反了一个简单而简单的OOP规则:单一责任原则(SRP)。 单一责任原则真的是OOP的规则吗? 我对面向对象编程的定义的理解是"一种使用对象及其行为创建软件的范例"。 这包括以下技术:封装,多态和继承。 现在不要误会我的意思-我相信SRP是大多数优秀OO设计的关键,但是我觉得在某些情况下可以并且应该打破这一原则(就像数据库规范化规则一样)。 我积极推动SRP的好处,而我的大部分代码都遵循这一原则。 但是,这是否是规则,是否意味着它不应被打破? 软件开发中很少有规则,如果有的话,也不例外。有些人认为没有去处,但是他们错了。 就OOP而言,没有一个单一的面向对象定义,因此根据您要求的对象,您将获得一套不同的硬性和软性原则,模式和实践。 OOP的经典思想是将消息发送到原本不透明的对象,然后这些对象根据自己的内在知识来解释消息,然后执行某种功能。 SRP是一种软件工程原理,可以应用于类,函数或模块的角色。它有助于某种事物的凝聚力,从而使其表现得很好,而没有无关紧要的悬挂或具有使事物复杂化和缠绕的多个角色。 即使只有一项职责,也可能从单个功能到一组松散相关的功能(这是同一主题的一部分)不等。只要您避免陪审团操纵某个元素来承担它最初不是为某些事物设计的职责,或者避免做一些临时的事情来削弱对象的简单性,那么就会违反您想要的任何原理。 但是我发现,正确设置SRP要容易得多,而做一些精巧而又健壮的事情就容易了。 引用巴博萨上尉的话:
" ..其次,您必须是海盗,海盗代码才能适用,而您不是。
引用杰克·斯派洛和吉布斯的话。 显然,海盗们对此非常了解。 可以通过模式移动将"规则"理解为"强制" 因此,有一种力量试图使班级承担单一责任。 (凝聚) 但是,也有一种力量试图使与其他阶层的耦合降下来。 与所有设计(不只是代码)一样,答案取决于它。 这些规则都不是法律。它们是更多准则和最佳实践。有时候,遵循"规则"没有意义,而您需要做最适合自己情况的事情。 不要害怕做您认为正确的事情。您实际上可能想出了更新更好的规则。 嗯,我想这与我给的答案有关。 :) 与大多数规则和法律一样,这些规则具有与之相关的潜在动机-如果根本动机不存在或不适用于您的案子,那么您可以根据自己的需要随意弯曲/破坏规则。 话虽这么说,SRP本身并不是OOP的规则,但是被认为是创建易于扩展和可单元测试的OOP应用程序的最佳实践。 我认为这两项都是企业应用程序开发中最重要的特征,在现有应用程序中,现有应用程序的维护比新开发需要更多的时间。
正如许多其他海报所说的那样,所有规则都被打破了。 毕竟,您如何正确,简单地封装具有多个职责的类?通常,答案是多种界面和多种语言,可以提供很多帮助,但仍然使您的班级用户感到困惑,因为它可能在不同情况下以完全不同的方式应用。 SRP只是ISP :-)的另一种表达方式。 而" P"表示"原理",而不是"规则":D |