Crab213's Blog.

Spring MVC: Layers

2016/04/25

SpringMVC是一个MVC框架,它从逻辑层面上对一个Web应用进行了分层,以此达成解耦各个组件,提高代码复用,方便测试等众多目的。

+-------+----------------------------+
| D  M  |     User Interface         |
| o  o  +----------------------------+
| m  d  |     Web Layer              |
| a  e  +----------------------------+
| i  l  |     Service Layer          |
| n     +----------------------------+
|       |     Data Access Layer      |
+-------+----------------------------+

领域层(Domain Layer)

领域层是贯穿我们程序的最重要的层。领域层的代码代表了我们需要解决的业务问题,同时也代表了业务规则。一种简明有效的设计领域层对象的方式是将我们业务中所出现的名词设计成类。这些领域对象通常具有一些细颗粒的方法,这些方法可以帮助我们的服务层解决问题。通常,我们的领域对象并不需要使用Spring的依赖注入特性。

用户接口层(User Interface Layer)

用户接口层将我们的应用程序展示给我们的用户。用户往往可以根据自己的需要要选择合适的表现方式。通常用户接口层依赖于领域层,通过将领域对象直接渲染成用UI,可以简化我们的程序结构。但是SpringMVC并不强求我们一定要让用户接口层依赖于领域层。

Web层(Web Layer)

Web层有两个任务,一个是引导用户使用我们的Web程序,还有一个是作为服务层与HTTP协议的胶水层。Web层将HTTP请求转换为可以被服务层直接操作的对象,并将服务层返回的对象转换为用户可以获取的响应。作为胶水层,Web层应该尽量薄。

服务层(Service Layer)

服务层是我们程序的核心,它导出了我们这个系统的核心功能。通常将服务层设计成单例,这样可以让服务层不保存状态,使其可以处理大量的请求。因此我们应该尽量将状态保存在领域对象中。这样做还有一个好处就是服务层由于没有状态,很容易做到线程安全。

我们将服务层的方法设计成粗颗粒的方法,这样便于我们应用AOP进行事务处理以及安全管理。通常,服务层依赖于领域层来处理业务逻辑。同时,服务层也依赖于数据存取层,这样服务层不需要直接管理数据后端。

数据存取层(Data Access Layer)

数据存取层管理我们的数据持久化操作,由于领域层的存在,数据层一般将领域对象映射到真正的存储介质中(数据库,文件,以及其他)。显然我们联想到了ORM框架,例如Mybatis,Hibernate等等。将数据存取单独分层,使服务层可以脱离真正的数据,我们可以构造一些临时测试用的数据,而不需要改动服务层,这样做便于单元测试。

CATALOG
  1. 1. 领域层(Domain Layer)
  2. 2. 用户接口层(User Interface Layer)
  3. 3. Web层(Web Layer)
  4. 4. 服务层(Service Layer)
  5. 5. 数据存取层(Data Access Layer)