我希望将我的域模型推入 WCF 服务 API,并希望通过这种类型的设置了解延迟加载技术。
采用这种方法时有什么建议吗?
当我实现这项技术并进入我的应用程序时,就在服务器返回我的列表之前,它会获取每个应该延迟加载的属性......因此急切加载。您能否解释一下这个问题或提出解决方案?
编辑:看来您可以使用 XMLIgnore 属性,因此在序列化过程中不会对其进行查看..尽管仍在阅读
我希望将我的域模型推入 WCF 服务 API,并希望通过这种类型的设置了解延迟加载技术。
采用这种方法时有什么建议吗?
当我实现这项技术并进入我的应用程序时,就在服务器返回我的列表之前,它会获取每个应该延迟加载的属性......因此急切加载。您能否解释一下这个问题或提出解决方案?
编辑:看来您可以使用 XMLIgnore 属性,因此在序列化过程中不会对其进行查看..尽管仍在阅读
不要在服务接口上进行延迟加载。定义显式 DTO 并将其用作 WCF 中的数据协定。
您可以使用 NHibernate(或其他 ORM)正确获取构建 DTO 所需的对象。
对于任何远程架构,您都希望避免以不受控制的方式“在线”加载完整的对象图(除非您的对象数量很少)。
Wikipedia 文章对标准技术进行了非常概括的总结(在 C# 中也是如此!)。我用过幽灵和价值持有者,它们工作得很好。
要实现这种技术,请确保严格分离关注点。在服务器上,您的服务契约实现类应该是与数据契约一起工作的唯一代码位。在客户端,服务访问层应该是唯一与代理一起工作的代码。
像这样的分层允许您调整服务的实现方式,相对独立于调用服务的 UI 层和被调用的业务层。它还为您提供了一半的单元测试机会!
您可以尝试使用基于 REST 的东西(例如ADO.NET Data Services)并将其透明地包装到您的客户端代码中。