我有一个在 linq to sql 方法中实例化的对象。分配对象字段时,我想检查日期字段,如果它是旧日期,请从另一个表中检索数据并执行计算,然后再继续分配此对象。
通过属性设置器触发此类事件有什么问题吗?或者我是否应该通过某些服务独立检查日期并在之后的某个时候进行必要的更改?
问问题
119 次
2 回答
1
在你的 setter 中执行一些逻辑并没有错,但是你应该小心你在 setter 中放置了多少逻辑。setter 的基本问题之一是,由于它们的行为类似于属性,但具有支持代码,因此很容易忘记幕后可能存在一些重要的操作。
如果您有使用访问器的访问器使用访问器的访问器,则此类事情可能会导致问题;您可能会很快导致意外的性能问题。通常,将 setter(或 getter,就此而言)的操作保留在相对较小的一组操作中是一个好主意。例如,验证可以在 setter 中正常工作,但我通常建议不要对外部资源进行验证,因为有两件事:首先,资源延迟会导致预期访问速度出现问题,其次,外部资源的数量访问会破坏你的表现。
一般来说,规则是这样的:保持简单。在二传手中做复杂的事情并不是不合理的,但是如果你这样做了,了解你将导致的所有操作的后果非常重要,并且记录它做得非常好是非常重要的,所以下一个人(或女孩)使用代码不只是尝试天真地使用访问器并最终意外地导致大量资源争用问题。
于 2009-05-05T06:50:08.737 回答
0
使用设置器而不是公共字段的一半目的是能够触发与设置某些数据相关的事件。
关键词:关联。如果您只是将 setter 用作“方便”的时间来做一些其他事情,因为它恰好可以工作,那么您做错了。如果设置此值需要完成其他工作,那么请务必使用 setter 来完成。
于 2009-05-05T04:42:24.143 回答