【发布时间】:2009-04-11 16:36:33
【问题描述】:
我正在建模一个类图,但我完全被这个问题所困扰:
我的新 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 子类不相互关联,原始设计就可以了。
请帮忙!
【问题讨论】:
标签: class web-applications versioning modeling class-diagram