一、基本的划分方式
按照功能模块划分;
按照业务模块划分;
按照maven项目分模块划分;
二、各个划分方式的适用情况
模块划分,还是层级划分,要考虑一些客观情况,如下: 

1、如果涉及大型项目团队协作开发,建议按业务模块划分

因为业务模块之间的耦合性相对于层级的耦合性要低,这样程序员在开发模块时,基本上要开发action层,service层,dao层和model层(其中action处理请求的接收和页面的跳转,service负责业务逻辑处理,dao层负责数据持久化处理,model放置的是实体类,数据类等);
这样开发的接触面比较全,而且基本上不需要与其它模块进行交互,减少沟通交流时间,能提高开发效率。如果按照层级划分,那么多人开发时,会存在action依赖service,而service由别人开发,会涉及到交流、沟通(如:action需要的业务方法,需要先告诉service开发人员等等若干情况);
当然这样就涉及到部分代码重复的情况,那么公共服务接口应该只是保留一份,放在base包里面。比如a,b模块有相同的实体类,可提取到base包中,方便其他功能模块共用,比如一些父类也将抽取放置到base中,这样的划分对于每个功能模块的修改都可以做到独立,方便团队的开发,每个开发人员只需要针对自己的功能模块进行修改。对于以后增加功能模块也比较方便。也就是说在功能模块之外,应该还有公共基础模块,那些filter和util等公共部分就放在这里;
还要看看未来的部署方式。如果是准备模块独立部署,则模块为大。绝大部分目前都是模块为大,再分层。这样也符合分而治之的思路。

2、如果独立开发,模块单一,只要结构清晰,后期维护方便,怎么划分都可以,即可以按照功能模块划分

(1)首先该方法适合小型,模块单一的项目,开发效率高,适用于对类的抽取与重用,但是不适合大型项目对模块的抽取,否者在一个项目中有非常多的package,不易对项目进行管理和维护;
(2)一个架构的雏形:先按照各个层来区分 就是典型的MVC 三层


先创建好:
controller          service          model 

然后在创建你需要的工具类:common               filter            interceptor 

最后根据你的模块 去扩充 
controller.XXX功能 
service.XXX功能 
model 可以把model 统一

3、以maven为架构的拆分方法 
(1)此方法对第一种方法作了改善,但不利于项目的维护和管理。此方法就是建立三个maven工程项目,将每个项目测试,编译,打包到maven库中,当依赖方需要依赖该模块时,该模块对应的项目在maven仓库中的坐标配置在依赖放的pom.xml中,这样虽然不能彻底解决依赖问题,但是可以极大程度的降低依赖。
(2)一般情况下,稍微大点的工程,需要把模块进行拆分子工程,就是另外再生成一个模块,然后按照功能模块划分的方式,工程之间进行依赖 若是不想划分子模块工程的话,按照业务模块划分的方式稍微更加合理点。

总结:这个都不一定,主要是具体需求情况而定,而且看当初搭建架构的时候进行约定以及后期部署的情况等等多方面考虑。

