2

モデルのために継承する必要があるベースクラスがあります

お気に入り

public class Employee : BaseModel
{

}

この BaseModel には、作成されたすべてのアプリケーション モデルで使用できるようにする必要がある、いくつかのプロパティといくつかの既定の実装があります。

エンティティ フレームワークへの移行を計画している場合、EF で生成されたモデルに BaseModel からのメソッドとプロパティを持たせるにはどうすればよいですか。

ただし、生成されたクラスから EntityObject を削除し、次のような各プロパティで関連する実装をコメントアウトしました

   //ReportPropertyChanging("id");
                    //_id = StructuralObject.SetValidValue(value);
                    //ReportPropertyChanged("id");

これが正しい方法であるか、この種のシナリオに対処する正しい方法があるかどうかを親切に提案してください。

4

1 に答える 1

1

ドメイン内のすべてのクラスに対して 1 つの基本クラスを持つことは、アンチパターンです。OO の原則に従うクラス (単一の責任、Liskow など) は、すべてが同じ基本クラスを持つことは不可能です。基本クラスを知らなくても、共通のプロパティは共通のデータベース フィールドまたはいくつかのエンティティ フレームワークの実装に関係しているので、基本クラスは永続性の無視も解消します。

エンティティ フレームワークの第一人者( who???) の話: データベース ファーストで作業する場合は、基本クラスを使用しない方がよいでしょう。または: 本当に基底クラスが必要な場合: コードを先に実行し、マッピングで基底クラスを無視します。つまり、継承をマップしません。DbContext API が推奨される EF API であることに注意してください (ただし、db-first を使用することもできます)。

プラグマティストの話: 可能であればインターフェイスを使用してください。各クラスが何度も何度も実装しなければならないのは面倒ですが、オブジェクト指向の原則を破ることはありません。原則には理由があります。遅かれ早かれ、それらを壊すと、あなたにハンディキャップがかかります(おそらく阻害することはありません).

于 2012-12-16T15:10:48.527 に答える