C6 架构系列——Maven多模块划分和结构

2014-08-23 17:57:51

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

一、传统Java Web项目

# 传统Java Web项目 

  这类项目常见组织方式就是在一个项目里面,放置

   src\[java文件]

   resources\[配置文件]

   webapp\[js/jsp/css/jpg/xml等]


  其中src下的java代码,常见包结构如下:

  com.company.core

  com.company.core.controller

  com.company.core.dao

  com.company.core.service

  com.company.user

  com.company.system

  com.company.order

  等。

  虽然看上去,也划分了核心模块(即底层模块)、功能模块等,但随着开发的推进,包之间的代码

就会出现交叉依赖的情况,比如user依赖core、system、order,而order也依赖user包。

  由于所有代码都是在一个项目里面,调用是很容易和随意,如果通过项目管理方式来强制要求依赖

方式,则管理难度很高,需要反复复查代码。所以最后导致整个各个包之间是低内聚高耦合。

  另外,由于所有代码都在一个项目里面,所以随着代码的不断增加,当修改一个类时,也会导致整个

项目重新编译,开发效率低下。


  为了避免出现这些情况,C6软件架构采用了Mavan的多模块划分方式进行管理。C6 架构系列——Maven多模块划分和结构

二、C6的Maven多模块管理

    整个项目结构如下图:

目录结构.jpg

    

    整个项目采用Maven的最佳实践 —— 划分多模块方式来管理。

    规划了三个顶层的项目:

  1. craft6-base-root

    包含多个子模块,每个子模块均是一个独立的Maven项目。

    这个项目提供所有框架底层的支持,以及通用的功能实现。

    下面会详细阐述。

  2. craft6-meta

    准确来说,这只是文件夹。里面放置了项目部署工具 和 代码生成工具。

  3. craft6-platform

    该项目依赖craft6-base-root的若干个子模块,获得架构的底层支持,

    这样就不需要重复配置和开发了。然后在该项目中开发博客、方案模块相关功能。


(图片中的Servers只是部署Tomcat时生成的文件夹,不是开发项目)


三、craft6-base-root项目的Maven Pom.xml依赖设计

    这个项目下面包括多个子模块,每个子模块分别实现专门的功能,保证了高内聚,低耦合的设计要求。

模块之间的依赖大多基于接口和抽象类的方式,通过Maven的dependency依赖配置完成。

    该项目包含三个maven层次,每层有一个pom.xml文件,如下图:

craft6-base-root的pom.xml.jpg

  1. craft6-base-root根目录的pom.xml

    这是项目最顶层的pom文件,声明了该项目包含的模块、所有依赖的第三方jar、

    build和report的插件配置等。在这里声明了版本和范围(scope)。

  2. base-parent的pom.xml

    在这里声明公共的第三方jar默认依赖、内部的jar依赖(比如base-api/base-core/base-db-mybatis等,

    对于base-ou是依赖base-mybatis的)

  3. base-api(或其它子模块)的pom.xml

    继承base-parent/pom.xml,引入该模块需要的jar,由于在root/pom.xml已经声明了版本,

    所以这里就不需要在声明版本和范围了。


四、craft6-platform 平台项目

平台项目是一个独立项目,有自身的pom.xml,但依赖craft6-base-root的base-web模块,

该base-web模块是craft6-base-root最外层的模块,依赖其它所有模块,供web项目使用。

集成了Spring MVC + FreeMarker + Spring Security + ActiveMQ等开源技术。

这样相当于要开发一个web项目时,只需要新建一个项目,然后在maven中依赖base-web模块

即可获得所有底层的支持,无需重新配置和管理第三方的依赖(比如对Spring的依赖)。


craft6-platform的pom.xml截图如下:

platform的pom.xml.jpg

可以看到该项目需要引入的第三方包是很少的,因为大部分的包已经由base-web依赖引用,

并且配置好了。


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

分享到:


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

C6 架构系列——Maven多模块划分和结构

Maven,Maven项目,Maven架构,Maven多模块,Maven多模块划分,Maven依赖,C6软件架构,DDD,领域驱动设计,开发框架,开发架构,软件架构,四层架构,Java架构,Java Web架构,轻量级架构,多层架构,MVC,框架设计,架构设计,平台软件架构

  传统的Java Web项目常见组织方式就是在一个项目里面,放置   src\[java文件]   resources\[配置文件]   webapp\[js/jsp/css/jpg/xml等]   虽然看上去,也划分了核心模块(即底层模块)、功能模块等,但随着开发的推进,包之间的代码就会出现交叉依赖的情况,比如user依赖core、system、order,而order也依赖user包。由于所有代码都是在一个项目里面,调用是很容易和随意,如果通过项目管理方式来强制要求依赖方式,则管理难度很高,需要反复复查代码。所以最后导致整个各个包之间是低内聚高耦合。    另外,由于所有代码都在一个项目里面,所以随着代码的不断增加,当修改一个类时,也会导致整个项目重新编译,开发效率低下。  为了避免出现这些情况,C6软件架构采用了Mavan的多模块划分方式进行管理。

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