相続対enum性のドメインモデル
-
27-09-2019 - |
質問
ディスカッションを行った仕事に関する相ドメインモデルが複雑に開発する。私は○○プログラマで私の引数を持相のドメインモデルの開発者の生活実際のスイッチの場所です。
どうです:
class Animal {
}
class Cat : Animal {
}
class Dog : Animal {
}
私の同僚であっ
public enum AnimalType {
Unknown,
Cat,
Dog
}
public class Animal {
public AnimalType Type { get; set; }
}
どんなに説得したリンク 歓迎 )このクラス階層がより有する物件enumこのような状況?
よろしく!
解決
こちらかの理由です:
利用承継の場合の種類に変わりはありません。例えば
を継承のためのようなもの:
火消し <-従業員 <人が間違っている。
どのフレディの火消しの変化の仕事やなり失業者は、死と再現の新しいオブジェクトの新しいタイプのすべての関係になっています。
そのナイーブ溶液を上記の問題るJobTitle enumプロパティ名です。ことができなシナリオ例必要がない場合は非常に複雑な挙動の役割/タイプです。
をより正しい方をする人のクラスは、リストの役割を果たしてきました。それぞれの役割を表す。g雇用時間スなサービスを提供しています。
例えば
freddy.Roles.Add(new Employement( employmentDate, jobTitle ));
または失わせないアイテム:
freddy.CurrentEmployment = new Employement( employmentDate, jobTitle );
このように、フレディな開発w/oを持つ彼を殺害します。
しかし、すべての私ramblingsんと答えた場合のものを使用できるenum型階層をjobtitle.
純でmem OOいと思うんでより正しい使用の継承のためのjobtitlesます。
だいO/Rマッピングすのが少しovercomplexデータモデルの裏がmapperを地図それぞれのサブタイプを新たにする。そのような場合、多くの列挙型アプローチがない場合はリアル/複雑な挙動に伴う種類です。から出ない人も結構多いですが、"type==JobTitles.火消しの..."の場合に限り使用できやすいものeaser以下です。
例えばにEntity Framework4デザイナーです。純で地図をそれぞれのサブタイプを新たにする。とがでる場合がありますが、醜いモデルはテルのすぐ近くは飲食面では貧弱に加わすクエリデータベースw/oの本当のです。
しかしを使用して行い承継の場合はタイプ/役割です。例えばのための製品です。
"といったCD <-製品、書籍 <-製品です。相続を勝ちがこの場合はそれもありますの異なる状態の種類です。CDがいのないテキスト系イベントのプロパティを書いてページ数物件です。
などによりによって違いますので、それぞれ;-)
また、一日の終わりますが、多くのスイッチ諸表のいずれかです。ということか編集したい"商品"を利用した場合でも、相続、おそらくいようにします:
る場合(製品書籍) に応じます。Redicted("~/EditBook.aspx?id"+製品です。id);
なのでエンコードの編集を帳簿に記載されたurlにエンティティクラスが平を言うか力事業entitesについて知サイトの構造など。
他のヒント
Enumsが良い場合:
- の設定値を固定いたことはありません。
- する可能とするツールであること、euの価値(組み合わせ旗).
- 必要な添付その他の状態への各値です。(Javaがないのにこの制限があります。)
れば解決問題数の列挙型がフィット感の良い、よりタイプ。が必要な場合はより柔軟に、そしてenumsる ない 右の答えです。利用の多様な授業では以下の操作が可能です。
静的に全ての種類別行動はかっています。例えば、必要なすべての動物で
Bark()
, 作Animal
クラスのabstractBark()
方法はコンパイラをチェックすると各サブクラスを実装します。をご利用の場合、enum、大きなswitch
, んめんだ取り扱いです。を追加できる新しい場合(各種の動物に例)。ことができる全ソースファイルを横断したパッケージ。とenum、お客さま人数小児-幼児に宣言されたので、冷凍したものです。期限を延長は、主力のOOP.
大切なのはお客様の同僚の例では直接に反対す。だいたいの動物の種類に露出産に役立つとともに、いかなを使用せずに列挙型を使用し、 型オブジェクトのパターン:
public abstract class AnimalType {
public static AnimalType Unknown { get; private set; }
public static AnimalType Cat { get; private set; }
public static AnimalType Dog { get; private set; }
static AnimalType() {
Unknown = new AnimalType("Unknown");
Cat = new AnimalType("Cat");
Dog = new AnimalType("Dog");
}
}
public class Animal {
public AnimalType Type { get; set; }
}
これにより、利便性の列挙型:できない AnimalType.Cat
きの型です。も柔軟性のクラスを追加できる分野 AnimalType
保存データの各種追加の仮想方法等この定義の新規動物の種類だけで新しいインスタンス AnimalType
.
さんご一読いただくよう強くお勧め再考:に 貧血のドメインモデル (当たりのコメント)、猫な 行動する とは違った犬である多型.動物の種類本当にただの属性。それはなかなか出てこないもので何を継承購入頂けたらと思います。
この列挙型のような投者のためのすべての方 Open/Closed Principle is for suckers
ます。
でんをお招きしだ動物の一種とそのカスタムロジックの各タイプです。と描画が可能な恐ろしいコードで思を引き続き構築されます。
最も重要なぁとモデリング実現しました。相続す機会にも猫がいます。動物は知らない場合は、その猫が、今大声で決めることにMeowな位授与者数(修士-主任指導封止が敗れます。以下のコードとしていない場合もしくお願いします。
両方を解決す。しておくとよいでしょうる技術の適用がよい問題です。
の場合プログラム用の数の異なるオブジェな新規追加の授業、そのより良い滞在との列挙は.
だプログラム用に多くの異なるオブジェクト(クラス)の新規追加の授業は、将来のように継承。