oop - 单一职责原则是 OOP 的规则吗?

标签 oop

关闭。这个问题是opinion-based .它目前不接受答案。












想改进这个问题?更新问题,以便 editing this post 可以用事实和引用来回答它.

3年前关闭。




Improve this question




一个 answer一个 Stack Overflow 问题指出,一个特定的框架违反了一个简单明了的 OOP 规则:单一责任原则 (SRP)。

单一职责原则真的是 OOP 的规则吗?

我对面向对象编程定义的理解是“使用对象及其行为来创建软件的范例”。这包括以下技术:封装、多态性和继承。

现在不要误会我的意思——我相信 SRP 是大多数优秀 OO 设计的关键,但我觉得在某些情况下可以而且应该打破这个原则(就像数据库规范化规则一样)。我积极插入 SRP 的好处,我的大部分代码都遵循这个原则。

但是,这是一条规则,因此暗示它不应该被打破吗?

最佳答案

软件开发中很少有规则(如果有的话)是无一异常(exception)的。有些人认为 goto 没有位置,但他们错了。

就 OOP 而言,面向对象并没有单一的定义,因此取决于你问谁,你会得到一套不同的硬性和软性原则、模式和实践。

OOP 的经典思想是消息被发送到原本不透明的对象,对象根据自己的内部知识解释消息,然后执行某种功能。

SRP 是一种软件工程原则,可以应用于类、函数或模块的角色。它有助于某种事物的凝聚力,因此它可以很好地组合在一起,而没有无关的部分卡在它上面或具有使事物交织和复杂化的多个角色。

即使只有一个职责,范围仍然可以从单个功能到一组松散相关的功能,这些功能是共同主题的一部分。只要你避免陪审团操纵一个元素来承担它主要不是为它设计的东西的责任,或者做一些其他临时的事情来淡化对象的简单性,那么就违反了你想要的任何原则。

但我发现更容易让 SRP 正确,然后做一些更精细的事情,同样强大。

关于oop - 单一职责原则是 OOP 的规则吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15412/

相关文章:

java - Memento 和 Command 设计模式有什么区别?

javascript - JS 中数组的元素可以知道谁是该数组的所有者吗?

Java重写和重载在编译时抛出错误?

java - 对象可以通过注释扩展功能吗? (SugarORM 示例)

php - 这个语法应该做什么?

php - OOP PHP 类从一行调用调用 function1()->function2()

c++ - c++中的组合错误

java - 最佳实践 : instance variables filling over time

c# - 这个 "Programming to Interfaces"是如何工作的?

c++ - 正确取消引用 2D 动态数组?