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 类不应该知道它的子类是如何加载的......或者应该知道吗?它当然应该控制何时填充属性?

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

如果首先请求一个 Person 然后请求它的 Children(即在这种情况下不是延迟加载)或以某种方式延迟加载,您将如何处理性能。

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

最佳答案

最好的延迟加载就是避免它 ;) 线程安全是您必须立即处理的一个问题。我已经记不清有多少次看到具有 8 个 cpu 内核的生产系统针对正在使用的每个延迟加载模式运行 8 次延迟加载。至少在服务器启动时,所有服务器核心都倾向于在相同的地方结束。

如果可以的话,让 DI 框架为您构建它。如果不能,我仍然更喜欢显式构造。因此,各种 AOP 魔术根本就不要跟我砍,去类外进行显式构造。不要将它放在 person 类中,只需提供以适当方式构造对象的服务即可。

引入或多或少透明地做这些事情的“魔法”层似乎是个好主意,但我还没有遇到不会产生不可预见和有问题的后果的实现。

关于c# - 延迟加载 - 什么是最好的方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/524075/

相关文章:

java - 清理命令行提示符的打印 (Java)

c# - 在 C# 中通过 POST 发送 JSON 并接收返回的 JSON?

mysql - MySql 数据库复制的不同架构

mysql - 构造具有两个清晰部分的应用程序的方法

architecture - 将用户数据存储在身份验证服务器或资源服务器中?或两者?

c# - 抑制 TryParse 调用的静态代码分析警告 CA1806

java - 为清楚起见命名集合扩展

c# - 使用 await 时 SynchronizationContext 不流动

c# - 如何在没有浏览器重定向的情况下获取 Instagram api 访问 token ?

c# - 单声道错误格式异常但不是在 Windows 上