《精通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页面非常详尽,能够帮助你非常容易地开始了解该项目。

相关文章
|
28天前
|
JSON 前端开发 Java
SSM:SpringMVC
本文介绍了SpringMVC的依赖配置、请求参数处理、注解开发、JSON处理、拦截器、文件上传下载以及相关注意事项。首先,需要在`pom.xml`中添加必要的依赖,包括Servlet、JSTL、Spring Web MVC等。接着,在`web.xml`中配置DispatcherServlet,并设置Spring MVC的相关配置,如组件扫描、默认Servlet处理器等。然后,通过`@RequestMapping`等注解处理请求参数,使用`@ResponseBody`返回JSON数据。此外,还介绍了如何创建和配置拦截器、文件上传下载的功能,并强调了JSP文件的放置位置,避免404错误。
|
1月前
|
JSON 缓存 Java
优雅至极!Spring Boot 3.3 中 ObjectMapper 的最佳实践
【10月更文挑战第5天】在Spring Boot的开发中,ObjectMapper作为Jackson框架的核心组件,扮演着处理JSON格式数据的核心角色。它不仅能够将Java对象与JSON字符串进行相互转换,还支持复杂的Java类型,如泛型、嵌套对象、集合等。在Spring Boot 3.3中,通过优雅地配置和使用ObjectMapper,我们可以更加高效地处理JSON数据,提升开发效率和代码质量。本文将从ObjectMapper的基本功能、配置方法、最佳实践以及性能优化等方面进行详细探讨。
48 2
|
1月前
|
前端开发 Java 应用服务中间件
【Spring】Spring MVC的项目准备和连接建立
【Spring】Spring MVC的项目准备和连接建立
52 2
|
2月前
|
缓存 前端开发 Java
【Java面试题汇总】Spring,SpringBoot,SpringMVC,Mybatis,JavaWeb篇(2023版)
Soring Boot的起步依赖、启动流程、自动装配、常用的注解、Spring MVC的执行流程、对MVC的理解、RestFull风格、为什么service层要写接口、MyBatis的缓存机制、$和#有什么区别、resultType和resultMap区别、cookie和session的区别是什么?session的工作原理
【Java面试题汇总】Spring,SpringBoot,SpringMVC,Mybatis,JavaWeb篇(2023版)
|
1月前
|
XML 前端开发 Java
Spring,SpringBoot和SpringMVC的关系以及区别 —— 超准确,可当面试题!!!也可供零基础学习
本文阐述了Spring、Spring Boot和Spring MVC的关系与区别,指出Spring是一个轻量级、一站式、模块化的应用程序开发框架,Spring MVC是Spring的一个子框架,专注于Web应用和网络接口开发,而Spring Boot则是对Spring的封装,用于简化Spring应用的开发。
97 0
Spring,SpringBoot和SpringMVC的关系以及区别 —— 超准确,可当面试题!!!也可供零基础学习
|
18天前
|
消息中间件 监控 Java
Spring Boot 3.3 后台任务处理:最佳实践与高效策略
【10月更文挑战第10天】 在现代应用程序中,后台任务处理对于提高应用程序的响应性和吞吐量至关重要。Spring Boot 3.3提供了多种机制来实现高效的后台任务处理,包括异步方法、任务调度和使用消息队列等。本文将探讨这些机制的最佳实践和高效策略。
48 0
|
2月前
|
负载均衡 Java 对象存储
负载均衡策略:Spring Cloud与Netflix OSS的最佳实践
负载均衡策略:Spring Cloud与Netflix OSS的最佳实践
46 2
|
2月前
|
XML 缓存 前端开发
springMVC02,restful风格,请求转发和重定向
文章介绍了RESTful风格的基本概念和特点,并展示了如何使用SpringMVC实现RESTful风格的请求处理。同时,文章还讨论了SpringMVC中的请求转发和重定向的实现方式,并通过具体代码示例进行了说明。
springMVC02,restful风格,请求转发和重定向
|
3月前
|
Java 数据库连接 Spring
后端框架入门超详细 三部曲 Spring 、SpringMVC、Mybatis、SSM框架整合案例 【爆肝整理五万字】
文章是关于Spring、SpringMVC、Mybatis三个后端框架的超详细入门教程,包括基础知识讲解、代码案例及SSM框架整合的实战应用,旨在帮助读者全面理解并掌握这些框架的使用。
后端框架入门超详细 三部曲 Spring 、SpringMVC、Mybatis、SSM框架整合案例 【爆肝整理五万字】
|
3月前
|
XML JSON 数据库
SpringMVC入门到实战------七、RESTful的详细介绍和使用 具体代码案例分析(一)
这篇文章详细介绍了RESTful的概念、实现方式,以及如何在SpringMVC中使用HiddenHttpMethodFilter来处理PUT和DELETE请求,并通过具体代码案例分析了RESTful的使用。
SpringMVC入门到实战------七、RESTful的详细介绍和使用 具体代码案例分析(一)
下一篇
无影云桌面