我正在创建小说或书籍的面向对象表示。我正在寻找有关如何制作对象以及如何制作另一个对象的属性的设计模式或建议。
例如,假设我对小说中的人物以及他们出现在哪些章节和页面上感兴趣。
我正在努力解决的概念是如何使用两种类型的“容器”来组织一个对象系统,这两种“容器”都参与了与相同实例的关系。我想这会出现在其他系统中,其中存在底层数据的隐喻“物理”和“逻辑”视图。
这里有多种可能的对象:小说、章节、页面、角色。
这些可能的对象之间有多种关系:
- 小说有一系列章节、一系列页面和一系列人物
- 章节有一系列页面,以及零个或多个字符的集合
- 页面与一个或多个章节以及零个或多个字符相关联
- 字符与一个或多个页面和章节相关联
这些对象的目的是回答以下问题:
- 角色爱丽丝出现在哪些页面上?
- 第六章出现了哪些角色?
- 哪些字符经常出现在同一页面上?
- 第一次提到角色 Bob 是在哪个页面上?
我对如何处理这种设计有点迷茫。我看到了一些方法:
将所有内容(小说、章节、页面、角色)都设为对象,并且这些对象中的每一个都有对它们包含/相关的其他对象的引用列表
将章节或页面中的一个或另一个放在首位,并使另一个成为第一个的属性。例如,我们可以只使用 Novel、Chapter 和 Character 对象列表,并使“pages”成为 Chapter 对象的属性。
我们可以更进一步,坚持小说和人物,给每个人物一些属性,例如:“出现在章节中”和“出现在页面上”
好吧,我希望这对于一些 OO 设计大师来说已经足够清楚了,可以建议在哪里划清对象或属性之间的界线,以及如何设计一个对象系统,其中有不同类型的容器(章节、页面)和感兴趣的对象(字符) 属于。