感知Web服务中数据转换的低效率

时间:2010-03-09 18:46:08

标签: wcf web-services datacontract

我已经写了大约一年的Web服务了,似乎我用来从数据库中获取数据的过程一直显示给用户,然后又回来了,效率低下。

这个问题的目的是确保我遵循最佳做法,而不仅仅是增加额外的工作。

以下是数据库,最终用户和返回数据的路径。

  1. 服务从数据库获取数据访问层(DAL)对象。
  2. 服务将其转换为DataContract以发送给客户端。
  3. 客户端获取DataContract并将其转换为客户端对象
  4. 客户端显示对象/用户进行更改/添加对象
  5. 客户端将客户端对象转换为DataContact并将其发送到服务
  6. Service重新获取DataContract并将其转换为数据访问层对象。
  7. 服务使用更改/新对象更新数据库。
  8. 如果您正在跟踪对象被转换4次(DAL-> Contract-> Client Object-> Contract-> DAL)。当您的应用开始扩展其数据时,这似乎是很多转换。

    这是“最佳”方式吗?我错过了什么吗?

    如果重要,我使用的是Visual Studio 2008,WCF,LinqToSQL和Windows Mobile 5.0(NETCF)。

1 个答案:

答案 0 :(得分:1)

如果您减少转化次数(也就是说,如果将各个图层更紧密地结合在一起),您可能会错过会发生什么的问题。

该服务可以直接返回DAL对象。问题是DAL对象可能包含的数据是关于它们是DAL对象的事实,而不是它们携带的数据。例如,LINQ to SQL类派生自包含LINQ to SQL功能的基类 - 客户端不需要此基类数据,也不应发送。

客户端可以直接使用从服务器发回的DAL对象。但这需要客户端和服务器使用相同的平台 - 例如.NET。他们还必须使用.NET的兼容版本,以便客户端可以使用服务器端DAL对象。

客户端现在可以显示它喜欢的DAL对象,假设它不需要像INotifyPropertyChanged这样的客户端接口,服务器不需要运行这样的代码,但客户端可能需要它来进行数据绑定和验证

请注意,每个图层都有自己的要求。通过保持这些要求的独立性,代码更易于设计和维护。是的,你必须对数据进行一些复制,但与维护必须同时执行四种不同操作的代码的成本相比,这是便宜的。