面向对象的新颖/面向对象设计方法

时间:2013-05-31 00:25:54

标签: oop design-patterns data-modeling

我正在创建一个面向对象的小说或书籍的表现形式。我正在寻找关于制作对象的内容以及制作另一个对象的属性的设计模式或建议。

例如,假设我对小说中的人物以及他们出现的章节和页面感兴趣。

我正在努力的概念是如何组织一个具有两种类型“容器”的对象系统,这两种“容器”都参与与相同实例的关系。我想这会出现在其他系统中,其中存在隐含的“物理”和基础数据的“逻辑”视图。

这里有各种各样的对象:小说,章节,页面,字符。

这些可能的对象之间存在各种关系:

  • 小说有一系列章节,一系列页面和一组角色
  • 章节包含一系列Pages,以及零个或多个字符的集合
  • 页面与一个或多个章节相关联,零个或多个字符
  • 字符与一个或多个页面和章节相关联

这些目标的目的是回答以下问题:

  • 角色Alice出现在哪些页面上?
  • 第6章中出现了哪些字符?
  • 哪些字符经常出现在同一页面上?
  • Bob第一次提到的人物是什么页面?

我对如何处理这种设计感到有点迷茫。我看到了一些方法:

  • 将所有内容(小说,章节,页面,字符)设为对象,并且每个对象都包含对其包含/相关的其他对象的引用列表

  • 优先考虑章节或页面中的一个或另一个,并使另一个属性成为第一个属性。例如,我们可以只使用Novel,Chapter和Character对象列表,并使“pages”成为Chapter对象的属性。

  • 我们可以进一步采用上述想法,只需坚持使用Novel和Character,并为每个Character赋予一些属性,例如:“在章节中发生”和“在页面上发生”

    嗯,我希望这对于一些OO设计大师来说足够明确,可以建议在Object或Attribute之间绘制线条的方法,以及如何设计一个对象系统,其中有不同种类的容器(Chapter,Page)。兴趣(Character)属于。

1 个答案:

答案 0 :(得分:0)

重要的是,您已声明软件的目的是回答有关该书的各种问题,包括在给定页面上出现的字符。

这告诉我们两件事:

  1. 您正在寻求模拟特定物理布局 一本书的版本(因为上面的例子问题是其他明智的 毫无意义)。
  2. 您的设计将受到很大影响 需要回答的问题的范围,如此 确定您的系统是否会:

    • 使用数据结构预先缓存将作为答案所需的元数据(例如 显式存储字符出现的页面列表,
    • 存储“原始数据”(例如,作为小说的树>章节>页面>文本),然后处理它以回答给定的问题,
    • 两者的某种组合
  3. 我怀疑在您的情况下组合可能是正确的,因此您的“原始数据”将以与您提到的第一种方法类似的方式表示:

      

    使一切(小说,章节,页面,角色)成为一个对象,每一个   这些对象中包含对其包含的其他对象的引用列表   /与“

    相关

    除了Page的实例引用Text的实例,而不是Character,而后者将成为元数据类。

    可以预先缓存元数据,也可以通过拖网原始数据按需生成元数据。

    无论哪种方式,您都希望规范化数据模型,