私はクラス図をモデル化していますが、この問題に完全に悩まされています。
私の新しいWebアプリケーションには、ユーザーが変更できる「カード」(主題に関するエントリ)があります。しかし、ウィキとは異なり、カードが異なればデータも異なります。また、ウィキとは異なり、カードはデータベース内で明示的に他のカードと相互に関連しています。ダミーの例を使用して、最初にどのように設計したかを示します。
/** Similar to strategy/bridge pattern */
class Card<T extends CardInfoVersion> is composed of T // container of versions
class CardInfoVersion // one version
class Painting extends CardInfoVersion
class Museum extends CardInfoVersion is composed of Paintings
エレガントで清潔ですが、間違っています。このアプローチを使用すると、美術館は絵画自体ではなく、絵画バージョンに関連付けられます。私の頭から離れた最初の解決策はこれでした:
class Card<T extends CardInfoVersion> is composed of T
class CardInfoVersion
class Painting extends CardInfoVersion
class Museum extends CardInfoVersion is composed of Card<Painting>
このアプローチはにおいがします。CardInfoVersionの下のクラス階層は巨大であるため、UMLモデルは読み取り不能になり、CardクラスはCardInfoVersionサブクラスへのORM参照で埋められます。それから私はこれを思いついた:
class Card is composed of proposedModifications: Set<Card>
class Painting extends Card
class Museum extends Card is composed of Paintings
これもにおいがします。実際、バージョンが消えてから、これはすべて台無しになっています。また、管理者はカードに提案された変更を検証する必要があります。
私はこの問題を解決する方法を本当に知りません。注意:CardInfoVersionサブクラスが相互に関連していなければ、元の設計で問題ありません。
助けてください!