3

多くの一般的な機能を使用する C# ASP.Net Web アプリケーションを設計していますが、それを処理する正しい方法は継承によるものと思われます。基本クラス (Person) を作成し、それを Employee や Vendor などの他のクラスに継承し、次に Employee を Manager などに継承する予定です。そうすれば、FirstName、LastName、それぞれの電話番号など。

質問の 2 番目の部分は次のとおりです。継承を使用し、Entity Framework の CodeFirst エンティティを使用すると、継承が理解されますか? データはどのようにテーブルに格納されますか? 各テーブルには FirstName 列と LastName 列がありますか、それとも EF はそれらを共通のテーブルにするのに十分スマートですか?

本当のオブジェクト指向プログラマーである誰かが、これを解決するのを手伝ってくれることを本当に望んでいます。私は相反する情報をたくさん得たので、EF プロジェクトで実際に経験を積んだ人に指導してもらう必要があります。継承権を理解していますか?そうでない場合、何が間違っていますか?どんな助けでも大歓迎です。

ありがとう、

バート

4

3 に答える 3

2

これは簡単な質問ではありませんが、ほとんどの場合、継承ではなく構成を選択する方が適切です。電卓にはディスプレイとキーボードのプロパティがあるという理由だけで、電卓からキャッシュ ディスペンサーを派生させるべきではありません。バカバカしい。
しかし、継承が理にかなっている場合もあります。これらのクラスに「is a」関係が必要かどうかを自問してください。あなたの仕事を見ると、 Vendor と Employee を独立したクラスにする方が良いでしょう。どちらも Person プロパティを持っています。そして、Employee から Manager を派生させます。
ただし、継承の深さはできるだけ少なくしてください。深い階層は、特にメソッドのオーバーライドが多数ある場合、デバッグして理解するのが面倒です。このトピックについてさらにインスピレーションを得るには、Chad Myers のブログ投稿をご覧ください。

于 2013-07-23T19:53:50.823 に答える
1

最初の 1: いいですね。ただし、「is a」関係が指定されていることを確認してください。Address 固有のプロパティを含めるためだけに Address から Person を派生させないでください。この種の再利用には EF 複合型を使用してください。

私の頭に浮かぶ問題の1つは、それVendorがのサブタイプであると確信していますPersonか?

さらに詳しく: 継承とともに「1 つのドメイン」内にとどまることを確認してください。Vinny が別の可能な回答に投稿したように、同じ Person が Manager と CustomerContact であり、両方が Person から継承されている場合、問題が発生します。ただし、マネージャーと顧客の連絡先が同じドメイン内にない場合は、おそらく個人データを 2 回追加する方がよいでしょう。同じ人が、顧客の連絡先ではなくマネージャーとして別の連絡先データを持ちたいと考えている可能性があります。

パート 2: EF が生成するものを選択できます: http://www.entityframeworktutorial.net/code-first/inheritance-strategy-in-code-first.aspx

于 2013-07-23T19:39:13.087 に答える