Java项目目录结构推荐

java 项目结构

最近难得赋闲,阅读公司内部和开源的比较优秀的项目,对于其中的package命名感触颇深,遂成此文,即为总结,也为备忘;

两种常见目录结构

标准规范的命名,对于阅读和沟通都能起到很正面的促进作用。目前比较常见的目录接口分为两类:一类MVC模式的目录接口(简单项目推荐),另一类是DDD领域设计模式(大型项目推荐);

MVC模式

概述

MVC, 模型(Model)、视图(View)和控制器(Controller); 传统的三层架构,面向过程的javaWeb分层模式,主要分为如下以下三个层次:
1. 数据访问层; 即包含数据库在内的所有数据源的操作部分
2. 业务逻辑层; 对业务数据进行逻辑处理部分
3. 表现层; 与用户交互的部分类似

常见结构

  • controller : 主要是对外的接口
  • service : 核心业务逻辑
  • dao/mapper : 数据库访问层
  • entity: 实体类,字段和数据库保持一致
  • vo: 前端专用类型,避免暴露数据库结构
  • common: 基础工具包和常量package

DDD领域设计模式

  • domain/entity: 领域实体类,和数据库字段保持一致
  • domain/value: 领域值对象,持有自己的业务属性和行为
  • domain/event: 领域事件,领域中产生的一些消息事件,异步提升性能和解掉耦合依赖
  • domain/factory: 领域对象工厂,复杂的领域实体类/值对象工厂类
  • domain/repository: 持久化操作类
  • domain/service: 领域核心逻辑
  • Infrastructure: 基础设施,Infrastructure负责给三层架构提供支持,平台和框架相关的实现层
  • common: 基础工具
  • controller: 对外接口

关键词缩写

  • biz 业务逻辑,核心的业务逻辑
  • dao 数据库操作,仅只是负责数据库操作
  • vo 视图对象,前端交互专用
  • dto 数据传输对象
  • domain: 领域模型,几乎包括了所有的业务逻辑
  • PO: Persistant Object,持久化对象
  • DO:Domain Object,领域对象
  • VO: View Object,视图对象。Controller在返回DTO给视图时,可能还需要包括状态信息—例如操作成功/失败的状态吗、提示文本等—这时就需要在DTO外面再包一层,即View Object

个人实践

  • 以x项目为例,分为两个包,x-start提供接口和和对外交互,x-service核心逻辑; 如果项目十分复杂,可以在x-servvice分拆多个独立的领域包
x-service
├── src
│   ├── main
│   │   ├── java
│   │   │   └── com
│   │   │       └── tech
│   │   │           └── x
│   │   │               ├── common
│   │   │               ├── config
│   │   │               ├── domain
│   │   │               │   ├── event
│   │   │               │   ├── factory
│   │   │               │   ├── model
│   │   │               │   ├── repository
│   │   │               │   └── service
│   │   │               └── infrastructure
│   │   │                   ├── entity
│   │   │                   ├── exception
│   │   │                   ├── repository
│   │   │                   └── util
│   │   └── resources
│   └── test
│       └── java

x-start
├── src
│   ├── main
│   │   ├── java
│   │   │   └── com
│   │   │       └── tech
│   │   │           └── x
│   │   │               ├── controller
│   │   │               ├── dto
│   │   │               └── everyday
│   │   │                   ├── queue
│   │   │                   │   └── delayqueue
│   │   │                   ├── reflect
│   │   │                   ├── sync
│   │   │                   └── vertx
│   │   │                       ├── model
│   │   │                       └── rest
│   │   └── resources
│   │       ├── static
│   │       │   ├── assets
│   │       │   ├── css
│   │       │   └── js
│   │       └── templates

参考文档

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 158,736评论 4 362
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,167评论 1 291
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,442评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,902评论 0 204
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,302评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,573评论 1 216
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,847评论 2 312
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,562评论 0 197
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,260评论 1 241
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,531评论 2 245
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,021评论 1 258
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,367评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,016评论 3 235
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,068评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,827评论 0 194
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,610评论 2 274
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,514评论 2 269

推荐阅读更多精彩内容

  • 1.从传统三层架构与DDD分层架构的编程演变其实是思想的演变。 传统三层架构,即用户界面层UI、业务逻辑层BAL、...
    咖啡电视阅读 7,860评论 0 6
  • Java分层概念(转) 原文地址(也不属于原文吧,这也是别人转载的不知道原作者是谁,如有侵权,请联系,以删除):h...
    小小世界R阅读 1,571评论 0 0
  • 一、生命周期 一个事物一旦出生,就必然会长大,变异,一旦长大,就面临着衰老,接下来就是消亡了,这个过程就称为一个事...
    ZyBlog阅读 2,616评论 1 11
  • 1.概念 PO(persistant object) 持久对象在 O/R 映射的时候出现的概念,如果没有 O/R ...
    胖先森阅读 5,249评论 1 19
  • 一个项目中说系统分为表现层、控制层、逻辑层、DAO层和最终数据库五层架构 表现层就是看到的东西,比如你现在看到的当...
    ZZS_简阅读 1,175评论 0 1