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类中,只需创建一个以正确方式构造对象的服务.
引入"魔术"层或多或少透明地做这些事情似乎是一个好主意,但我还没有遇到没有不可预见和有问题的后果的实现.