1 概念
分层架构模式是一种非常常见的架构设计模式,很多人都在用,可能不知道它的概念。分层模式背后的理念是,具有相同功能的组件将被组织成水平层。因此,每一层在应用程序中都扮演着特定的角色。
在这种模式中,我们对应用程序可以拥有的层数没有限制。在这方面,我们还提倡关注点分离的概念。分层模式风格抽象了整个软件的视图;同时提供了足够的细节用以了解各个层的角色和职责以及他们之间的关系。分层模式的典型实现如下:
- UI展示层(UI/Presentation Layer):渲染并运行用户界面,向服务器应用程序发送请求。
- 应用层(Application Layer):包含表示层、应用程序层、域对象层和持久化层。
- 域对象层/业务层(Domain/Business Layer):该层包含所有业务逻辑、实体、事件和其他包含业务逻辑的对象类型。
- 数据库层(Database Layer):这是数据层,用于持久化数据,应用服务器将使用这些数据。
优点:
各个模块可以独自开发和衍化,各个部分之间的交互非常少,支持可移植性,可修改性和复用性。
缺点:
分层会导致性能下降。这种模式不适合高性能应用程序,因为经过架构中的多层来实现一个业务请求的效率是不高的。
2 性能分析
整体敏捷性(低):整体敏捷性是快速响应环境不断变化的能力。虽然可以通过此模式的隔离层特性隔离变更,但在此体系结构模式中进行更改仍然很麻烦且耗时,因为大多数实现都具有单片特性,并且通常使用此模式的组件之间存在紧密耦合。
易部署性(低):受该架构模式具体实现的影响,部署可能会称为一个问题,特别是对于较大的应用程序。一个组件的小更改,就可能需要重新部署整个应用程序或者应用程序的很大一部分。因此,这种模式不容易形成持续交付,这就进一步降低了易部署性方面的总体评级。
易测性(高):由于组件从属于该架构模式中的特定层,所以其他层是可以被mock或stub的,这就使得分层架构模式相对容易测试。开发人员可以模拟表示层 中的组件来隔壁业务组件中的测试,也可以模拟业务组件来测试表示层。
性能(低):虽然某些分层架构确实运行的很好,但由于必须通过架构的多层来实现业务请求的低效率,这种模式并不适合于高性能应用程序。
可扩展性/可伸缩性(低):由于这种模式的紧密耦合和通用实现的趋势,使用这种体系结构模式构建的应用程序通常难以扩展。您可以通过将层拆分为单独的物理部署或将整个应用程序复制到多个节点来扩展分层体系结构,但总体而言,粒度太宽,使得扩展成本很高。
可开发性(高):开发的容易程度得到了相对较高的分数,主要是因为这种模式非常有名,而且实现起来并不太复杂。因为大多数公司通过分层(表示、业务、数据库)分离技术来开发应用程序,使得这种模式成为大多数业务应用程序开发的自然选择。公司的沟通和组织结构与软件开发方式之间的联系被称为Conway’s law。你可以谷歌“Conway’s law”来获得更多关于这种迷人相关性的信息。