Domain driven design 使用对象';s setter触发数据更新,最佳实践

Domain driven design 使用对象';s setter触发数据更新,最佳实践,domain-driven-design,setter,Domain Driven Design,Setter,我有一个在linq to sql方法中实例化的对象。分配对象字段时,我想检查日期字段,如果是旧日期,则从另一个表检索数据并执行计算,然后再继续分配此对象。 通过属性设置器触发这样的事件有什么问题吗?或者我应该通过一些服务单独检查日期,并在Wewards之后的某个时间进行必要的更改吗?使用设置器而不是公共字段的一半意义在于能够触发与设置特定数据相关的事件 关键词:关联。如果你只是利用setter作为一个“方便”的时间去做一些其他的事情,因为它正好工作,那么你就做错了。如果设置此值需要做其他工作,那

我有一个在linq to sql方法中实例化的对象。分配对象字段时,我想检查日期字段,如果是旧日期,则从另一个表检索数据并执行计算,然后再继续分配此对象。

通过属性设置器触发这样的事件有什么问题吗?或者我应该通过一些服务单独检查日期,并在Wewards之后的某个时间进行必要的更改吗?

使用设置器而不是公共字段的一半意义在于能够触发与设置特定数据相关的事件


关键词:关联。如果你只是利用setter作为一个“方便”的时间去做一些其他的事情,因为它正好工作,那么你就做错了。如果设置此值需要做其他工作,那么无论如何,请使用setter来执行此操作。

从setter中执行一些逻辑没有错,但是您应该注意在setter中放置了多少逻辑。setter的一个基本问题是,由于它们的行为类似于属性,但有支持代码,因此很容易忘记在幕后可能会发生一些非平凡的操作

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

一般来说,规则是:保持简单。在二传中做复杂的事情并不是不合理的,但如果你这样做了,了解你将导致的所有行为的后果是非常重要的,记录下它做得非常好的事情是非常重要的,因此下一个男孩(或女孩)使用代码不仅仅是试图天真地使用访问器,最终导致意外的大规模资源争用问题