一連のルールに基づいて更新する必要のあるフィールドを持つ単純なEntityFrameworkでサポートされたドメインオブジェクトを持つシステムを設計しています-これらのルールを段階的に(アジャイルスタイルで)実装したいので、EFを使用しているので懐疑的です各ルールをドメインオブジェクトに配置する方法について。ただし、「手続き型コード」を記述したり、貧血ドメインモデルを使用したりすることは避けたいと思います。これもすべてテスト可能である必要があります。
例として、オブジェクトは次のとおりです。
class Employee {
private string Name;
private float Salary;
private float PensionPot;
private bool _pension;
private bool _eligibleForPension;
}
「給与が100,000を超え、_eligibleForPensionがfalseの場合、_eligibleForPensionをtrueに設定する」、「_pensionがtrueの場合、_eligibleForPensionをtrueに設定する」などのルールを作成する必要があります。
そのようなルールは約20ありますが、それらをEmployeeクラスに実装するか、EmployeeRulesクラスのようなものに実装するかについてアドバイスを求めています。私の最初の考えは、「Rule」から継承するルールごとに個別のクラスを作成し、Visitorパターンを使用して、各ルールをEmployeeクラスに適用することでしたが、これを行うには、すべてのフィールドをルールに公開する必要があります。気分が悪い。Employeeクラスに各ルールを設定することも、まったく正しくないと思います。これはどのように実装されますか?
2番目の懸念は、実際のEmployeesがDBにバックアップされたEntity Frameworkエンティティであるため、これらの「エンティティ」にロジックを追加することに満足していないことです。特に、各ルールの単体テスト用にオブジェクトをモックする必要がある場合はそうです。同じオブジェクトでテストしているルールがある場合、どうすればそれらをモックできますか?
ルールを適用する前に、AutoMapperを使用してより単純なドメインオブジェクトに変換することを考えていましたが、フィールドの更新を自分で管理する必要があります。これについてもアドバイスはありますか?