0

我有一个现有的 asp.net Web 应用程序,我正在重新设计以使用服务架构。我有一个 WCF 服务的开始,我可以毫无问题地调用和执行功能。就更新数据而言,这一切都是有道理的。例如,我有一个按钮,上面写着提交订单,它将数据发送到服务,该服务进行处理。

这是我的担忧:如果我有一个 ASP.NET 页面显示订单列表(查看订单页面),并且在顶部我有一堆订单类型的下拉列表,以及通过查询填充的其他搜索条件来自数据库的不同表(查找表等)。我希望最终将 Web 应用程序与 DB 完全分离,并使用数据契约在 BLL、SOA 和 Web 应用程序之间传递信息。话虽如此,如何减少加载“查看订单”页面所需的 WCF 调用次数?我需要进行 1 次调用来获取订单列表,并为每个下拉列表调用 1 次,等等,因为这些是由我的 BLL 中的各个函数填充的。

创建一个 Web 服务方法是否是一个好的架构,该方法返回一个专门的数据合约,其中包含您在 1 次中显示“查看订单”页面所需的一切?像这样的伪代码:

公共类 ViewOrderPageDTO
{
  公共 OrderDTO[] 订单 { 获取;放; }
  公共 OrderTypesDTO[] OrderTypes { get; 放; }
  公共 OrderStatusesDTO[] OrderStatuses { get; 放; }
  公共 CustomerListDTO[] CustomerList { 获取;放; }
}

还是在 page_load 事件中对 SOA 进行 5 次或 6 次甚至 15 次单独调用以获取加载页面所需的数据是更好的做法?因此,绕过需要专门的 wcf 方法或合并其他 DTO 的 DTO?

感谢您的意见和建议。

4

2 回答 2

0

我可能会建议一开始保持简单,只需为您需要检索的每种类型的实体进行一次调用。如果您考虑一下,当浏览器加载网页时,它会发出大量 HTTP 请求来获取 html 和所有内容文件,因此在该过程中调用一些服务方法并不可怕。只要服务又快又小,就不应该成为太大的问题。

如果您看到性能问题,我会专注于这些,而不是尝试预先优化任何东西。您可以考虑将多个服务调用集中在一起,或者在服务器端或客户端实现一个缓存层。

于 2010-04-30T22:40:55.470 回答
0

拥有专门用于提供显示特定“业务对象”所需的完整数据集的Web 服务方法/操作绝对是一个很好的设计。

事实上,这种类型的设计正是Web 服务和 SOA的精髓所在。您提供的是智能抽象,而不仅仅是类似 CRUD 的数据访问方法。

这也将比从单个网页进行 5 或 6 次 Web 服务调用要好得多5-6 次调用很多,尤其是当您能够将其减少到仅 1 次时。Web 服务调用往往很昂贵,至少与基本数据访问或缓存查找相比,您真的想减少“喋喋不休”如果可能的话。

你的第一直觉是正确的。使用粗粒度的 Web 服务,为您提供所需的一切。

于 2010-04-30T22:51:55.390 回答