2009-08-24 53 views
0

注意:WinForms C#早期学习级别!设计:访问儿童收藏,同时避免父母!

我想在C#对象环境中实现某种情况的最佳方式提供一些帮助。我不能发布代码,因为它还不存在,但我可以给你一个替代的现实生活中的比较。

简而言之(因为那就是我的工作方式)我有一本Book类。我有这些Book类的集合(<List>)。 在每个Book类中,我有一个Chapter类的集合(<List>)。书中的Class和Chapter类是基于完全不同的抽象类。它们在单独的业务层中定义,数据从数据源层加载。请记住,有许多书籍和许多章节。

从我的GUI层我可以检索一本书,它是基于集合索引/键的基础属性。我也可以通过Book类获得书中的所有章节。

我需要做的是能够从任何书籍中获取任何章节类,而无需通过Book类。 实现此目的的最佳方式是什么?

Thanks guys and gals

回答

2

你是什么意思的“get”。你期望在内存中拥有所有的章节吗?或者我们在搜索数据库?

什么信息标识一章?我们假设所有的章节(或者如果不是章节的完整文本,然后是章节描述符)都在内存中。你有章节集合由ChapterIdentity(可能是BookId + ChapterNumber)键入。

所以,那么它只是

ChapterCollection.getById(aChapterId); 

当您添加一本书,你需要将它的所有章节添加到收藏。

更可能这是来自数据库。所以你希望能够通过id检索章节。这一切都取决于你如何做持久性,但从概念上看,就像从检索者的角度看内存中的例子。

+0

'get'将意味着搜索并从内存中检索对章节的引用,然后可以使用该引用来查询数据库的所有详细信息。 一章将会有一个唯一的id以及它的标题。 您是否建议我保留书籍和章节的单独集合,然后将它们链接起来,而不是在书中拥有章节的层次关系? – 2009-08-24 23:48:36

+0

您可以同时拥有层次关系和“所有章节”集合。在对象模型中有多条访问路径是非常合理的。然而,我不确定它是否合理地将整套章节保存在内存中 - 对于我猜想的国会图书馆员来说不起作用?因此,提供getById()的服务api可能会隐藏或者不存在整个内存。必要时进行数据库检索。 – djna 2009-08-25 06:18:12

1

为什么你不想去看书课?真的,你只有两种选择 - 搜索书类对象列表或维护一个包含所有书籍所有章节的二级集合对象。 我假设会有一个你将要搜索的关键字,那就是章节类的一个属性?如果是这样,你可以使用快速搜索的字典(关键字,章节),或者保留一个List(of Chapter),并使用LINQ来搜索它。 这取决于你在寻找什么,以及你避免读书课的理由。

+0

第二个收集选项是我能想出的唯一的东西,它似乎有一个更好的方式来做到这一点。 – 2009-08-24 23:51:17

0

如果你没有读书类,你需要一个“库”集合,其中包含对所有章节对象的引用。