我正在建模一个类图,我完全被这个问题所困扰:
我的新 Web 应用程序有“卡片”(关于主题的条目),用户可以修改,à là wiki。但与 wiki 不同的是,不同的卡片拥有不同的数据。与 wiki 不同的是,卡片与数据库中的其他卡片明确相关。让我向您展示我最初是如何使用一个虚拟示例设计它的:
/** 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 子类不相互关联,原始设计就可以了。
请帮忙!