zoukankan      html  css  js  c++  java
  • 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">

      

      

  • 相关阅读:
    How to read a whole document content into a string onetime
    how to get the Authorization of adobe acrobat 8.0 for free
    给求职的同学的几点建议
    select() manul select() 手册
    有无一步登天之法?
    VB6.0 Excel模版,自己設定好分析餅圖,如何動態地更新分析圖的數據源呢?
    C#中的委托和事件(续)
    C# 中的委托和事件
    VB6.0 Excel的動態生成多個Sheet的方法
    VB6.0 用Excel生成數據分析餅圖例子
  • 原文地址:https://www.cnblogs.com/bjlhx/p/10254172.html
Copyright © 2011-2022 走看看