2010-03-12 95 views
1

我有一个通用的设计问题。网络服务数据类型(合同)

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

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

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

回答

1

它会说:这取决于:-)

没有认真对待。你如何编辑/处理对象?我假设你的软件正在调用WCF服务来检索一个对象,使用一个ID或一个搜索词或其他东西。

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

如果您通常只更改一些属性 - 那么可能在服务上使用对象ID,属性名称和新值的通用SetProperty方法可能有意义。不过想想这是怎么回事工作:

  • 服务器端代码将得到ID为对象
  • 它会从数据库
  • 它就会设置一个单独的属性添加到加载对象新价值
  • 将回到保存对象到数据库

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

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

0

这看起来像是将临床对象用作规范模型和提供宁静风格服务接口的良好选择。然后,您可以仅使用基于使用模型的字段提供不同的视图或数据对象表示。你的动词(get,set)将成为http标准Get,Put。

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