我有以下对象模型:
- Book -- Chapter 1 --- Page 1 ---- Image 1 ---- Image 2 ---- Text 1 --- Page 2 ...
资源在页面级别下降。但是,从资源的角度来看,我需要知道资源的完整路径。
一种方法是让资源了解他们的父母。
所以我的Image对象可以有一个“parentPage”属性,而该属性又可以有一个“parentChapter”属性。这样,我可以通过currentImage.parentPage.parentChapter访问完整路径。还有更好的方法吗?
关于为什么我需要从资源的角度了解完整路径的几句话。我有一个在屏幕上行走和渲染的对象模型。渲染器从章级别一直下降到元素/资源级别(这是渲染发生的位置)。但是为了显示资源,我需要知道它们的存在位置(即磁盘上的实际路径),这些信息通常在章节级别指定。
谢谢!
- 编辑 - 只是为了澄清,这个parent.parent方法是最好的吗?它迫使儿童对象了解父母,这让我感到不舒服。耦合?
答案 0 :(得分:6)
我建议使用树结构,而每个类都继承自树节点。
c#中的示例:
class TreeNode {
public TreeNode Parent { get; set; }
public List<TreeNode> Children { get; set; }
}
class Book : TreeNode {
... book attributes ...
}
... other classes ...
实际上,如果你担心要把自己联系起来问问自己是好的耦合还是坏耦合?如果耦合实际上增加了价值并且有合理的理由去做,那就去做吧。如果没有,那就浪费了代码。如果您使用支持泛型的语言,则可以将其分离得更远:
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> { }
希望有所帮助!
答案 1 :(得分:2)
你是否使用Zachary的树结构,或者你是以更具特定类型的方式进行的,关于耦合生活的问题。
如果有很多关于图像与页面中“托管”图像无关的图像,您可能希望使用具有上下文相关方面且包含图像实例(参考)。
只有您可以决定是否过多,具体取决于应用程序以及减少耦合的重要性,并允许在其他情况下更多地重用某些成分。
答案 2 :(得分:0)
听起来你想要doubly-linked list或甚至可能考虑使用tree structure。
答案 3 :(得分:0)