Encapsulation 客户机-服务器三层软件体系结构中的层封装

Encapsulation 客户机-服务器三层软件体系结构中的层封装,encapsulation,distributed-computing,Encapsulation,Distributed Computing,客户端-服务器模式的三层软件体系结构有三个不同的层: 表示层- 用户可以直接访问的层,如UI或网页。也称为客户机 应用层- 该层封装了业务逻辑(如业务规则和数据验证)、域概念、数据访问逻辑等,也称为中间层 数据层- 用于存储应用程序数据的外部数据源,如数据库服务器 为什么将不同层的逻辑封装在不同的软件模块中是有利的?您应该将不同层的逻辑封装在不同的软件模块中有几个原因 1。它迫使您实践关注点分离/SRP。 这匹马已经被打死了,所以我会的。 如果您在不同的文件/模块中真正保持不同的关注点,而没有太

客户端-服务器模式的三层软件体系结构有三个不同的层:

  • 表示层- 用户可以直接访问的层,如UI或网页。也称为客户机

  • 应用层- 该层封装了业务逻辑(如业务规则和数据验证)、域概念、数据访问逻辑等,也称为中间层

  • 数据层- 用于存储应用程序数据的外部数据源,如数据库服务器


  • 为什么将不同层的逻辑封装在不同的软件模块中是有利的?

    您应该将不同层的逻辑封装在不同的软件模块中有几个原因

    1。它迫使您实践关注点分离/SRP。

    这匹马已经被打死了,所以我会的。 如果您在不同的文件/模块中真正保持不同的关注点,而没有太多耦合,那么您将是一个更快乐的开发人员。在看到一个30000行的“上帝类”之前,你还没有见过地狱,它可以做任何事情,并且不可能从中添加或删除特性、修复bug或重构

    2。它可以帮助您将代码分解为可管理的块。

    一段时间以来,编码人员一直在将代码分解成不同的模块,因为这有助于我们理解更大的图景。您通常需要模块提供的结构和形容词,一旦您的系统超出了较小的规模,或者您需要与其他开发人员合作

    3。它可以帮助您将来将代码分发到不同的机器/体系结构上。

    将您的软件放入不同的模块可以使将来更容易地将它们分发到不同的机器上(即分布式计算)。如果您的模块没有共享状态并且没有过度耦合,则可以将模块移动到不同的机器上。但它不会自动执行此操作,您仍然需要处理接口(rpc/services/etc)和


    注意:如果将模块过度耦合,您可以轻松避开所有这些好处。通常,您希望最小的模块耦合遵循数据流的方向(即表示层不应与数据库通信)

    有几个原因可以让您将不同层的逻辑封装到不同的软件模块中

    1。它迫使您实践关注点分离/SRP。

    这匹马已经被打死了,所以我会的。 如果您在不同的文件/模块中真正保持不同的关注点,而没有太多耦合,那么您将是一个更快乐的开发人员。在看到一个30000行的“上帝类”之前,你还没有见过地狱,它可以做任何事情,并且不可能从中添加或删除特性、修复bug或重构

    2。它可以帮助您将代码分解为可管理的块。

    一段时间以来,编码人员一直在将代码分解成不同的模块,因为这有助于我们理解更大的图景。您通常需要模块提供的结构和形容词,一旦您的系统超出了较小的规模,或者您需要与其他开发人员合作

    3。它可以帮助您将来将代码分发到不同的机器/体系结构上。

    将您的软件放入不同的模块可以使将来更容易地将它们分发到不同的机器上(即分布式计算)。如果您的模块没有共享状态并且没有过度耦合,则可以将模块移动到不同的机器上。但它不会自动执行此操作,您仍然需要处理接口(rpc/services/etc)和


    注意:如果将模块过度耦合,您可以轻松避开所有这些好处。通常,您希望最小的模块耦合遵循数据流的方向(即表示层不应与数据库通信)

    回答得好,亚历克斯。我还要补充:

    4。它允许您构建多个客户端

    想想像Facebook这样的应用。有Web应用程序、iPhone应用程序、Android应用程序等。当应用程序以这种方式分离时,开发人员只需为iPhone、Android和任何其他新出现的客户端“重新换肤”应用程序。当单独的iPhone和Web页面与同一应用层通信时(例如通过REST),您可以确定业务规则在所有平台上的应用都是类似的


    当您在应用程序中结合视图特定逻辑(编译HTML)时,您的新iPhone应用程序可能需要绕过这一点,因为它不关心HTML。或者,如果您在视图层中使用了业务逻辑(对一系列数据执行多个计算),您的新iPhone应用程序很可能需要复制此代码;在将来需要更改计算时会导致潜在的错误。

    回答得好,Alex。我还要补充:

    4。它允许您构建多个客户端

    想想像Facebook这样的应用。有Web应用程序、iPhone应用程序、Android应用程序等。当应用程序以这种方式分离时,开发人员只需为iPhone、Android和任何其他新出现的客户端“重新换肤”应用程序。当单独的iPhone和Web页面与同一应用层通信时(例如通过REST),您可以确定业务规则在所有平台上的应用都是类似的

    当您在应用程序中结合视图特定逻辑(编译HTML)时,您的新iPhone应用程序可能需要绕过这一点,因为它不关心HTML。或者,如果您在视图层中使用了业务逻辑(对一系列数据执行多个计算),您的新iPhone应用程序很可能需要复制此代码;导致潜在的bu