【发布时间】:2011-01-24 14:16:06
【问题描述】:
在编写应将数据从格式 A 转换为格式 B 的类时,如何避免违反“单一职责原则”? 此类更改的确切原因有两个,因为格式 A 和 B 的规范都可以更改。
【问题讨论】:
标签: oop transform single-responsibility-principle
在编写应将数据从格式 A 转换为格式 B 的类时,如何避免违反“单一职责原则”? 此类更改的确切原因有两个,因为格式 A 和 B 的规范都可以更改。
【问题讨论】:
标签: oop transform single-responsibility-principle
所以,我是新来的,并在发布此内容时附上我在提出我的答案时要强调的警告。
在我看来,到目前为止,One 只能采用“单一责任原则”之类的概念。对我来说,转换类的唯一职责是管理数据从一种格式规范到另一种格式规范的转换。一些想法:
严格来说,如果其中一种格式发生变化,理论上您仍需要先前版本的格式转换器来转换旧版 dat(向后兼容)。您永远不知道何时有人可能不会收到有关格式更改的备忘录。或者,您可能会在地下室某处遇到一批格式为 A v1 的数据。因此,您的班级的唯一职责就是将数据从 A1.0 格式转换为 b1.0 格式。
如果其中一个规范确实发生了变化,您现在必须为您的班级创建一个新版本,对吗?假设有人修改了格式 A 的规范。现在您需要一个类来管理从格式 A1.1 到 B1.0 的数据转换。您已经创建了一个具有单一职责的新类。
虽然在您的项目范围内,您可能不会将向后兼容的需求视为一项要求,但就 SRP 概念而言,我的理解是,对一个或两个格式规范的更改需要定义一个新的阶级,并且用最严格的学术理论术语来说,并不意味着不止一种责任。
最后,如果您认为数据从一种格式到另一种格式的映射是类的单一职责,那么对任一规范的更改仍然只需要更改类的单一工作。
最后一个例子。假设我班级的职责是将特定的红色阴影转换为特定的粉色阴影。然后有一天,首席设计师决定他想要一个更亮的粉红色作为输出,我的规格的一侧发生了变化,但我班级的责任没有改变。第二天,公司最高层决定新的红色标准更像栗色。现在我的输入规范发生了变化,但我班级的责任没有。我可能会决定创建一个新类,并保留 1.0 版以供保留,或者我可能只是更新现有版本。在任何一种情况下,类仍然有一个单一的职责;将红色规范映射到粉色规范。
【讨论】: