单一责任原则:如何确定一个班级的职责数量?

时间:2014-07-03 16:21:38

标签: solid-principles single-responsibility-principle

我正在通过SRP原则。它指出一个阶级应该只有一个变化的原因,这隐含地意味着它应该只有一个责任。

我有点困惑,因为开发人员如何判断一个班级是否只有一个责任?

如果一个类有一个PUBLIC方法(使用多个私有方法),那么它被称为只有一个责任。

2 个答案:

答案 0 :(得分:1)

SRP不是一项原则。

责任或改变的理由是指有理由在设计时更改代码的人。它没有引用有理由在运行时更改的对象。

因此,例如,如果有人想要移动UI上的按钮,则视图类将有理由进行更改。如果有人想要更改数据库架构,数据库访问类将有理由进行更改。

想象一下,如果视图和数据库访问是在同一个类中完成的,那就太恐怖了。

原则是隔离部分代码,以便可以独立地在不同区域进行更改(例如,查看和数据库访问)。如果多个开发人员同时处理代码库,这将非常有用。它对单个开发人员在对另一个人进行更改时不会破坏其他区域也很有用。

这不是一项原则。在实践中,如果你足够接近它们,那么类和模块通常会有多种原因需要改变。原则是真正减少这一点,取出低悬的果实,而不是虔诚地清理代码库。

答案 1 :(得分:0)

责任在于使用系统的用户,问问自己“如果用户想要改变这种状态,那么”还有什么需要影响,那么它还会产生什么影响。

例如,如果我有一名学生'具有“添加课程方法”的对象'并且'保存'方法,

向学生添加新课程不应该影响学生数据的保存方式,但如果我更改了“添加课程”,那么方法我需要重新编译和重新部署与保存学生相关的所有内容,让我们假设实现为数据库。

情况更糟如果我想将数据库单独部署到学生数据结构,或者将学生保存在不同类型的数据库中,或者可能是配置文件。这两件事现在已经融为一体,并且变得僵硬。

关心数据库的用户会受到关心学生的用户的影响。

因此,如果您想确定班级是否有责任,最好的办法就是询问如果您调用它的方法会受到什么影响。

许多只承担一项责任的课程也只有一种方法,但其他方法不会,但绝对不是必需的。

来源:

Object Mentor

Clean Coder videos Ep. 9