我有一个 Order 对象,Order 对象包含一个 Person 对象,该对象存储有关下订单的人的信息。当我填充 Order 对象时,我是否也应该填充 Person 对象?或者,当我需要访问下订单的人时,我会更好地调用 order.GetPerson()。
3 回答
你可以考虑这种LazyLoading
方法。以便在需要时(第一次查询)获取并加载 Person 数据
延迟加载是计算机编程中常用的一种设计模式,用于将对象的初始化推迟到需要它的时候
如果资源是一个问题,那么 Shyju 的回答是有道理的。否则,如果您总是知道与订单相关联的人,那么,是的,填充它。此外,尽可能多地使对象不可变是个好主意,在这种情况下您可能可以;即通过构造函数将人传入并且永远不要更改它。
正如 Chris Sinclair 的评论所表明的,这确实取决于您的设计并考虑您需要 Person 对象的频率。如果几乎每次加载订单时,您都需要关联的人员(用于显示或计算等),那么始终加载人员以限制数据库调用的数量是有意义的。如果您几乎不需要 Person 数据,那么以后期绑定/延迟加载的方式获取 Person 数据更有意义。
考虑这个例子。您检索所有订单以在网格中显示它们。但是当您填充网格时,您还希望显示每个订单的人员信息。如果您为每个订单加载人员数据,您只需循环订单,就不会再调用数据库了。如果您使用延迟加载 Person 数据,那么当您循环订单时,您必须对每个 Order 进行额外的数据库调用以获取 Person 数据。这是很多电话。
如果合适,您还可以拆分差异并设计可以传递“LoadChildren”标志的加载方法。这样做可以为您提供最大的灵活性,但会牺牲可维护性/可读性,因为根据您在代码中的位置,您不一定知道是否填充了 Person 数据。