C6 架构系列——架构设计思想和分层

2014-08-21 16:02:54

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

一、概述

    本文是C6框架系列的第一篇。C6是Craft6的简称,C6 软件架构是笔者自行设计的Java Web开发框架。    

    本框架采用Spring+SpringMVC+MyBatis+LigerUI+Freemarker+ActiveMQ等开源技术进行开发。

并基于Maven进行项目管理和配置,将整个项目划分为多个Maven子模块,可以分别源码管理、开发和维护,利于理清

系统模块的耦合和依赖,避免出现传统的非Maven开发方式时容易产生的项目内部互相依赖,深度耦合的情况。


    整个项目的分层主要基于DDD(领域驱动设计)思想进行分层,而非传统的事务脚本(Transaction Script)的分层形式。

领域对象会更加有效的反映业务,避免了设计和编程脱节。

    代码在框架的引导和约束下,会更容易符合面向对象的设计思想,职责分明,容易维护。

    下面将通过C6软件架构结构图来阐述架构是如何进行分层,其中使用了BlogPosts(博客帖子)作为示例:

二、架构分层

C6软件架构结构图(Craft6.cn 颜超敏).jpg

C6 架构系列——架构设计思想和分层

 整个架构分为6个层次,下面逐一说明:

  • 视图层 View

    我选择了Freemarker作为前端页面技术。考虑的是Freemaker实现了更严格的MVC分离、性能比JSP好,宏很方便。

    Web UI 采用了LigerUI,这是一款国产UI框架,开源,功能齐全。


  • 控制层 Controller

    采用了Spring MVC技术,BlogPostsController是具体业务的控制层类,上面设计了三个抽象类,是为了让各自负责的
    功能更清晰,方便重用和维护。

    # GenericController 提供了和视图无关的基础方法。

    # LigerUIController 基于LigerUI的数据要求做了一些方法封装。

    # AdminController 专门供后台功能使用的控制层抽象类,提供了常规的功能支持和数据封装、转换等处理方法。

    # BlogPostsController 通过代码生成工具,基于c6_bl_posts表生成,初始就包含了CRUD方法。


  • 领域层 Domain

    这是本框架的重点,也是和事务脚本分层方式的区别。

    这层分为biz和repository两个包:

    blogPosts代码目录截图.jpg

    # biz 放置领域对象,按对象名称直接命名类,不需要加前缀和后缀。

      领域对象只在Controller中构建和调用,调用其方法来完成业务。比如

      blogPosts.save();

      blogPosts.saveHistory();

      blogPosts.updateTop(); 

      等等,由于领域对象里面包含业务数据(BlogPostsPo),所以方法基本不需要再传入参数。

      领域对象和实际业务对象是一一对应的,而不是和数据表一一对应的。比如订单、购物车、产品等。

      往往是多张表构成一个聚合,形成一个领域对象。

      比如:blogPosts.save(); 并不是简单的对BlogPostsPo进行保存,还做了本身数据的预处理、

      帖子历史保存、帖子统计冗余的更新、帖子目录的统计冗余更新、帖子内容保存到大对象表等处理。

      如下代码截图:

      blogPosts.save代码截图.jpg

    # repository 领域对象的仓库类。用于新建或装载单个领域对象,或查询业务数据(PO)集合。

      主要供Controller调用。


  • 数据操作层 Dao

    分为持久Dao和查询Dao两种,使用接口和实现方式设计。

    # 持久Dao:如BlogPostsDao。提供会对数据产生改动的操作,如新增、更新和删除。

    # 查询Dao:如BlogPostsQueryDao。只提供查询操作,所有会修改数据的方法不得放在此类中。


  • 业务数据层 PO

    继承Tbl类,初始生成时,是空白的。可以根据业务需要而添加成员变量和方法。

    通过此类的类路径作为MyBatis.map.xml文件的命名空间进行定位。


  • 表映射层 Tbl

    和数据表的字段一一对应。

    如果修改了数据表,重新执行一次代码生成脚本生成一次该映射文件即可。


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

分享到:


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

C6 架构系列——架构设计思想和分层

C6软件架构,DDD,领域驱动设计,开发框架,开发架构,软件架构,四层架构,Java架构,Java Web架构,轻量级架构,多层架构,MVC,框架设计,架构设计,平台软件架构

      本文是C6框架系列的第一篇。C6是Craft6的简称,是笔者自行设计的Java Web开发框架,采用Spring+SpringMVC+MyBatis+LigerUI+Freemarker+ActiveMQ等开源技术进行开发,并基于Maven进行源项目管理,将整个项目划分为多个Maven子模块,可以分别开发和维护。      整个项目的分层主要基于DDD(领域驱动设计)思想进行分层,而非传统的事务脚本(Transaction Script)的分层形式。领域对象更直接反映业务,避免了设计和编程脱节,代码在框架的引导和约束下,会更容易符合面向对象的设计思想,职责分明,容易维护。

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