1. 程式人生 > >002-MVC架構,貧血的領域模型、spring mvc,webhars使用

002-MVC架構,貧血的領域模型、spring mvc,webhars使用

模型 www 分享 調用 htm 進行 lambda表達式 spel ssi

一、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使用