使用对象的setter来触发数据更新,最佳实践

时间:2009-05-05 04:38:54

标签: domain-driven-design setter

我有一个在linq to sql方法中实例化的对象。在分配对象字段时,我想检查日期字段,如果是旧日期,则从另一个表中检索数据并执行计算,然后再继续分配此对象。
通过属性设置器触发此类事件有什么问题吗?或者我是否应该通过某些服务独立检查日期并在必要时在某些时候进行更改?

2 个答案:

答案 0 :(得分:1)

在你的制定者中做一些逻辑并没有什么不妥,但你应该小心你在你的制定者中放了多少逻辑。 setter的一个基本问题是,由于它们的行为类似于属性,但有后备代码,因此很容易忘记幕后可能会发生一些非平凡的行为。

如果你有使用访问器的访问器使用访问器,这种事情可能会导致问题;您可以迅速导致意外的性能问题。通常,将setter(或getter)的操作保持为相对较小的一组操作是个好主意。例如,验证可以在setter中完美地工作,但我通常建议不要对外部资源进行验证,因为有两件事:第一,资源延迟会导致预期访问速度出现问题,其次,外部资源的数量访问会破坏您的表现。

通常,规则是:保持简单。在setter中做复杂的事情并不是没有道理的,但如果你这样做,理解你将要引起的所有行为的后果是非常重要的,记录它做得非常好的非常重要,所以下一个人(或女孩)使用代码并不只是试图天真地使用访问器并最终导致意外的大量资源争用问题。

答案 1 :(得分:0)

使用setter而不是公共字段的一半是能够触发与设置某些数据相关的事件。

关键字:关联。如果你只是使用setter作为一个“方便”的时间来做其他事情,因为它碰巧工作,你做错了。如果设置此值需要完成其他工作,那么请务必使用setter来执行此操作。