不确定这个问题的最佳标题是什么,或者即使我很清楚,但这里是:
设置复杂对象的最佳方法是什么,以便在首次访问父对象时不必检索整个对象图?
例如: 为了
有客户
订单行(很多)
产品
定价详情(折扣等)
订单状态
状态
履行日期
您是否将所有依赖对象创建为属性,还是为依赖对象提供访问器方法?
示例:
选项1:
班级订单
公共财产客户
公共财产订单行清单
选项2:
班级订单
- public GetCustomer():Customer
- public GetOrderLines():List of order lines
我看待它的方式各有其优点和缺点:
选项1:类图显示了不同对象之间的关系。缺点是当你获得Order对象时,你需要获得整个对象图(这可能会变得昂贵,在许多情况下可能是不必要的)。
选项2:因为通过Get调用检索每个对象,所以可以将实际检索推迟到需要对象时。缺点,至少在Visual Studio类图中,您不能再在不同对象之间获得良好的关系。
是否有其他设计模式可以实现我更有效的尝试?
答案 0 :(得分:4)
您会考虑使用ORM,例如Entity Framework或NHibernate吗?这样,您将获得延迟加载支持,而无需自己实施它时遇到很多麻烦。
答案 1 :(得分:2)
Property vs getter方法和延迟加载与完整对象图的选择是正交的,你几乎可以有它们的任意组合。
我可能会选择一个属性,因为它更适合C#。至于延迟对象检索,它取决于你的上下文 - 就像anon所写,当从数据库数据中绘制延迟加载时可以理解。