Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Oop 新颖的面向对象设计方法_Oop_Design Patterns_Data Modeling - Fatal编程技术网

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

Oop 新颖的面向对象设计方法,oop,design-patterns,data-modeling,Oop,Design Patterns,Data Modeling,我正在创建小说或书籍的面向对象表示。我正在寻找设计模式或建议,关于如何制作一个对象,以及如何制作另一个对象的属性 例如,假设我对小说中的人物感兴趣,以及他们出现在哪些章节和页面上 我正在努力解决的概念是如何用两种类型的“容器”组织一个对象系统,这两种容器都参与到与相同实例的关系中。我想这会在其他系统中出现,在这些系统中,对底层数据有一个隐喻性的“物理”和“逻辑”视图 这里有各种可能的对象:小说、章节、页面、人物 这些可能的对象之间存在多种关系: 小说有一系列的章节、一系列的页面和一系列的人物

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

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

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

这里有各种可能的对象:小说、章节、页面、人物

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

  • 小说有一系列的章节、一系列的页面和一系列的人物
  • 章节有一系列的页面和零个或多个字符的集合
  • 页面与一个或多个章节以及零个或多个字符相关联
  • 字符与一个或多个页面和章节相关联
这些目标的目的是回答以下问题:

  • 角色爱丽丝出现在什么页面上
  • 第六章中出现了哪些人物
  • 哪些字符经常出现在同一页上
  • 鲍勃第一次提到的角色是哪一页
我对如何处理这种设计有点不知所措。我看到一些方法:

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

  • 将章节或页面的一个或另一个放在首位,并将另一个作为第一个的属性。例如,我们可以只使用小说、章节和角色对象列表,并将“页面”作为章节对象的属性

  • 我们可以将上述想法更进一步,只需坚持小说和人物,并为每个人物赋予一些属性,例如:“发生在章节中”和“发生在页面上”

    好吧,我希望这足够清楚,让一些OO设计大师建议在对象或属性之间划清界限,以及如何设计一个对象系统,其中有感兴趣的对象(角色)所属的不同类型的容器(章节、页面)


您必须说明软件的用途是回答有关本书的各种问题,包括给定页面上出现的字符

这告诉我们两件事:

  • 您正在寻求对特定对象的物理布局进行建模 一本书的版本(因为从其他方面来看,上面的示例问题 没有意义)
  • 您的设计将受到以下因素的严重影响: 需要回答的问题的范围,因为这将 确定您的系统是否将:

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

    将所有内容(小说、章节、页面、人物)都作为对象,并且 其中一个对象包含对其包含的其他对象的引用列表 /有关“

    除了
    页面
    的实例将引用
    文本
    的实例,而不是
    字符
    ,后者将成为元数据类

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


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

    感谢您的见解,非常有帮助。