データ アクセス層の作成には Entity Framework 4.0 を使用しました。次に、私のビジネス ロジック層には DAL と同じオブジェクトがありますが、いくつかの拡張機能 (つまり、より多くのプロパティ、いくつかの関数、セッターでのデータ検証など) があることがわかりました。
DAL と BLL を別々のプロジェクトに含めることを計画し、BLL でエンティティ クラスを使用してコードの冗長性を防ぐためのベスト プラクティスを探していました。
私が検索したところ、2つの主要なアイデアがあります。
- 部分クラスによる同じプロジェクト内のエンティティ クラスの拡張
- インターフェイスの使用 (エンティティ クラスおよび関連する BLL クラスによって実装されます)。前者はプログラマーの間でより人気があります。
上記のソリューションの欠点:
- 部分クラスの一部として同じプロジェクトにコードを追加する必要があります。これは、プロパティとメソッドを追加するのには適していますが、何かをオーバーライドするのには適していません (つまり、ビジネス ロジック レイヤーでプロパティを設定する前に検証を追加するなど)。
- エンティティ モデルが変更された場合は、エンティティ クラスからインターフェイスを手動で再度抽出する必要があり、BLL 関連のクラスにも別の変更が必要です (2 つの手動の回避策)。
私の質問は、関連するエンティティ クラスから BLL クラスを継承せず、メソッドとプロパティを拡張/オーバーライドしないのはなぜですか?