| 许多开发者应用WEB服务与其业务逻辑进行通信,这样做有许多好处。在构架方面,这种方法有其它方法所没有的一系列灵活性。但是,它也存在一些缺点。缺点之一在于保持WEB服务方法与业务逻辑方法同步涉及大量繁琐的工作。本文为你说明如何在享受WEB服务好处的同时,避免上述同步问题。 http://www.it55.com/
推理过程 www.it55.com
我最近设计并建立了一个应用程序,它利用WEB服务进行业务层通信。其界面应用一个定制的组件来要求数据,定制的组件使用WEB服务与业务层进行通信。这样这个界面可配置在我们希望的任何地方,而且可以通过SSL确保所有通信。它的一般构架与图A类似。 免费资源www.it55.com
图A
vd;k;l www.it55.com rdfg
在线教程
一般构架
业务逻辑类包含静态方法,可在数据送交到数据访问层前对其进行处理,或通过WEB服务返回通信组件。 http://www.it55.com/
前两个星期,当我们把它应用于主系统时,这个程序运行良好。但随后,我们开始在业务逻辑中增加越来越多的方法,它们需要通过WEB服务来揭示。由于我们要为WEB服务和业务逻辑类设定1:1的比例,这一过程要花费大量的时间。每次我们增加一个新业务逻辑类,我们必须建立一个新的WEB服务;为 WEB服务安排代理类;保持代理类与WEB服务同步,并保持WEB服务与业务逻辑同步。 www.it55.com
我们的最后期限很短,时间安排也非常紧。我们需要想出一个办法来自动化或简化与WEB服务应用有关的维护过程。互相讨论之后(如代码生成器—— 我们已使用一个代码生成器从数据库表中生成类),我想出一个主意:使用反射自动调用业务逻辑类中的方法,并通过WEB服务返回其结果。半小时后,我建立了第一个原型,约二个小时后,我建成了一个我感觉可用于生产环境中的组件。
IT资讯之家
安装
45398 www.it55.com it55 学习IT知识,享受IT生活 4dfkjn
让我们假设你已经开发出一些类。这些类可称之为“数据传输对象”(DTO——在这里阅读更多DTO的有关信息)。 IT资讯之家 www.it55.com
CustomerData——保存单独客户数据 www.it55.com
OrderData——保存单独订单数据 免费资源www.it55.com
我们还建立了以下这些类,它们的任务是与数据访问层进行通信,并移植CustomerData和OrderData对象: www.it55.com在线教程
Customer——它有两个静态方法,LoadByCustomerID(int customerID)和LoadByOrderID(int orderID)。这两个方法都返回单独一个CustomerData对象。
Order——它有两个静态方法,LoadByOrderID(int orderID) 和LoadAllForCustomerID(int customerID)。 免费资源www.it55.com
正常情况下,在这种情形中,会存在两个WEB服务——一个返回CustomerData对象,一个返回OrderData对象(你可以把它们结合到一个WEB服务中,但当它们处理大量类时会出现堵塞)。这两个WEB服务各自有两个方法。程序将从界面层,或像我的例子一样从通信组件中调用WEB服务方法。然后WEB服务再调用业务层获得所需的数据。因此在正常情况下,每个WEB服务获得两个DTO、两个类、两个WEB服务和两个方法。(见图B)
例如:
图B vd;k;l www.it55.com rdfg
安装
|