3:区分逻辑层(layer)和物理层(tier)
不同逻辑层(layer)之间才是企业应用所关心的功能职责,软件代码基(codebase)的不同部分各自承担着一项关键职责。物理层(tier),则是网络拓扑中的物理机器。通常逻辑层都会映射到给定的物理层,比如数据层(layer)和数据库层(tier),直接假设这种映射是一对一的话,可以消除考虑其他架构的可能性。虽然这种架构可能是最好的,但是这种假设应该是我们有意识的决定,而不是靠习惯做出的选择。在有些场合可能需要我们变换这种一对一的映射关系。例如便利连锁店的售货系统,我们会这样设计系统:把表示层、域逻辑层以及部分数据管理层都放置在客层,数据管理层的其它部分从客户层、中间层(通过某种第3类型的JDBC网络驱动程序),一直延伸到服务器层。每个便利店的终端在网络连接断开的时候一样能够运行应用程序,数据被缓存在本地机器,当网络恢复的时候,就能够用其更新中央数据库。当我们把消息中介放置在客户层时,就可以把消息存储在本地,等网络连接恢复的时候在传递出去,这是这种方法尤其有用。
考虑应用程序架构的时候,为了在集中化管理和通信成本之间找到最好的“平衡点”,要确保描绘出的系统的各个逻辑层次(表示层、域逻辑层、数据管理层)和网络拓扑中的物理层次(客户端、中间层、服务器层)。更重要的是,一定不能认定表示层就在客户端,域逻辑层总在中间层,数据管理层总是在服务器上。