この質問は、LOB アプリケーションを構築していたときに出てきました。質問はあなたの経験からです.Contact関係を継承または委任としてモデル化する方が良いですか?
例:
Contact: Firstname、Lastname、Fullname、Address、Email など
があります。Customer には、その他の顧客固有のものがあります。
ディーラーには、これらすべてに加えて、他のディーラー固有のものがあります。
A ..... has .... and .... etc
では、Customer と Dealer にとって、Contact から派生するのと、Contact 参照を持つのとではどちらがよいでしょうか?
注:これは議論の質問かもしれませんが、経験豊富な開発者がこれをどのように回避しているか知りたいです。
3 に答える
この種の構造 (およびその他の構造) をモデル化する方法について詳しく説明している、Analysis Patterns という本があります。この本では、継承を使用して基本型をモデル化し、後でより具体的なクラスParty
にサブクラス化できます。ここでいくつかの情報を見つけることができます(pdf)。Person
Organization
この場合、 is-a関係を明確にモデル化しているため、継承は良い解決策だと思います。コードの再利用だけのために継承を誤用しないように注意する必要があります。
特にプロジェクトの最初の段階では、継承よりも構成を優先する必要があります。おそらく将来的には、それがあなたに大きな利点をもたらすなら、パーティーパターンに来るでしょう.
(また、この本には、 Party (5) を使用する明白なケースは、モデルに人や組織があり、共通の動作が見られる場合であると記載されていることに注意してください。ここでは動作が優先されます。データをモデル化したらすぐに、構成を優先してください)。
この 2 つの言葉の認められた解釈によると、単に顧客は一種の連絡先ではありません。
継承を使用してファイルと人物をモデル化することはありません。単純に、両方に名前があるという事実を共有しているからです。ただし、いくつかの(奇妙な)ドメインでは、両方が共通の「NamedThing」インターフェースから継承することは理にかなっています。
要約すると、私はほとんどの場合「has a」に行きますが、常にではありません。