【问题标题】:web service data type (contract)Web 服务数据类型(合同)
【发布时间】:2010-03-12 16:22:33
【问题描述】:

我有一个一般性的设计问题。

我们有一个相当大的数据模型来表示一个临床对象,该对象本身在层次结构中有 200 多个子属性。

我们有一个 SetObject 操作和一个 GetObject 操作。我的问题是,在最佳实践方面,在两个操作中使用单个数据模型或为每个操作使用不同的数据模型是否有意义?因为 Get 操作将返回比 Set 所需的更多的详细信息。

我的意思的一个例子:数据模型有说 ProviderId 和 ProviderName 属性,在 Get 操作中,ProviderId 和 ProviderName 都需要返回。但是,在 Set 操作中,只需要 ProviderId,并且 ProviderName 被服务忽略,因为系统已经有了该信息。在这种情况下,如果 Get 和 Set 操作使用相同的数据模型,即使 Set 操作也会暴露 ProviderName,这是否会混淆消费开发者?

【问题讨论】:

    标签: wcf web-services soa datacontract


    【解决方案1】:

    它会说:这取决于:-)

    不认真。您如何编辑/处理对象?我假设您的软件正在调用 WCF 服务来检索对象,使用 ID 或搜索词或其他内容。

    所以你得到了具有 200 多个属性的对象。你是如何处理它的,你通常会改变多少?

    如果您通常只更改少数属性 - 那么可能在服务上使用通用的SetProperty 方法来获取对象 ID、属性名称和新值,这可能是有意义的。但是想想这是如何工作的:

    • 服务器端代码将获取对象的 ID
    • 它将从数据库中加载对象
    • 然后它将单个属性设置为新值
    • 它将对象保存回数据库

    如果更新四个属性会怎样?您将经历其中的 4 个周期。或者:您可以扩展 SetProperty 方法以包含 (property name, value) 对的字典。

    所以我想这取决于您在任何给定时间更改了这 200 个属性中的多少?如果您更改 10%、20% 的这些属性 - 将整个修改后的对象传回会不会更容易?

    【讨论】:

      【解决方案2】:

      这看起来很适合将您的临床对象用作规范模型并提供宁静风格的服务接口。然后,您可以提供不同的视图或数据对象的表示,仅包含基于使用模型所需的字段。您的动词(get、set)将成为 http 标准 Get、Put。

      您可以使用许多开源的 Rest 框架来使这更容易上手。 Restlet 是我用过的一个成功的。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2023-03-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-03-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多