我正在设计一个具有简单实体框架支持的域对象的系统,该对象具有我需要根据一系列规则更新的字段 - 我想逐步实现这些规则(以敏捷风格)并且当我使用 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 转换为更简单的域对象,但随后需要自己管理对字段的更新。对此也有什么建议吗?