私は、一連のルールに基づいて更新する必要のあるフィールドを持つ単純なEntity Frameworkバックアップドメインオブジェクトを持つシステムを設計しています。私はEFを使用しているので、各ルールをドメインオブジェクトに入れることについて懐疑的です。しかし、私は "手続き型コード"の作成と貧血ドメインモデルの使用を避けたい。このすべては、同様にテスト可能である必要があります。例として、オブジェクトがビジネスロジックでルールの形で貧血ドメインモデルを回避する方法
されています:
class Employee {
private string Name;
private float Salary;
private float PensionPot;
private bool _pension;
private bool _eligibleForPension;
}
_pensionが、その後真であるならば、私は」そのような「給与が100,000以上であると_eligibleForPensionが偽であるならば、真として_eligibleForPensionを設定する」などのルールを構築する必要があり、 _eligibleForPensionをtrueに設定します。 "
約20のルールがあり、私はEmployeeクラスまたはEmployeeRulesクラスのようなものに実装する必要があるかどうかアドバイスを探していますか?私の最初の考えは、 "Rule"を継承する各ルールに対して別々のクラスを作成し、Employeeクラスに各ルールを適用することでした。多分Visitorパターンを使用しましたが、これを行うにはすべてのフィールドをルールに公開する必要があります間違っていると感じる。 Employeeクラスに各ルールを持たせることは、どちらかといえばかなり気にしません。これはどのように実装されますか?
2番目の懸案事項は、実際の従業員がDBにバックアップされたEntity Frameworkエンティティであるため、特にこれらの「エンティティ」に論理を追加する気がしないということです。特に、各ルールを単体テストするためにオブジェクトをモックする必要がある。同じオブジェクトでテストしているルールがあれば、私はどのようにそれらを嘲笑することができますか?
私はAutoMapperを使ってルールを適用する前に簡単なドメインオブジェクトに変換することを考えていましたが、フィールドの更新を自分で管理する必要がありました。これについてのアドバイスもありますか?
役立つだろうトリック。私は自分の望むデザインである私的なフィールドの例を挙げましたが、EFはパブリックプロパティを持っていますので、Employeesクラスに直接アクセスすると内部クラスを使用する必要はありません。私は誰かがEF部品を含む質問に答えることができることを願って少し質問を開いたままにします。ありがとう! – PCurd
私は少し修正されたアプローチを使ってシステムのデモモデルを作りました - 私は内部クラスとしてのルールを持っていません - それはうまく動作し、良い感じです。このシステムでは、公開されているフィールドがひどい犯罪ではないことを知っていますが、内部クラスを使用して再度そのメソッドがどのように感じられるかを調べる可能性があります。ご協力いただきありがとうございます。 – PCurd