C#复合模式和数据库访问
问题描述:
假设我有一个复合类PharmaProduct
(它代表制药公司的产品层次结构)和数据库表。我曾想过两种方法将数据加载到一个PharmaProduct
对象中。C#复合模式和数据库访问
(1)实例化对象时构造整个对象树。对树进行更改并通过将递归循环应用于树来坚持这些更改(这实际上是C#DataSet
工作的方式)。 (2)加载一个节点。加载其他节点只有
PharmaProduct GetParent()
,或者
List<PharmaProduct> GetChldren()
被称为(实际上做直接访问数据库)。对节点进行更改。只保存该节点。
这种类型的表格可能有一千个条目,具体取决于制药公司生产的物品类型。所以在那种情况下,我认为第一种方法太笨拙了(而且还会耗费内存)。
如果出现任何复合模式问题,我应该怎么做数据库访问?
答
看看Proxy
模式。使用它,你会把PharmaProductProxy
对象放在与PharmaProduct
具有相同接口的树中,但是当它们被访问时延迟加载它们自己。
然后,这原来是一个CompositeProxy模式。是这样吗? – anonymous 2009-10-19 12:50:06
请注意,根据数据库访问技术,延迟加载随产品提供。以例如NHibernate - 使你的“GetChildren”虚拟,返回IList,你应该马上得到一个懒惰的加载代理。 –
flq
2009-10-19 13:06:18
@JMSA,模式经常一起工作 - 我从来没有听说过这种情况,但如果有人这样做,我会知道他们的意思。通常你只会说“我使用Composite with Proxy来延迟加载部件” – 2009-10-19 13:33:27