C6 架构系列——MVC模式和领域驱动设计(DDD)的结合

2014-09-10 18:13:22

请关注唯心的个人微信公众号:craft6-cn(中划线,也可以搜索:领域驱动业务建模)

一、领域驱动设计(DDD)的对象设计

C6架构领域对象设计(Craft6.cn 颜超敏).jpg

  • 模型Model

    即领域驱动设计中的领域对象(DO,Domain Object),即是从现实世界中抽象出来的有形或无形的业务实体。

    在C6架构中,直接使用实体业务名称进行命名,比如SalesOrder(销售订单)、BlogPosts(博客帖子)、

    GlCate(通用分类)、Scheme(方案)等。


  • 数据表映射对象 TBL

    数据表映射对象,和数据表的字段、外键等进行一一的ORM映射,在C6架构中,通过MyBatis技术实现映射。


  • 持久化对象 PO

    继承TBL,以此获得数据表的映射数据。并基于此扩展满足视图的数据要求。
    比如数据库中存储的是逗号分隔的字符串,那么可以在PO中将其转换为List、String[]等,简化在视图中
    的开发;比如某个数值需要经过一系列的计算获得结果,也可以在PO中进行,而不需要在视图中处理,让
    视图更“轻量”。


  • Model 和 PO

    Model 直接关联本模型对应的PO,如SalesOrder关联SalesOrderPo,通过getData()方法获得。


  • PO 和 TBL

    在开发的过程中,修改数据表是很常见的,架构使用了ORM技术,所以每次都需要同时更新mapper.xml文件和
    映射的类,而由于开发时往往需要在持久化对象设计一些转换、计算和临时变量等处理。将PO和TBL分离后
    就可以在修改数据表直接通过代码生成生成TBL类和mapper.xml映射文件。

二、MVC模式的设计关注点

  • 领域对象 DO、持久化对象 PO和视图 View的关系

    领域对象不会直接绑定到View中,避免在View中直接调用DO的方法进行业务处理,而破坏MVC结构。

    PO在DO对象中,控制层通过DO.getData()方法获得PO对象,绑定到View中。

    如果需要某个PO的集合,则调用对应的Repository方法进行查询获得。

  • 从持久化对象PO中分离表现


    • 职责清晰:PO仅是作为数据的封装、转换以及简单的处理。

    • 允许开发多个表现:如Web端、APP端、触屏等。要求PO禁止包含特定视图的代码
      (如JSP、FreeMarker、Velocity、Html5等),避免PO和View绑定。

    • 两者分离会更容易对PO或页面进行测试。

  • 从视图中分离控制器

    对于一些新手,在使用JSP开发视图时,往往会在JSP中增加很多业务逻辑,让JSP承担了控制层的一些职能。

    这样将导致视图难以进行单独测试和维护。


三、C6架构的MVC和DDD结合

C6架构指MVC和DDD结合(Craft6.cn 颜超敏).jpg

  • 模型 Model


    采用Model作为领域对象实现具体业务,而非传统事务脚本的Service或Manager的设计方式。
    通过Model包含PO做数据绑定、封装、转换、计算等处理。

    通过PO继承TBL来实现数据表映射,并且通过分离来实现修改数据表也不影响PO。


  • 视图 View

    FreeMarker:在C6架构中,使用了FreeMarker作为前端主要开发技术。

    装饰器 Sitemesh:对于一些类似的页面,可以采用装饰器来处理,如craft6.cn的前台页面。

    LigerUI:后台集成了LigerUI富客户端作为视图的技术。


  • 控制层 Controller

    实现的逻辑包括:

    1. 提交数据的绑定:通过Spring MVC可以直接在Controller的方法或提交路径中绑定参数。
      参数可以绑定到PO中。

    2. 调用Repository的实现类,根据PO构造模型(Model) 或 根据ID加载模型。
      Repository调用IQueryDao(专门负责查询)来实现查询功能,查询PO。

    3. 调用Model的方法实现相关业务。

    4. 调用Repository的其它方法获得其它视图所需数据。

    5. 将所有数据设置到Spring MVC的ModelAndView中,返回到指定的视图中。



可通过扫描左侧二维码阅读本文。本站文章均为颜超敏原创,欢迎转载,请注明出处即可,转载可通过下面的社会化工具快速完成。

分享到:


为您推荐这些文章,如果感兴趣,请继续阅读吧:

C6 架构系列——MVC模式和领域驱动设计(DDD)的结合

C6软件架构,领域驱动设计,DDD,MVC模式

本文阐述了在C6软件架构中对于领域驱动设计、MVC模式的设计思想体现;以及是怎样将两者整合起来。

颜超敏,唯心六艺,Craft6.cn,电子商务博客,电子商务研发,电商研发,电子商务研究,电商研究,电子商务专家,电商专家,电子商务知识,电商知识,电子商务教程,电商教程,电子商务模式,电子商务平台,电子商务商业模式,电子商务数据库设计,电商数据库设计,电子商务系统分析,Java架构设计,Java软件架构,B2C,O2O,o2o模式,o2o电子商务,o2o电子商务平台,中国电子商务,电子商务平台建设方案
粤ICP备14060523号 Copyright @2014 -唯心六艺软件