转换数据时如何避免违反SRP

时间:2011-01-24 14:16:07

标签: oop transform single-responsibility-principle

在编写一个应该将数据从格式A转换为格式B的类时,如何避免违反“单一责任原则”? 这样的类有两个原因要改变,因为格式A和B的规格都可以改变。

1 个答案:

答案 0 :(得分:3)

所以,我是新来的,发布这个警告,我正在提出我的答案。

在我看来,到目前为止,人们只能采取像“单一责任原则”这样的概念。对我而言,转换类的唯一责任是管理从一种格式规范到另一种格式规范的数据转换。一些想法:

  1. 从最严格的角度来看,如果其中一种格式发生变化,理论上您仍然需要格式转换器的先前版本来转换旧版数据(向后兼容性)。你永远不知道什么时候有人可能没有得到关于格式变化的备忘录。或者您可能会在地下室某处以A v1格式遇到一批数据。因此,您的类的单一责任仍然是将数据从格式A1.0转换为格式b1.0。

  2. 如果其中一个规格发生变化,您现在必须创建一个新版本的版本,对吗?假设某人修改了格式A的规范。现在需要一个管理从格式A1.1到B1.0的数据转换的类。您创建了一个具有单一职责的新班级。

  3. 虽然在项目范围内,您可能不会考虑向后兼容性的要求,就SRP概念而言,我的理解是,一个或两个格式规范的更改需要定义新的在最严格的乙炔理论术语中,并不是一种责任。

    最后,如果您考虑将数据从一种格式映射到另一种格式作为该类的单一责任,那么更改为EITHER规范仍然只需要更改该类的单个作业。

    最后一个例子。假设我班的责任是将特定的红色阴影变成特定的粉红色。然后有一天,cheif设计师决定他想要一个更亮的粉红色作为输出,我的规格的一面已经改变,但我班的责任却没有。第二天,在最高企业层面决定新的红色标准更像是栗色。现在我的输入规范有变化,但我班的责任却没有。我可能会决定创建一个新类,并保留1.0版的保留期,或者我可能只是更新现有版本。在任何一种情况下,班级仍然只有一个责任;将红色规范映射到粉红色规范。