002-MVC架构,贫血的领域模型、spring mvc,webhars使用
一、MVC、贫血的领域模型
MVC理念是将视图与模型进行解耦。
贫血的领域模型
《领域驱动设计》定义了一组架构规则,能够指导我们更好地将业务领域集成到代码中。
其中一个核心理念是将面向对象的范式应用到领域对象之中。如果违背这一原则的话,就被称之为贫血的领域模型。
模型是由简单老式的Java对象(plain old java object,POJO)所构成,只有getter和setter方法
所有业务逻辑都是在服务层处理的。
对模型的校验会在本模型外部进行,例如在控制器中。
架构是一种权衡。避免领域贫血的途径
服务层适合进行应用级别的抽象(如事务处理),而不是业务逻辑;
领域对象应该始终处于合法状态。通过校验器(validator)或jsr-303的校验注解,让校验过程在表单对象中进行。
将输入转换成有意义的领域对象;
将数据层按照Repository的方式实现。Repository中会包含领域查询(spring data规范)
将领域逻辑与底层持久化框架解耦
尽可能使用实际的对象,例如才做FirstName类而不是操作String。
DDD所涉及不止上述规则:实体(Entity)、值类型(value type)、通用语言(Ubiquitous Language)、限界上下文(Bounded Context)、洋葱架构(Onion)以及防腐化层(anti corruption layer)
一个前端学习项目:https://github.com/spring-io/sagan
二、Spring MVC架构
每个Spring web应用的入口都是DIspatcherServlet。是一个典型的HttpServlet类。
他会将HTTP请求分发给HandlerMapping。HandlerMapping会将资源(URL)与控制器关联起来。
控制器上对应的方法(也就是带有@RequestMapping注解的方法)将会被调用。在这个方法中,控制器会设置模型数据并将视图名称返回给分发器。
然后,DispatcherServlet将会查询ViewResolver接口,从而得到对应视图的实现。
通过查看ThymeleafProperties类,可知视图默认前缀是"classpath:/templates/",后缀是“.html”;
2.1、Spring 表达式语言
https://docs.spring.io/spring/docs/current/spring-framework-reference/core.html#expressions
SpEL的用处并不仅限于视图之中,可以将他用在Spring框架的各种地方,如通过@Value注解往Bean注入属性等。
参看:https://github.com/bjlhx15/gradle-mvc4/tree/master/demo02-thymeleaf-mvc
2.2、java8的流和lambda表达式
https://www.cnblogs.com/bjlhx/p/9733040.html
2.3、使用webjars实现质感设计
添加引用:
compile group: 'org.webjars.bower', name: 'materialize', version: '0.100.2'
compile group: 'org.webjars', name: 'jquery', version: '3.3.1'
每个Webjars的结构都是标准准的,每个库的JS和css文件都会位于/webjars/{lib}/{version} /*.js
如页面中可添加
<script src="/webjars/jquery/2.1.4/jquery.js"></jquery>
<link href="/webjars/materializecss/0.100.2/css/materialize.css" type="text/css" rel="stytlesheet" media="screen,projection">
<script src="/webjars/materializecss/0.100.2/js/materialize.js">
002-MVC架构,贫血的领域模型、spring mvc,webhars使用的更多相关文章
- Spring MVC篇一、搭建Spring MVC框架
本项目旨在搭建一个简单的Spring MVC框架,了解Spring MVC的基础配置等内容. 一.项目结构 本项目使用idea intellij创建,配合maven管理.整体的目录结构如图: 其中ja ...
- 同样的MVC,不同的实现方法(Spring MVC .Net MVC)
由于工作需要,最近将Net的MVC又重新好好的学习了一遍.学习教材是博客园里的大神的作品<ASP.NET MVC5框架揭秘>. <ASP.NET MVC5框架揭秘>这本书,说了 ...
- 二十一、MVC的WEB框架(Spring MVC)
一.基于注解方式配置 1.首先是修改IndexContoller控制器类 1.1.在类前面加上@Controller:表示这个类是一个控制器 1.2.在方法handleRequest前面加上@Requ ...
- 二十、MVC的WEB框架(Spring MVC)
一.Spring MVC 运行原理:客户端请求提交到DispatcherServlet,由DispatcherServlet控制器查询HandlerMapping,找到并分发到指定的Controlle ...
- 一、Spring MVC起步——IntelliJ IDEA 搭建Spring MVC环境(手把手搭建)
本机环境: JDK 1.7 IntelliJ IDEA 2017.2 1.新建项目 Create New Project 选择Spring MVC 填写项目名和项目存放位置 然后点击Fin ...
- 【idea&spring mvc】搭建简易的spring mvc项目(基于maven)!
一.创建项目 1.打开idea,file--new--project 2.按照步骤①②③④操作 3.输入包名,并点击下一步 4.选择下载包的maven的setting.xml配置路径和包的存放地,然后 ...
- Spring MVC基础入门
Spring MVC简介 Spring Web MVC是一种基于Java的实现了Web MVC设计模式的请求驱动类型的轻量级Web框架,即使用了MVC架构模式的思想,将web层进行职责解耦,基于请求驱 ...
- (转载)spring mvc DispatcherServlet详解之一---处理请求深入解析
要深入理解spring mvc的工作流程,就需要先了解spring mvc的架构: 从上图可以看到 前端控制器DispatcherServlet在其中起着主导作用,理解了DispatcherServl ...
- Spring MVC 和 Spring 总结
1. 为什么使用Spring ? 1). 方便解耦,简化开发 通过Spring提供的IoC容器,可以将对象之间的依赖关系交由Spring进行控制,避免硬编码所造成的过度程序耦合. 2). AOP编程的 ...
随机推荐
- PS脚本博客
http://blog.csdn.net/fzhlee/article/category/2718489
- IOS-一步一步教你自定义评分星级条RatingBar
本文转载至 http://blog.csdn.net/hanhailong726188/article/details/42344131 由于项目的需要,需要设计能评分.能显示评分数据的星级评分条,但 ...
- TSPL学习笔记(1)
扩展语法(Syntactic extensions) 扩展语法就是通过核心语法或已经定义的扩展语法创建一种新的语法模式. Scheme核心语法模式包括: 顶层定义 常量 变量 过程应用 '(quote ...
- bootstrap-switch 使用
网址:http://www.bootcss.com/p/bootstrap-switch/ 界面设置不调用方法没成功,事件也不起作用不知道是jquery版本原因还是什么原因!,下面亲测试可以使用 $( ...
- [No0000126]SSL/TLS原理详解与WCF中的WS-Security
SSL/TLS作为一种互联网安全加密技术 1. SSL/TLS概览 1.1 整体结构 SSL是一个介于HTTP协议与TCP之间的一个可选层,其位置大致如下: SSL:(Secure Socket La ...
- Sticks POJ - 1011 少林神棍 dfs四次剪枝
http://poj.org/problem?id=1011 题意:若干根棍子被截成小段的木棒,现在给你这些木棒,问最短可以拼出的棍子长度. 题解:搜索,dfs(r,m) 二个参数分别代表还剩r个木棒 ...
- linux 记录所有用户bash操作日志
记录所有用户登录系统的任何操作日志,以便有据可查. 1.编辑 /etc/profile文件. 1 # vim /etc/profil 2. 在其后添加如下内容 1 2 3 4 5 6 7 8 ...
- 2012年蓝桥杯省赛A组c++第2题(暴力求解古堡算式)
/* 古堡算式 福尔摩斯到某古堡探险,看到门上写着一个奇怪的算式: ABCDE * ? = EDCBA 他对华生说:“ABCDE应该代表不同的数字,问号也代表某个数字!” 华生:“我猜也是!” 于是, ...
- vmware为我们提供了三种网络工作模式,它们分别是:Bridged(桥接模式)、NAT(网络地址转换模式)、Host-Only(仅主机模式)。
原文来自http://note.youdao.com/share/web/file.html?id=236896997b6ffbaa8e0d92eacd13abbf&type=note 我怕链 ...
- Chap7:民间用语[《区块链中文词典》维京&甲子]