AJAX webservices - web或biz层的扩展?

时间:2008-09-23 01:18:03

标签: asp.net javascript ajax web-services

我的问题可能是一个微妙的问题:

Web服务 - 它们是演示文稿/ Web层的扩展吗? ..或者它们是商业/数据层的扩展吗?

这似乎是一个愚蠢的问题。 Web 服务是 web 层的扩展。我不太确定。我正在构建一个具有一些AJAX-y功能的非常标准的webform,在我看来,我可以通过以下两种方式之一构建Web服务:

  1. 他们可以为我检索数据(商业/数据层扩展) 例如:GetUserData(userEmail)
    其中web表单上有javascript知道如何使用用户数据并对标记进行更改
  2. 他们可以返回完全呈现的用户控件(html; web层的扩展名)
    例如:RenderUserProfileControl(userEmail)
    web表单有简单/哑的js,只能将web服务html复制并粘贴到表单中
  3. 我可以看到它适用于任何一种情况,但我对不同的观点感兴趣......思考?

4 个答案:

答案 0 :(得分:2)

在我看来,Web服务有两个特征:

  1. 它将数据暴露给外部源,即除了它们所在的应用程序之外的其他来源。在这个意义上,我同意@Pete,因为你并没有真正设计一个Web服务;您正在设计一个帮助类,以类似Web服务的方式响应请求。也许是一种语义上的区别,但这对我来说是有用的。
  2. 它以多个消费者可重用的格式返回数据(并且仅返回数据)。对我来说,这就是你的“为什么不#2”问题的答案 - 如果你返回类似网络控制的结构,那么你就限制了web服务对其他潜在呼叫者的有用性。他们必须以您返回的方式呈现数据,并且不能选择以其他方式表示数据,从而最大限度地减少整个服务的实用性(和重用性)。 / LI>

    所有这些都说,如果你真正关注的是一个帮助类,它像web服务一样响应而你只打算在这个用例中使用它,那么你可以做任何你喜欢的事情和你的情况#2将工作。但是,从我的角度来看,它打破了责任分离;您将数据访问和渲染功能组合在同一个类中。我怀疑,即使你不关心MVC模式,选项#2也会让你的课程更难维护,你肯定会限制他们对你未来的用处;如果你想访问相同的数据但是以不同的方式呈现它,你需要重构。

答案 1 :(得分:0)

我绝对不会说#2,但#1是有效的。

我也认为(这是意见)作为数据访问层的Web服务并不理想。该服务必须具有更多的价值(一般来说 - 我相信这有明显的例外)。

答案 2 :(得分:0)

即使在方案1中,此服务也会呈现数据层中可用的数据,而不是数据层本身的一部分,只是它以不同于UI格式的格式呈现数据(即JSON)。 ,xml等。)

关于我将使用哪种场景,我会选择场景#1,因为该服务可以在其他Web表单和其他场景中重复使用。

答案 3 :(得分:0)

虽然#1(def。不是#2)通常是正确的方法(只公开视图层所需的数据并在那里处理所有标记),但要小心 web 部分您的设计中的服务。

如果要远程使用数据,那么数据应仅作为 Web服务(SOAP / WSDL,REST)公开(某些SOA架构师可能会认为这一点,但我认为这超出了范围对于这个问题),否则你可能会做太多,并且过度设计你的请求和响应格式。使用对您的应用程序有意义的东西 - 一个促进客户端/服务器通信的Ajax框架,并提取底层的通信格式可能是一个很大的帮助。重要的是要很好地封装检索所需数据的代码(您可以将其称为服务,但它可能只是一个编写得很好的辅助类),因此可以重复使用,然后将这些数据暴露在任何地方方式对于给定的应用程序最有意义。