【问题标题】:Novel / Book Object Oriented Design Approach小说/书籍面向对象的设计方法
【发布时间】:2013-05-31 12:06:10
【问题描述】:

我正在为小说或书籍创建面向对象的表示。我正在寻找有关如何制作对象以及如何制作另一个对象的属性的设计模式或建议。

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

我正在努力解决的概念是如何使用两种类型的“容器”来组织对象系统,这两种“容器”都参与与相同实例的关系。我想这会出现在其他系统中,其中存在底层数据的隐喻“物理”和“逻辑”视图。

这里有多种可能的对象:小说、章节、页面、角色。

这些可能的对象之间有多种关系:

  • 小说有一系列章节、一系列页面和一系列人物
  • 章节有一系列页面,以及零个或多个字符的集合
  • 页面与一个或多个章节以及零个或多个字符相关联
  • 字符与一个或多个页面和章节相关联

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

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

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

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

  • 将章节或页面中的一个或另一个置于首位,并使另一个成为第一个的属性。例如,我们可以只使用 Novel、Chapter 和 Character 对象列表,并将“pages”作为 Chapter 对象的属性。

  • 我们可以更进一步,坚持小说和人物,并给每个人物一些属性,例如:“出现在章节中”和“出现在页面上”

    好吧,我希望这对于一些 OO 设计大师来说已经足够清楚了,可以建议在哪里划清对象或属性之间的界限,以及如何设计一个对象系统,其中有不同类型的容器(章节、页面)兴趣(字符)所属。

【问题讨论】:

    标签: oop design-patterns data-modeling


    【解决方案1】:

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

    这告诉我们两件事:

    1. 您正在寻求为特定的物理布局建模 一本书的版本(否则上面的示例问题将 没有意义)。
    2. 您的设计将受到以下因素的严重影响 需要回答的问题的范围,因为这将 确定您的系统是否会:

      • 使用数据结构预缓存作为答案所需的元数据(例如 显式存储一个角色出现的页面列表),
      • 存储“原始数据”(例如,作为小说树 > 章节 > 页 > 文本),然后对其进行处理以回答给定问题,
      • 两者的某种组合

    我怀疑您的情况可能是正确的组合,因此您的“原始数据”将以与您提到的第一种方法类似的方式表示:

    将所有内容(小说、章节、页面、角色)都变成一个对象,并且每个 这些对象中包含对它们包含的其他对象的引用列表 / 与“有关”

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

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

    无论哪种方式,您都需要规范化您的数据模型,

    【讨论】:

    • 感谢您的洞察,非常有帮助。
    猜你喜欢
    • 2011-04-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多