【发布时间】:2014-07-03 16:21:38
【问题描述】:
我正在研究 SRP 原则。它指出一个类应该只有一个更改原因,这隐含地暗示它应该有一个单一的责任。
我有点困惑,开发人员如何确定一个类是否只有一个职责?
如果一个类有一个 PUBLIC 方法(带有多个私有方法),那么它是否被称为具有单一职责。
【问题讨论】:
标签: solid-principles single-responsibility-principle
我正在研究 SRP 原则。它指出一个类应该只有一个更改原因,这隐含地暗示它应该有一个单一的责任。
我有点困惑,开发人员如何确定一个类是否只有一个职责?
如果一个类有一个 PUBLIC 方法(带有多个私有方法),那么它是否被称为具有单一职责。
【问题讨论】:
标签: solid-principles single-responsibility-principle
SRP 是原则而非规则。
责任或更改理由是指一个人有理由在设计时更改代码。它并不是指有理由在运行时更改的对象。
因此,例如,如果有人希望 UI 上的按钮移动,则视图类将有理由更改。如果有人想更改数据库架构,则数据库访问类将有理由更改。
想象一下,如果视图和数据库访问在同一个类中完成,那将是多么可怕。
原则是隔离部分代码,以便可以在不同区域独立进行更改(例如视图和数据库访问)。如果多个开发人员同时在代码库上工作,这将非常有用。对单个开发人员进行更改时不要破坏其他区域也很有用。
这是原则而非规则。在实践中,如果你足够近地眯着眼睛看课程和模块,它们通常会有多种改变的理由。原则是真正减少这种情况,取出唾手可得的果实,而不是虔诚地清理代码库。
【讨论】:
责任是关于用户使用系统的,问问自己“如果用户想要改变它”它还需要影响什么,那么它还会影响什么。
例如,如果我有一个带有“添加课程方法”和“保存”方法的“学生”对象,
向学生添加新课程不需要影响学生数据的保存方式,但如果我更改了“添加课程”方法,我需要重新编译和重新部署与保存学生相关的所有内容,假设是实现为数据库。
如果我想将数据库单独部署到学生数据结构中,或者将学生保存在不同类型的数据库中,或者可能是配置文件,那就更糟了。这两件事现在是耦合的,并且变得僵化了。
关心数据库的用户会受到关心学生的用户的影响。
因此,如果您想确定该类是否有一项责任,最好的办法是询问如果您调用它的方法会受到什么影响。
许多只有一种职责的类也只有一种方法,但其他类不会,这绝对不是必需的。
来源:
【讨论】: