C#复合模式和数据库访问

问题描述:

假设我有一个复合类PharmaProduct(它代表制药公司的产品层次结构)和数据库表。我曾想过两种方法将数据加载到一个PharmaProduct对象中。C#复合模式和数据库访问

(1)实例化对象时构造整个对象树。对树进行更改并通过将递归循环应用于树来坚持这些更改(这实际上是C#DataSet工作的方式)。 (2)加载一个节点。加载其他节点只有

PharmaProduct GetParent() 

,或者

List<PharmaProduct> GetChldren() 

被称为(实际上做直接访问数据库)。对节点进行更改。只保存该节点。

这种类型的表格可能有一千个条目,具体取决于制药公司生产的物品类型。所以在那种情况下,我认为第一种方法太笨拙了(而且还会耗费内存)。

如果出现任何复合模式问题,我应该怎么做数据库访问?

看看Proxy模式。使用它,你会把PharmaProductProxy对象放在与PharmaProduct具有相同接口的树中,但是当它们被访问时延迟加载它们自己。

+0

然后,这原来是一个CompositeProxy模式。是这样吗? – anonymous 2009-10-19 12:50:06

+1

请注意,根据数据库访问技术,延迟加载随产品提供。以例如NHibernate - 使你的“GetChildren”虚拟,返回IList ,你应该马上得到一个懒惰的加载代理。 – flq 2009-10-19 13:06:18

+1

@JMSA,模式经常一起工作 - 我从来没有听说过这种情况,但如果有人这样做,我会知道他们的意思。通常你只会说“我使用Composite with Proxy来延迟加载部件” – 2009-10-19 13:33:27