Web services UI、业务逻辑层、数据层和web服务的放置位置

Web services UI、业务逻辑层、数据层和web服务的放置位置,web-services,web-applications,data-access-layer,business-objects,business-logic-layer,Web Services,Web Applications,Data Access Layer,Business Objects,Business Logic Layer,我们正在开发一个web应用程序。我们希望能够将我们在这里所做的工作重新用于使用相同数据库的不同应用程序,并使用相同的业务规则来读取和写入所述数据库 哪种设计更正确 让UI调用web服务,它将使用包含业务逻辑的业务对象,该业务对象将与数据访问层进行通信 让UI使用包含业务逻辑的业务对象,该业务对象将调用web服务,然后web服务将与数据访问层进行通信 让UI用户拥有包含业务逻辑的业务对象,这些业务对象将与数据访问层进行通信 根据您的描述,您没有提供需要使用web服务层的原因。假设您的UI系统可以访

我们正在开发一个web应用程序。我们希望能够将我们在这里所做的工作重新用于使用相同数据库的不同应用程序,并使用相同的业务规则来读取和写入所述数据库

哪种设计更正确

  • 让UI调用web服务,它将使用包含业务逻辑的业务对象,该业务对象将与数据访问层进行通信

  • 让UI使用包含业务逻辑的业务对象,该业务对象将调用web服务,然后web服务将与数据访问层进行通信

  • 让UI用户拥有包含业务逻辑的业务对象,这些业务对象将与数据访问层进行通信


  • 根据您的描述,您没有提供需要使用web服务层的原因。假设您的UI系统可以访问您的数据库,即在防火墙后面的同一网络中,您的网站UI代码(我假设是服务器端)将使用的基本业务对象层满足您的要求


    当用户界面系统和数据层之间的距离开始跨越数据访问层或业务逻辑层将遇到困难的边界时,引入web服务层。

    就设计是否“正确”而言,如果没有完整的上下文,就不可能对设计的正确性给出100%的答案。要求是什么(功能性和非功能性)?您希望实现哪些设计目标?每个目标有多重要

    您的问题提到的唯一目标是希望在另一个应用程序中重用业务逻辑。当我想以标准方式重用应用程序的业务逻辑时,我选择web服务。因此,仅基于您的一个需求,我认为选项1(UI->Web服务->业务层->数据层)是一个不错的选择。

    请查看:

    它应该走的路是,您的UI层在顶部,数据层在底部,业务层在两者之间。每一层只能与它下面的层通信。因此UI只与业务层对话……业务层只与数据层对话。您的UI不应该与数据层对话,您的数据层也不应该与UI交互


    除非你有理由使用web服务,否则我不会

    我想说第三个。我倾向于将web服务视为另一个表示层

    可以这样想:您有一个web UI,它调用您的业务层代码来执行创建新用户(user.Add)、查找与给定描述匹配的所有产品(products.FindByDescription)等操作

    现在,您可以重新使用相同的业务层代码来构建一组面向公众的web服务,供第三方使用。可以有一个方法添加一个用户-调用您的内部user.Add()方法,另一个方法查找产品,等等

    您得到的是一组指向相同底层数据和业务逻辑的并行表示/接口

    在幕后(完全超出web服务或UI层的范围),业务层调用数据访问层,负责物理查询数据库。如果要更改为不同的DBMS,理想情况下(理论上)应该能够为新数据库重建数据层,并使一切都正常工作

    您的业务层包含一些规则,比如用户名长度必须为4到15个字符;用户只允许搜索和加载他们有权访问的商店中的产品;等等


    如果您决定更改一项业务规则,就像允许用户在其所在州的任何商店中搜索产品一样,那么您可以一次性更改它,而无需触摸web服务或UI即可使其正常工作。

    不要将逻辑设计与物理设计混为一谈。逻辑设计通过层和物理设计层进行操作。Web服务不是一个层。这只是一个层次。 在逻辑设计中有标准的方法:UI层->BL层->DAL
    在物理设计中,所有层都可以驻留在连接本地数据库的客户端应用程序中,也可以分布在远程层上。但对于分布式应用程序,通常会增加一层:应用程序层,它隐藏了BL层的有线通信。

    从逻辑上讲,web服务属于UI层。把“用户”想象成不仅仅是一个人,而是另一个系统,这一点就变得很清楚了。在这些逻辑层之间保持严格的关注点分离将允许您轻松地实现和维护您的应用程序。

    您听说过关于服务层的什么吗?我认为您可以在事务和操作中使用服务层,在访问业务层之后,使用门面层可以帮助您隔离和管理从UI到数据访问层的直接或间接访问。这取决于你的要求

    我认为这并不是把web服务放在哪里的问题的答案?