一个java系统的包结构分包方式从大的层面上讲无非就两种:
- 先分层再分模块
- 先分模块再分层
##1.先分层再分模块 何为先分层再分模块,即先按三层结构(数据层dao,服务层service,控制层controller)划分,然后在每层底下再构建不同的业务模块; 如:
com.jackyli.demo1.dao
com.jackyli.demo1.dao.cms
com.jackyli.demo1.dao.group
com.jackyli.demo1.service.cms
com.jackyli.demo1.service.group
com.jackyli.demo1.controller.cms
com.jackyli.demo1.controller.group
com.jackyli.demo1.entity.cms
com.jackyli.demo1.entity.group
##2.先分模块再分层 何为先分模块再分层,即先按模块划分,然后在每个模块底下再划分三层结构(数据层dao,服务层service,控制层controller) 如:
com.jackyli.demo1.cms.dao
com.jackyli.demo1.cms.service
com.jackyli.demo1.cms.controller
com.jackyli.demo1.cms.entity
com.jackyli.demo1.group.dao
com.jackyli.demo1.group.service
com.jackyli.demo1.group.controller
com.jackyli.demo1group.entity
##3.两者的差别及如何选用 先分层再分业务模块,个人认为这种方式的好处就是系统分层清晰,缺点就是难以从项目中单独移植出某个模块到另一个项目。 先分模块再分层,其好处就是方便从项目中移植某个模块到另一个项目,缺点刚好就是前者的优点。
如何选用? 两种分层模式,都有被使用,不能简单使用哪一种就是好的,个人比较喜欢,具体还是看项目的需要,记得在j2ee的早期大部分工程师更偏向喜欢先分层再分模块,而现在则是大部分更喜欢先分模块再分层。
那是不是使用的先分模块再分层就一定能方便移植出项目中模块到另一个项目呢?其实不然。 能不能方便 移植一个模块到另一个项目还需要看整体项目模块的划分,因为有些模块是相互耦合的,只有特定的独立业务模块才具有这个特性的。下面提供一种先分模块再分层的一种较好的实践供读者参考。
##4.较好的分包实践参考 把一个项目划分出三个业务模块
- 公共模块(com.jackyli.demo1.common) 公共模块用于存放与项目关联性较强的相关功能
- 核心模块(com.jackyli.demo1.core) 核心模块用于存放与系统框架关联性较强的相关功能
- 独立的业务模块(com.jackyli.demo1.modules) 独立业务模块,用于存放各种独立的业务功能
示例:
com.jackyli.demo1.common
com.jackyli.demo1.common.manage.web
com.jackyli.demo1.common.web
com.jackyli.demo1.core
com.jackyli.demo1.core.annotation
com.jackyli.demo1.core.dao
com.jackyli.demo1.core.dto
com.jackyli.demo1.core.entity
com.jackyli.demo1.core.filter
com.jackyli.demo1.core.interceptor
com.jackyli.demo1.core.service
com.jackyli.demo1.core.utils
com.jackyli.demo1.core.web
com.jackyli.demo1.modules
com.jackyli.demo1.modules.cms
com.jackyli.demo1.modules.cms.dao
com.jackyli.demo1.modules.cms.entity
com.jackyli.demo1.modules.cms.service
com.jackyli.demo1.modules.cms.web
com.jackyli.demo1.modules.sys
com.jackyli.demo1.modules.sys.dao
com.jackyli.demo1.modules.sys.entity
com.jackyli.demo1.modules.sys.service
com.jackyli.demo1.modules.sys.web
com.jackyli.demo1.modules.weibo
com.jackyli.demo1.modules.weibo.dao
com.jackyli.demo1.modules.weibo.entity
com.jackyli.demo1.modules.weibo.service
com.jackyli.demo1.modules.weibo.web
com.jackyli.demo1.modules.group
com.jackyli.demo1.modules.group.dao
com.jackyli.demo1.modules.group.entity
com.jackyli.demo1.modules.group.service
com.jackyli.demo1.modules.group.web