【发布时间】:2013-03-26 19:53:09
【问题描述】:
我正在设计一个系统,该系统具有一个简单的实体框架支持的域对象,该对象具有我需要根据一系列规则更新的字段 - 我想逐步实施这些规则(以敏捷的方式)并且我正在使用 EF我对将每个规则放入域对象持怀疑态度。但是,我想避免编写“程序代码”和使用贫血的域模型。这一切都需要可测试。
例如,对象是:
class Employee {
private string Name;
private float Salary;
private float PensionPot;
private bool _pension;
private bool _eligibleForPension;
}
我需要建立规则,例如“如果 Salary 高于 100,000 并且 _eligibleForPension 为 false,则将 _eligibleForPension 设置为 true”和“如果 _pension 为 true,则将 _eligibleForPension 设置为 true”。
大约有 20 条这样的规则,我正在寻求建议,是否应该在 Employee 类或类似 EmployeeRules 类中实现它们?我的第一个想法是为从“Rule”继承的每个规则创建一个单独的类,然后将每个规则应用于 Employee 类,可能使用访问者模式,但我必须将所有字段暴露给规则才能做到这一点感觉不对。虽然在 Employee 类上设置每条规则也感觉不太正确。这将如何实施?
第二个问题是,实际的员工是支持到数据库的实体框架实体,所以我不乐意为这些“实体”添加逻辑——尤其是当我需要模拟对象以对每个规则进行单元测试时。如果他们有我在同一个对象上测试的规则,我怎么能嘲笑他们?
我一直在考虑在应用规则之前使用 AutoMapper 转换为更简单的域对象,但随后需要自己管理对字段的更新。对此也有什么建议吗?
【问题讨论】:
标签: entity-framework domain-driven-design entity business-logic anemic-domain-model