Web服务数据类型(合同)

时间:2010-03-12 16:22:33

标签: wcf web-services soa datacontract

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

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

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

我的意思的一个例子:数据模型说GetInd和ProviderName属性,在Get操作中,需要返回ProviderId和ProviderName。但是,在Set操作中,只需要ProviderId,并且服务会忽略ProviderName,因为系统已经具有该信息。在这种情况下,如果Get和Set操作使用相同的数据模型,则即使对于Set操作也会公开ProviderName,这会使消费开发人员感到困惑吗?

2 个答案:

答案 0 :(得分:1)

它会说:它取决于: - )

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

所以你得到了200多个属性的对象。你是如何工作的,你通常会改变多少?

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

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

如果您更新四个属性怎么办?你将经历其中的4个周期。或者:您可以扩展SetProperty方法以包含(属性名称,值)对的字典。

所以我想这取决于你在任何特定时间改变了200个属性中的多少个?如果你改变了10%,那些属性的20% - 那么传回整个修改过的对象会不会更容易?

答案 1 :(得分:0)

这看起来很适合将您的临床对象用作规范模型并提供宁静的样式服务界面。然后,您可以根据使用模型仅提供所需的字段,从而提供数据对象的不同视图或表示。你的动词(get,set)将成为http标准Get,Put。

您可以使用许多开源Rest框架来简化入门。 Restlet是我成功使用的。