从set accessor调用方法或强制用户手动执行

时间:2014-01-31 08:38:27

标签: c# methods properties

更新属性时,最好是根据此更改其他属性,还是强制用户直接调用方法?例如:

someObject.TodaysTotalSales = 1234.56;

设置访问者是否可以更新另一个值,例如ThisYearsTotalSales,或者是否应该强制最终用户手动执行此操作。

someObject.TodaysTotalSales = 1234.56;
someObject.UpdateThisYearsTotal();

3 个答案:

答案 0 :(得分:1)

我认为最佳做法是仅在访问时重新计算年度总消费量。否则,如果您经常更新TodaysTotalSales属性,则无需计算总年数。

更一般地说,当您调用属性设置器时,您不希望进行复杂的操作。按照惯例,预计吸气剂和孵化器几乎会立即返回。

如果您的算法太复杂,那么在这种情况下您可以使用缓存值来避免在每次调用时重新计算;当其中一个先决条件发生更改时,您将使缓存值无效

答案 1 :(得分:0)

取决于。

即使他更新了TodaysSales,他还需要知道TotalYearsOfSales吗?

- >提供更新someObject.UpdateThisYearsTotal()的其他方法;并且同时标记他在更新TodaysSales时没有更新YearsTotal,因此如果需要,您可以在流程结束时抛出一些错误

- >在更新TodaysSales

之前,自动更新其他不需要值的属性

答案 2 :(得分:0)

TL; DR:取决于

我假设你有一个类的公共接口。

如果您遵循 OOP封装 原则,那么 someObject 的外部可见状态应该与每个公共访问一致,即你不应该需要任何public UpdateState方法。所以在这种情况下someObject.UpdateThisYearsTotal()是禁忌。内部会发生什么:无论是懒惰的重新计算,缓存,私有的UpdateAllInternal - 都无关紧要。

但OOP不是偶像 - 所以出于性能原因,您可以根据需要设计程序流程。例如:延迟批量数据处理,游戏循环,实体组件系统设计,ORM - 这些系统在其文档(很少在代码合同中)中明确说明它们应该被使用的方式。