有效地访问对象模型中的父元素

Eig*_*ght 3 xml language-agnostic dom design-patterns

我有一个以下对象模型:

- Book 
-- Chapter 1
--- Page 1
---- Image 1 
---- Image 2
---- Text 1
--- Page 2 
...

资源在页面级别下降.但是,从资源的角度来看,我需要知道资源的完整路径.

一种方法是让资源了解他们的父母.

所以我的Image对象可以有一个"parentPage"属性,而该属性又可以有一个"parentChapter"属性.这样,我可以通过currentImage.parentPage.parentChapter访问完整路径.有没有更好的办法?

关于为什么我需要从资源的角度了解完整路径的几句话.我有一个在屏幕上行走和渲染的对象模型.渲染器从章级别一直下降到元素/资源级别(这是渲染发生的位置).但是,要显示资源,我需要知道它们的存在位置(即磁盘上的实际路径),并且通常在章级别指定此信息.

谢谢!

- 编辑 - 只是为了澄清,这个parent.parent方法是最好的吗?它迫使儿童对象了解父母,这让我感到不舒服.耦合?

Zac*_*tes 6

我建议使用树结构,而每个类都继承自树节点.

c#中的示例:

class TreeNode {
 public TreeNode Parent { get; set; }
 public List<TreeNode> Children { get; set; }
}

class Book : TreeNode {
 ... book attributes ...
}

... other classes ...
Run Code Online (Sandbox Code Playgroud)

实际上,如果你担心耦合这个问题,那么问题就是好耦合还是坏耦合?如果耦合实际上增加了价值并且有合理的理由去做,那就去做吧.如果没有,那就浪费了代码.如果您使用支持泛型的语言,则可以将其分离得更远:

class TreeNode<TParent, TChild>  
{
    public TParent Parent { get; set; }
    public List<TChild> Children { get; set; }
}

class Book : TreeNode<object, Chapter> { }
class Chapter : TreeNode<Book, Page> { }
class Page : TreeNode<Chapter, object> { }
Run Code Online (Sandbox Code Playgroud)

希望有所帮助!