《精通Spring MVC 4》——2.2 对MVC的质疑及其最佳实践

简介: DDD所涉及的内容远不止上述的规则:实体(Entity)、值类型(value type)、通用语言(Ubiquitous Language)、限界上下文(Bounded Context)、洋葱架构(Onion Architecture)以及防腐化层(anti corruption layer),我强烈建议你自行学习一下这些原则。

本节书摘来自异步社区《精通Spring MVC 4》一书中的第2章,第2.2节,作者:【美】Geoffroy Warin著,更多章节内容可以访问云栖社区“异步社区”公众号查看

2.2 对MVC的质疑及其最佳实践

尽管MVC依然是当前设计UI的首选方案,但是随着它的流行,也有很多对它的批评。实际上,大多数的批评都指向了该模式的错误用法。

2.2.1 贫血的领域模型
Eric Evans编写过一本很有影响力的书,名为《领域驱动设计》(Domain Driven Design,DDD)。在这本书中,定义了一组架构规则,能够指导我们更好地将业务领域集成到代码之中。

其中有一项核心的理念就是将面向对象的范式应用到领域对象之中。如果违背这一原则的话,就会被称之为贫血的领域模型(Anemic Domain Model)。
贫血的领域模型通常来讲会具有如下的症状:

模型是由简单老式的Java对象(plain old Java object,POJO)所构成的,只有getter和setter方法;
所有业务逻辑都是在服务层处理的;
对模型的校验会在本模型外部进行,例如在控制器中。
根据业务领域的复杂性不同,这可能是一种较差的实践方式。通常来讲,DDD实践需要付出额外的努力,将领域从应用逻辑中分离出来。

架构通常都是一种权衡,需要注意的是,设计Spring应用的典型方式往往会在这个过程中导致系统在可维护性上变得较为复杂。

避免领域贫血的途径如下:

服务层适合进行应用级别的抽象(如事务处理),而不是业务逻辑;
领域对象应该始终处于合法的状态。通过校验器(validator)或JSR-303的校验注解,让校验过程在表单对象中进行;
将输入转换成有意义的领域对象;
将数据层按照Repository的方式来实现,Repository中会包含领域查询(例如参考Spring Data规范);
将领域逻辑与底层的持久化框架解耦;
尽可能使用实际的对象,例如操作FirstName类而不是操作String。
DDD所涉及的内容远不止上述的规则:实体(Entity)、值类型(value type)、通用语言(Ubiquitous Language)、限界上下文(Bounded Context)、洋葱架构(Onion Architecture)以及防腐化层(anti corruption layer),我强烈建议你自行学习一下这些原则。就我们而言,在构建Web应用的过程中,会努力遵循上述的指导原则。随着本书的推进,你会对这些关注点更加熟悉的。

2.2.2 从源码中学习
如果熟悉Spring的话,那么很可能你已经访问过Spring的Web站点,即http://spring.io。它全部是由Spring构建的,而且很棒的一点在于它是开源的。

这个项目的名称为sagan,它包含了很多有意思的特性:

基于Gradle的多模块项目;
集成了安全;
集成了Github;
集成了Elasticsearch;
JavaScript前端应用。
这个项目的Github wiki页面非常详尽,能够帮助你非常容易地开始了解该项目。

相关文章
|
30天前
|
缓存 前端开发 Java
Spring MVC 面试题及答案整理,最新面试题
Spring MVC 面试题及答案整理,最新面试题
85 0
|
30天前
ssm(Spring+Spring mvc+mybatis)——updateDept.jsp
ssm(Spring+Spring mvc+mybatis)——updateDept.jsp
10 0
|
30天前
ssm(Spring+Spring mvc+mybatis)——showDept.jsp
ssm(Spring+Spring mvc+mybatis)——showDept.jsp
9 0
|
29天前
|
SQL JavaScript Java
springboot+springm vc+mybatis实现增删改查案例!
springboot+springm vc+mybatis实现增删改查案例!
23 0
|
29天前
|
SQL Java 数据库连接
挺详细的spring+springmvc+mybatis配置整合|含源代码
挺详细的spring+springmvc+mybatis配置整合|含源代码
35 1
|
7天前
|
数据采集 前端开发 Java
数据塑造:Spring MVC中@ModelAttribute的高级数据预处理技巧
数据塑造:Spring MVC中@ModelAttribute的高级数据预处理技巧
21 3
|
7天前
|
存储 前端开发 Java
会话锦囊:揭示Spring MVC如何巧妙使用@SessionAttributes
会话锦囊:揭示Spring MVC如何巧妙使用@SessionAttributes
13 1
|
7天前
|
前端开发 Java Spring
数据之桥:深入Spring MVC中传递数据给视图的实用指南
数据之桥:深入Spring MVC中传递数据给视图的实用指南
24 3
|
7天前
|
JSON Java 数据库连接
属性注入掌握:Spring Boot配置属性的高级技巧与最佳实践
属性注入掌握:Spring Boot配置属性的高级技巧与最佳实践
14 1
|
16天前
|
前端开发 安全 Java
使用Java Web框架:Spring MVC的全面指南
【4月更文挑战第3天】Spring MVC是Spring框架的一部分,用于构建高效、模块化的Web应用。它基于MVC模式,支持多种视图技术。核心概念包括DispatcherServlet(前端控制器)、HandlerMapping(请求映射)、Controller(处理请求)、ViewResolver(视图解析)和ModelAndView(模型和视图容器)。开发流程涉及配置DispatcherServlet、定义Controller、创建View、处理数据、绑定模型和异常处理。
使用Java Web框架:Spring MVC的全面指南