延迟初始化、ORM 和 lambda
Posted
技术标签:
【中文标题】延迟初始化、ORM 和 lambda【英文标题】:Lazy initialization, ORMs, and lambdas 【发布时间】:2011-07-07 08:08:06 【问题描述】:我正在寻找一种轻量级代理,以便我们可以在一次点击中延迟实例化一个或多个对象。
基本原理:也许请求被分批并发送到服务器。即,如果单独完成,则会导致 n * 延迟。此外,如果这些批处理请求可以由一个 lambda 或 SQL 语句提供服务,则有可能额外节省时间。
场景: 假设我们有一个数据库、一个 POCO 模型、一种公开该模型的方式(代码生成/序列化)和一个 Silverlight 客户端。想法是,如果我们可以根据 POCO 模型来描述更新,而不是通过 CRUD 风格的服务来推动这些更新,那不是很好吗?就像发送一个对象图一样。
WCF 是否涵盖了这类事情?唯一的事情是,我宁愿不使用 WCF。此外,像 nhibernate 这样的东西在 ASP 场景中似乎是最好的。
我的第一个想法是做这样的事情,但到目前为止这并没有让我走得太远。
private Lazy<Person> _person = new Lazy<Person>(() => new Person());
public Person person
get return _person.Value;
【问题讨论】:
这与代理无关...只是懒惰初始化。 还有过于复杂的惰性初始化。 if (_person.value == null) _person = new person(); 有什么问题? 返回 _person; 哎呀。这么多反对票。这不是解释全貌的好动机。 问题改写了。试图提出一个分布式场景的方案。我想在客户端上有一个 ORM 的表示。 这仍然不是一个真正的问题。您是否需要向某些现有代码添加问题或优化?如果是这样,请更清楚地介绍问题并提出直接问题而不是理由说也许...... 【参考方案1】:也许您应该在客户端上创建一个“问题”列表,并在加载单个项目后执行整个“问题”列表的延迟初始化。在此之后,您可以简单地启动一个新列表并在需要时加载它。
您甚至可以添加一个小线程来清空后台线程上的“问题”列表,以确保您有效地使用网络(基于优先级或其他因素)。
【讨论】:
我在想那个方向......某种两阶段初始化。虽然还没有想出一个按合同的方式来做这件事(即客户端合同必须与服务器端的合同相匹配)。 我的所有想法都是要编写大量代码,并且将是完全自定义的解决方案。也许有人知道这样做的普遍接受的方式。 完全正确。以纯粹的以模式为中心的方式解决这个问题会很棒。我不介意是否涉及代码生成……只要有模式即可。以上是关于延迟初始化、ORM 和 lambda的主要内容,如果未能解决你的问题,请参考以下文章
延迟初始化中的 双重检查模式 和 延迟占位类模式 你都用对了吗?