【问题标题】:Lazy Loading with a WCF Service Domain Model?使用 WCF 服务域模型进行延迟加载?
【发布时间】:2008-08-30 01:46:19
【问题描述】:

我希望将我的域模型推送到 WCF 服务 API 中,并希望通过这种类型的设置了解延迟加载技术。

在采用这种方法时有什么建议吗?


当我实现这项技术并进入我的应用程序时,就在服务器返回我的列表之前,它会获取每个应该延迟加载的属性......因此急切加载。您能否解释一下这个问题或提出解决方案?

编辑:appears 你可以使用 XMLIgnore 属性,这样它就不会在序列化过程中被查看.. 虽然仍在阅读这个

【问题讨论】:

    标签: wcf web-services domain-driven-design


    【解决方案1】:

    不要对服务接口进行延迟加载。定义显式 DTO 并将其用作 WCF 中的数据协定。

    您可以使用 NHibernate(或其他 ORM)正确获取构建 DTO 所需的对象。

    【讨论】:

    • 我只停留在 ado.net 的世界里......你有没有机会提供你提到的这种方法的示例?
    • 基本上你需要创建一个 ProxyCollection,它继承自 IList 或 ICollection,这需要能够跟踪加载项目的命令。在访问任何成员时,首先执行命令以填充列表。
    【解决方案2】:

    对于任何远程架构,您都希望避免以不受控制的方式“通过网络”加载完整的对象图(除非您的对象数量非常少)。

    Wikipedia article 的标准技术非常概括(在 C# 中也是如此!)。我已经使用了幽灵和价值持有者,它们工作得很好。

    要实现这种技术,请确保严格分离关注点。在服务器上,您的服务契约实现类应该是与数据契约一起工作的唯一代码位。在客户端,服务访问层应该是唯一与代理一起工作的代码。

    这样的分层可以让您调整服务的实现方式,相对独立于调用服务的 UI 层和被调用的业务层。它还为您提供了一半的单元测试机会!

    【讨论】:

      【解决方案3】:

      您可以尝试使用基于 REST 的东西(例如 ADO.NET Data Services)并将其透明地包装到您的客户端代码中。

      【讨论】:

        猜你喜欢
        • 2018-06-19
        • 2014-01-15
        • 2012-03-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-08-30
        相关资源
        最近更新 更多