我正在设计一个系统,它有一个基于简单Entity Framework支持的域对象,其中包含一些需要根据一系列规则进行更新的字段。我希望逐步实现这些规则(以敏捷的方式),而且由于我正在使用EF,我对将每个规则放入域对象中感到怀疑。然而,我想避免编写"过程性代码"并使用贫血的领域模型。所有这些都需要可测试性。
例如,对象是:
我需要建立一些规则,例如“如果工资高于100,000且不符合养老金要求,则将符合养老金要求标记为true”,以及“如果符合养老金要求,则将符合养老金要求标记为true”。大约有20个这样的规则,我想知道它们应该在员工类中实现还是像EmployeeRules类那样?我的第一反应是为每个规则创建一个继承自“Rule”的单独类,然后将每个规则应用到员工类上,也许使用Visitor模式,但是这样做需要将所有字段都暴露给规则,所以感觉不太对。然而,将每个规则放在Employee类中也不太对。这应该如何实现呢?
第二个问题是,实际的员工是Entity Framework实体,支持DB,因此我不希望向这些“实体”添加逻辑-特别是当我需要模拟对象以对每个规则进行单元测试时。如果它们具有我正在测试的规则,则如何模拟它们?
我一直在考虑使用AutoMapper将其转换为简单的领域对象,然后再应用规则,但我需要自己管理字段的更新。对此有什么建议吗?
例如,对象是:
class Employee {
private string Name;
private float Salary;
private float PensionPot;
private bool _pension;
private bool _eligibleForPension;
}
我需要建立一些规则,例如“如果工资高于100,000且不符合养老金要求,则将符合养老金要求标记为true”,以及“如果符合养老金要求,则将符合养老金要求标记为true”。大约有20个这样的规则,我想知道它们应该在员工类中实现还是像EmployeeRules类那样?我的第一反应是为每个规则创建一个继承自“Rule”的单独类,然后将每个规则应用到员工类上,也许使用Visitor模式,但是这样做需要将所有字段都暴露给规则,所以感觉不太对。然而,将每个规则放在Employee类中也不太对。这应该如何实现呢?
第二个问题是,实际的员工是Entity Framework实体,支持DB,因此我不希望向这些“实体”添加逻辑-特别是当我需要模拟对象以对每个规则进行单元测试时。如果它们具有我正在测试的规则,则如何模拟它们?
我一直在考虑使用AutoMapper将其转换为简单的领域对象,然后再应用规则,但我需要自己管理字段的更新。对此有什么建议吗?