关于工程项目的目录划分的问题总结相关推荐

  1. 解决linux系统下因分区目录划分过小,导致tomcat使用系统临时文件夹(/tmp)没有足够空间而报错的问题

    1. 故障现象. B/S应用进行文件上传后,系统反馈:没有足够的磁盘空间(No enough space available). 2. 故障分析 检查文件占用情况如下: [root@Qa2 /]# d ...

  2. vuex 配置使用解析 mutations响应式规则 Vue.delete/set 目录划分

    文章目录 用处 解析 结构 单一状态树 state getters使用 mutations mutations 提交风格 mutations 响应规则 mutations 常量类型 名称使用常量 mu ...

  3. vue项目划分目录结构

    1.本地项目文件除了用get clone方法以外还可以用到更简单的命令进行关联 git remote add origin git仓库项目的地址 git push -u ortgin maste 通过 ...

  4. web网站工程项目前期需求分析与规划怎么写?

    在当下,判断一份网站工程项目文档是否优秀,项目目录是最直接的体现,同时,工程说明.需求分析和项目规划各版块的内容都缺一不可.工欲善其事必先利其器,前期准备得越充分,后期就会越顺利. 本期,和知了姐一起 ...

  5. 58 第一个工程项目(Celery)

    上节的第一个Celery程序非常简单,实际的项目开发应该是模块化的,程序的功能分散在多个文件中,Celery也不例外.下面扩展第一个Celery程序. 新建myCeleryProj目录中新建__ini ...

  6. 【物联网】OpenWrt OpenWRT的源码下载及目录结构

    OpenWRT的源码下载及目录结构 OpenWrt的源代码管理默认用的是SVN下载: svn co svn://svn.openwrt.org/openwrt/trunk/ . 还可以用Git下载: ...

  7. [vue] 从0到1自己构架一个vue项目,说说有哪些步骤、哪些重要插件、目录结构你会怎么组织

    [vue] 从0到1自己构架一个vue项目,说说有哪些步骤.哪些重要插件.目录结构你会怎么组织 1 项目类型 前端的项目目前来看主要分为小程序开发,H5页面开发.PC官网.后台管理系统开发.Nativ ...

  8. qt建立c++工程导入项目_工程项目经理A、B、C、D四个等级的区别,你知道吗?

    一.建设工程项目经理的岗位职业资格等级 1.建设工程项目经理的岗位职业资格等级划分 项目经理岗位职业资格共分为A.B.C.D四个等级: A级为建设工程总承包项目经理: B级为大型建设工程项目经理: C ...

  9. php 无限子站cms,PHP整理CMS无限层级目录(毗邻目录模式)

    CMS中的分类往往是可以无限划分子目录的,存储数据的过程比较容易实现,但是取目录层级的方式却比较难搞. 常用的目录划分模式有毗邻目录模式和预排序遍历树(左右值无限分类法).这里只讨论前一种模式的目录获 ...

最新文章

  1. Vue.js 由 1 到 2 的旅程 - (1)
  2. 你真的会读datasheet吗?
  3. WildFly管理控制台已更新–请求反馈
  4. 云服务器,价格其实不便宜,但为什么还要用呢
  5. 基于特征选择的局部敏感哈希位选择算法
  6. python调用sklearn中朴素贝叶斯踩坑
  7. winform mysql 客户端_Winform+Mysql登录
  8. cesium cesium is not defined
  9. 架构整洁之道:优秀设计或多余,有效设计最可取
  10. was如何使用gzip_一文详解前端Node原生模块zlib,开启gzip压缩让页面响应速度更快...
  11. potainer 日志_分享10个优秀的日志分析工具
  12. Linux各个发行版镜像下载
  13. PostGIS空间数据库SRID背景知识 - 地理坐标系(球面坐标系)和投影坐标系(平面坐标系)...
  14. Java常见面试题含答案(第一期)
  15. 红米手机4A超简单刷入开发版获取ROOT超级权限的教程
  16. 【网络游戏植入案例】
  17. GPU Profiling
  18. JS中生成与解析JSON
  19. jQuery源码分析之实例find和filter方法的区别七问
  20. python:实现DBSCAN聚类算法(附完整源码)

热门文章

  1. crontab 每天凌晨8点_关于定时执行任务:Crontab的20个例子
  2. 【转载】新浪微博数据挖掘方案
  3. 探索VGG网络与LeNet网络对精度的影响
  4. Apache POI 读取 Word 表格数据(doc 和 docx 后缀)
  5. Centos 下Docker容器安装vim
  6. Windows服务器基础知识_01
  7. 使用VS2019生成C#项目的exe文件和setup安装包(使用VS2019社区版)
  8. 观看理想国的day2
  9. 如何在 Swift 中使用 CommonCrypto 类进行加密(I)
  10. 抖音seo优化排名搜索算法规则,关键词下拉框搜索栏标签流量技术代码分享