0

可能重复:
单一责任原则对验证意味着什么

案例 A:验证对象 -> 发送到方法 -> 方法假定有效对象 -> 方法执行
案例 B:发送到方法 -> 方法检查对象有效性 -> 方法仅在有效时执行

在情况 A 中,我可以让该方法负责 1 个任务(执行)。但是,我可能不小心传递了一个无效对象。(当然我可以通过仔细编码来防止这种情况,但这是我问题的核心......)

在情况 B 中,该方法永远不会在无效对象上执行,但它必须不仅负责执行其代码,而且还负责对象验证。这不是违反“单一责任”吗?

谢谢你!

4

1 回答 1

1

最好的编码实践是

案例C:对象通过构造是有效的,这意味着不可能构造一个无效的实例,并且所有方法在有效状态下调用时都会转换到有效状态。

在这种情况下,对象本身对其有效性负责,并且任何额外的检查都只是为了快速失败,以防对象不符合其保证。


例如,对于链接列表,您可以让传递者和接收者检查列表是否格式正确,但每个列表都可能有很多,因此您必然会重复工作。

如果链表本身对其自身的有效性负责,那么它的创建/添加/删除/连接/复制操作都保持有效性,那么只涉及一个类,并且由于它具有对私有的特权访问权限,因此工作更容易。

于 2012-11-10T04:47:04.430 回答