3

DDD を使用して C# プロジェクトに取り組んでいます。私はいくつかのクラスを書きました。エンティティ カテゴリに分類されるものもあれば、値オブジェクト カテゴリに分類されるものもあります。私の質問は、エンティティと値オブジェクトの定義に忠実であるために、どのくらいの作業が必要ですか、または行う必要があるかです。

エンティティ :

  • パブリック コンストラクターは禁止されています。ファクトリおよび/または静的メソッドを使用する必要があるため、オブジェクト (id を持つメモリ内) の一意性が保証されます。
  • 演算子 ==、!= のオーバーロード、および Equals メソッドのオーバーライドであるため、比較はオブジェクト参照以外のものに基づいています。ID

値オブジェクト:

  • パブリック コンストラクターが許可されています。ファクトリ、静的メソッドが許可されており、(オプションで)オブジェクトの一意性を保証するために(文字列のインターンなど)、何らかのキャッシングを実装できます。
  • 演算子 ==、!= のオーバーロード、および Equals メソッドのオーバーライドであるため、比較は両方のオブジェクトのすべての値に基づいています。代わりに構造体を使用することもできます。
  • 不変

これらは概念を強制するよりも可能性がありますが、それらは必須ですか? これらのファクトリ、静的メソッドの作成、これらすべてのメソッドのオーバーロードとオーバーライドは、DDD の概念を適用すると、大きな負荷または少量の作業のように見えるためです。

どこまで行けばいいですか?

4

2 に答える 2

4

私が大好きなプログラミング原理があり、それはKISSと呼ばれています。

肝心なのは、必要なところまで行くことです。聞いたことがある、または出会ったという理由だけで物事を行い、ガイドラインに従うだけではありません。代わりに、基本的な機能から始めて、必要に応じて機能を追加してください。

たとえば、あなたは工場について話しました。オブジェクトの作成が複雑であるか、特定の条件を強制したい場合を除き、通常は使用しません。または、比較のための演算子のオーバーロードについて話したときは、実際に比較を行う必要があるか、コードで必要でない限り、使用しません。私ができるときに適用することの 1 つは不変性です。これは、値オブジェクトに適しているという理由だけでなく、不変オブジェクトは作成後に変更できないため、マルチスレッドのサポートに関しては優れたツールであるためです。

まとめ:シンプルに始めて、必要に応じて追加してください。

于 2013-08-11T22:12:40.243 に答える