一、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使用的更多相关文章

  1. Spring MVC篇一、搭建Spring MVC框架

    本项目旨在搭建一个简单的Spring MVC框架,了解Spring MVC的基础配置等内容. 一.项目结构 本项目使用idea intellij创建,配合maven管理.整体的目录结构如图: 其中ja ...

  2. 同样的MVC,不同的实现方法(Spring MVC .Net MVC)

    由于工作需要,最近将Net的MVC又重新好好的学习了一遍.学习教材是博客园里的大神的作品<ASP.NET MVC5框架揭秘>. <ASP.NET MVC5框架揭秘>这本书,说了 ...

  3. 二十一、MVC的WEB框架(Spring MVC)

    一.基于注解方式配置 1.首先是修改IndexContoller控制器类 1.1.在类前面加上@Controller:表示这个类是一个控制器 1.2.在方法handleRequest前面加上@Requ ...

  4. 二十、MVC的WEB框架(Spring MVC)

    一.Spring MVC 运行原理:客户端请求提交到DispatcherServlet,由DispatcherServlet控制器查询HandlerMapping,找到并分发到指定的Controlle ...

  5. 一、Spring MVC起步——IntelliJ IDEA 搭建Spring MVC环境(手把手搭建)

    本机环境: JDK 1.7 IntelliJ IDEA 2017.2 1.新建项目 Create New Project ​ 选择Spring MVC ​ 填写项目名和项目存放位置 ​ 然后点击Fin ...

  6. 【idea&spring mvc】搭建简易的spring mvc项目(基于maven)!

    一.创建项目 1.打开idea,file--new--project 2.按照步骤①②③④操作 3.输入包名,并点击下一步 4.选择下载包的maven的setting.xml配置路径和包的存放地,然后 ...

  7. Spring MVC基础入门

    Spring MVC简介 Spring Web MVC是一种基于Java的实现了Web MVC设计模式的请求驱动类型的轻量级Web框架,即使用了MVC架构模式的思想,将web层进行职责解耦,基于请求驱 ...

  8. (转载)spring mvc DispatcherServlet详解之一---处理请求深入解析

    要深入理解spring mvc的工作流程,就需要先了解spring mvc的架构: 从上图可以看到 前端控制器DispatcherServlet在其中起着主导作用,理解了DispatcherServl ...

  9. Spring MVC 和 Spring 总结

    1. 为什么使用Spring ? 1). 方便解耦,简化开发 通过Spring提供的IoC容器,可以将对象之间的依赖关系交由Spring进行控制,避免硬编码所造成的过度程序耦合. 2). AOP编程的 ...

随机推荐

  1. [Tensorflow] Cookbook - CNN

    Convolutional Neural Networks (CNNs) are responsible for the major breakthroughs in image recognitio ...

  2. C# Linq删除父级的同时删除子级

    之前使用Include获取外键对象列表后,进行删除,一直报错操作失败: 无法更改关系,因为一个或多个外键属性不可以为 null...后面还有一串.尝试了几种方式,比如将u.AlbumList=null ...

  3. Maven传递依赖的坑:父pom中dependencyManagement版本优先级高于传递依赖版本

    一.由来 之前同事问了个问题,就是当前工程为spring boot项目,假设版本号为2.0.3 这个项目中依赖了一个spring boot项目依赖(先别管为啥有这么奇葩的依赖,这个版本是1.5.9). ...

  4. day_5.24py

    世间万物皆对象! 闭包就是内部函数中对enclosing作用域的变量进行引用. 装饰器 最开始就说,这篇博客始于闭包,终于闭包,所以装饰器不多说,只说四句话:1.装饰器就是对闭包的使用:2.装饰器用来 ...

  5. Latest China Scam: I've Been Arrested in the Brothel Crackdown!

    Latest China Scam: I've Been Arrested in the Brothel Crackdown! If the sex industry is fastest to se ...

  6. 洛谷P1147 连续自然数和【二分】

    题目:https://www.luogu.org/problemnew/show/P1147 题意: 给定一个数m,问有多少个数对$(i,j)$,使得$i$到$j$区间的所有整数之和为m.输出所有的解 ...

  7. okvis论文解读

    C. Keypoint Matching and Keyframe Selection 我们的处理流程采用定制的多尺度SSE优化Harris角点检测器与BRISK描述符提取相结合[12].检测器通过逐 ...

  8. RMQ算法详解

    RMQ算法,是一个快速求区间最值的离线算法,预处理时间复杂度O(n*log(n)),查询O(1),所以是一个很快速的算法. 当然这个问题用线段树同样能够解决,算法复杂度为:O(N)~O(logN) . ...

  9. ubuntu 搜狗输入法 在中断失效

    实测是更换了皮肤后,出现在中断输入故障,乱码.在其他界面可能是正常的,更换语言没用. killall fcitx输入法突然好了(根据网友所说,更改一堆东西貌似并没有什么用) 此时关闭输入法皮肤一切正常 ...

  10. HTML5:一些部件

    在表单里经常会用到很多部件 <!DOCTYPE html> <html lang="en"> <head> <meta charset=& ...