延迟加载 - 最好的方法是什么?

Tim*_*eel 14 c# architecture methodology coding-style lazy-loading

我看过很多懒加载的例子 - 你有什么选择?

给定一个模型类,例如:

public class Person
{
    private IList<Child> _children;
    public IList<Child> Children
    {
        get {
            if (_children == null)
                LoadChildren();
            return _children;
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

Person类不应该知道它是如何被装载的......或者它应该是什么?当然它应该控制何时填充属性?

您是否有一个将Person与其子集合耦合在一起的存储库,或者您是否会使用不同的方法,例如使用lazyload类 - 即便如此,我也不希望在我的模型体系结构中使用lazyload类模糊.

如果首先请求一个Person然后它的子节点(即在这个例子中不是延迟加载)或者以某种方式延迟加载,你将如何处理性能.

这一切都归结为个人选择吗?

kro*_*old 14

最好的延迟加载是避免它;)线程安全是你必须处理的直接问题.我不知道我经常看到有8个CPU内核的生产系统为每个使用的延迟加载模式运行延迟加载8次.至少在服务器启动时,所有服务器核心都倾向于在相同的位置结束.

如果可以的话,让DI框架为您构建它.如果你不能,我仍然喜欢明确的建设.因此,各种各样的AOP魔法根本就不会与我一起切割,在课堂外进行明确的构建.不要把它放在person类中,只需创建一个以正确方式构造对象的服务.

引入"魔术"层或多或少透明地做这些事情似乎是一个好主意,但我还没有遇到没有不可预见和有问题的后果的实现.

  • @Le Dorfier - 同意业绩问题.但是当一个对象可能有太多的子关系以保证一次加载所有内容时,会出现一个转折点.你在这些情况下做了什么? (4认同)
  • 我还想知道在"太多的儿童关系"情况下该怎么做 (2认同)