ほとんどの大規模プロジェクトに共通する側面の1つは、多くのドメインエンティティで共通の追跡データが必要なことです。たとえば、ほとんどの大規模なプロジェクトでは、多くのドメインエンティティの次のプロパティを追跡します。
DateTime DateCreated
User CreatedBy
DateTime LastModified
User LastModifiedBy
このデータは非常に自明であり、ドメインオブジェクトに対して誰がいつ何をしたかを追跡するために使用されます。
問題は、大規模なアプリケーションのドメインモデルを設計するときに、この追跡データを処理するための最良の方法は何かということです。
古典的な方法は、基本クラスを使用してから、関連するドメインクラスにその基本クラスから継承させることです。しかし、これは継承警報ベルよりも私の好意的な構成を引き立たせます。私が取り組んできたプロジェクトが多ければ多いほど、手に負えない相続を拒否するようになりますが、それが最良の選択肢であるという状況があるわけではありません。たとえば、この場合などです。別の継承ソリューションはインターフェイスを使用することですが、このソリューションはあまり結合されていませんが、ドメインエンティティでこのアプローチを使用した例はあまりありません。
2番目の方法は、コンポジションを使用して、ある種の追跡オブジェクトを各ドメインエンティティに追加することです。これに関する唯一の問題は、これらを別個のテーブルとして表さないようにデータ層に具体的に指示する必要があることです。マイナーなタスクですが、見返りがない場合は正当化するのが難しいタスクです。
追跡データを処理する最後の方法は、これを透過的に実行するようにデータレイヤーを構成することです。Entity-Frameworkを使用してこれを行うことはおそらく可能だと思いますが、過去にこのソリューションを実装したことがない場合、これは最も先行する時間のかかるソリューションになります。この解決策が問題に値するかどうかを予測することは困難です。
この質問は客観的に見えるかもしれませんが、これは実際には、ほとんどの大規模プロジェクトが何らかの方法で対処しなければならない一般的なタスクです。
メタデータを追跡するためのドメインモデルや大規模なプロジェクトを設計するための最良の方法は何ですか?