复杂对象设计:以便不必检索整个对象图

时间:2011-01-24 04:58:28

标签: c# .net visual-studio design-patterns oop

不确定这个问题的最佳标题是什么,或者即使我很清楚,但这里是:

设置复杂对象的最佳方法是什么,以便在首次访问父对象时不必检索整个对象图?

例如: 为了

  • 有客户

  • 订单行(很多)

    • 产品

    • 定价详情(折扣等)

    • 订单状态

  • 状态

  • 履行日期

您是否将所有依赖对象创建为属性,还是为依赖对象提供访问器方法?

示例:

选项1:

班级订单

  • 公共财产客户

  • 公共财产订单行清单

选项2:

班级订单

- public GetCustomer():Customer

- public GetOrderLines():List of order lines

我看待它的方式各有其优点和缺点:

选项1:类图显示了不同对象之间的关系。缺点是当你获得Order对象时,你需要获得整个对象图(这可能会变得昂贵,在许多情况下可能是不必要的)。

选项2:因为通过Get调用检索每个对象,所以可以将实际检索推迟到需要对象时。缺点,至少在Visual Studio类图中,您不能再在不同对象之间获得良好的关系。

是否有其他设计模式可以实现我更有效的尝试?

2 个答案:

答案 0 :(得分:4)

您会考虑使用ORM,例如Entity Framework或NHibernate吗?这样,您将获得延迟加载支持,而无需自己实施它时遇到很多麻烦。

答案 1 :(得分:2)

Property vs getter方法和延迟加载与完整对象图的选择是正交的,你几乎可以有它们的任意组合。

我可能会选择一个属性,因为它更适合C#。至于延迟对象检索,它取决于你的上下文 - 就像anon所写,当从数据库数据中绘制延迟加载时可以理解。