を考えると、次のエンティティ:このPolymorphic Associationを正しくモデル化するには?
コンテナ
ユーザー
クライアント
機関コンテナエンティティは、プロパティAssignedToPartiesを介して1つまたは複数の関係者に関連付けられてい
。
Container.AssignedToPartiesには、ユーザー、クライアント、および機関が混在することがあります。
この関係の推奨ドメインモデルとは何ですか?
私は、次のオプションを検討していた:
1)タイプごとに別々のプロパティを作成します。
Container.AssignedToUsers
Container.AssignedToClients
Container.AssignedToInstitutions
をこれはかなりいるようですビジネスロジックがタイプをチェックしたり、ダウンキャストを行う必要はありません。
2)その後、党のエンティティのコレクションになるユーザー/クライアント/機関
Container.AssignedToPartiesの共通基本クラス「党」を作成します。パーティーの基本クラスはメソッドやプロパティを持たないので、これは簡単な解決策のようです。私はまた、ここにもう一つの継承層を追加する考えが好きであるかどうかはわかりません。
#3のように、この解決策では、実行時に型をチェックして決定を下し、次にユーザー/クライアント/機関のいずれかにダウンキャストして処理する必要があります。
3)は、ユーザ/クライアント/機関そのマーカーインタフェースIContainerAssignableを作成
これは、少なくともいくつかの型の安全性を提供するだろうが、型チェックとダウンキャストを必要とするを実装します。
今、私は#3に向かっています。それは最もシンプルなようですが、あなたのコードがロジックを実行していて、与えられたタイプとダウンキャストをテストしなければならないロジックを実行していると、おそらくは悪いデザインがあると思います。
アドバイスありがとうございます。
異なるコンテナに存在するのではなく、コンテナを共有したいユーザー、クライアント、機関の共通点は何ですか? – Paul
コンテナにユーザー/クライアント/機関が含まれていません。ファイルなどのアセットのリストを表すドメインオブジェクトです。ユーザー/クライアント/機関は、コンテナに関心を示すためにコンテナに関連付けられています。コンテナを「見ている」と考えることができます。ちょうどFYI、クライアント/ユーザー共通の基本クラスPersonを共有します。機関は実際にはPersonではなく、コンテナへの割り当て可能性を除けば、プロパティ/ビヘイビアに関してClient/Userと何も共有しません。 – bzarah