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

原文 标签 c# architecture coding-style lazy-loading methodology

我见过很多懒加载的例子-你有什么选择?
给定一个模型类,例如:

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

person类不应该知道它的孩子是如何加载的……还是应该这样?当然,它应该控制何时填充属性,还是不填充属性?
您是否有一个将一个人与其子集合结合在一起的存储库,或者您是否使用不同的方法,例如使用lazyload类—即使这样,我也不希望在我的模型体系结构中出现一个lazyload类的模糊。
如果首先请求一个人,然后请求其子代(即在本例中不是延迟加载),或者以某种方式延迟加载,您将如何处理性能。
所有这些都归结为个人选择吗?

最佳答案

最好的延迟加载是避免它;)线程安全是一个必须立即处理的问题。我不知道我有多少次看到8个CPU内核的生产系统在每一个使用中的延迟加载模式中运行8次延迟加载。至少在服务器启动时,所有服务器核心都倾向于在相同的位置结束。
如果可以的话,让DI框架为您构建它。如果你做不到,我还是更喜欢显式的构造。所以各种各样的aop魔术根本就不跟我切磋,在课外进行显式的构造。不要将它放在person类中,只需创建一个以适当方式构造对象的服务。
引入或多或少透明的“魔术”层来做这些事情似乎是个不错的主意,但我还没有遇到没有未预见和有问题后果的实现。

相关文章:

c# - Form.Size的更改在移动表单时不生效

c# - 比较忽略字符的大小写的正确方法是什么?

ios - iOS VIPER架构,谁必须实例化整个模块?

c# - 执行ValidationRule-C#类设计的执行集-更好的方法

c++ - C++风格-const T&vs T const&

java - 自动向Netbeans中的自动插入的花括号添加注释

c# - 如何将ASP.NET 5(vNext)用户 secret 注入(inject)我自己的实用程序类中?

c# - 如果我的对象从未构造过,为什么要调用Dispose?

php - 动态生成PDF并将其存储在文件系统中?

python - 测试字符串内容的更好逻辑