一. 背景介绍

当前,我们使用 Spring Boot + Mybatis + Maven 技术栈,按照微服务设计的要求(小而自治)开发 Java 应用,不推荐和使用 Module 实现项目分层。

二. 规范意义

规范 Java 项目的目录结构是 Java 工程化的基础,也是打通 DevOps 流程的起点。合理的目录结构能减轻设计负担,提升项目的模块化程度与可维护性,促进团队协作,降低沟通成本,确保研发、测试、编译、部署和交付等环节的标准化与一致性。实际制定时,应结合技术栈、项目管理工具以及组织内部习惯(习惯取代配置)来制定合理的目录结构。这一规范将直接影响开发体验、维护效率、标准化实施和交付质量。

三. 思考与设计点

3.1 数据实体目录规划与使用建议

数据实体在项目中承担载体和传输的作用,是项目重要组成部分,其目录规范与使用建议可参考:Java 三层架构项目中数据实体目录规划与使用建议

3.2 controller、service 和 dao 子包该如何划分?

相比业务需求的多样性,数据源相对较为单一和固定,建议 dao 中子包按数据源划分,controller、service 子包或业务类可以考虑按业务划分,以适应业务多样性。

3.3 自动和人工生成的同类实体类如何存放?

自动生成的代码不应被人为改动,否则后续可能存在不一致的问题。建议将自动生成和人为创建的同类代码分别保存在不同的目录,目录名分别为:generator 和 custom。例如,mybatis-generator 生成的 PO 实体,建议保存在 po.db.{dbname}.generator 目录下;人为创建的与该 db 相关的 PO,保存在 po.db.{dbname}.custom 目录下,mapper.xml 和 Mapper 类同理。

3.4 配置与工具类如何存放?

(1)配置类,建议按数据源或数据类型,统一存放在 config 包(目录)下,如 enums、properties(项目配置信息)、kafka、redis、retrofit 等,常量类 Constants 建议也保存在该包下。

(2)工具类,建议存放在 util 包下,类名以 Util 结尾。

四. 推荐项目结构及命名规范

src/main/java
└── com
└── example
|── config
│ │── enums
│ │── properties
│ │── kafka
│ │── redis
│ │── retrofit
│ └── Constants.java
├── model
│ │── dto
│ │ ├── in
│ │ │ └── UserDTOIn.java
│ │ │── out
│ │ │ └── UserDTOOut.java
│ ├── bo
│ │ └── UserBO.java
│ ├── po
│ │ ├── db
│ │ │ ├── {dbname}
│ │ │ │ ├── generator
│ │ │ │ │ └── UserPO.java
│ │ │ │ ├── custom
│ │ │ │ │ └── User{XXX}PO.java
│ │ ├── http
│ │ ├── redis
│ │ ├── kafka
│ ├── converter
│ │ ├── dto
│ │ │ ├── in
│ │ │ │ └── UserDTOInConverter.java
│ │ │ │── out
│ │ │ │ └── UserDTOOutConverter.java
│ │ ├── bo
│ │ │ └── UserBOConverter.java
│ │ │── po
│ │ │ └── UserPOConverter.java
├── controller
├── service
│ ├── bussinessA
│ ├── bussinessB
├── dao
│ ├── mapper
│ │ ├── {dbname}
│ │ │ ├── generator
│ │ │ │ └── UserMapper.java
│ │ │ ├── custom
│ │ │ │ └── UserCustomMapper.java
│ ├── http
│ ├── redis
│ ├── kafka
├── util
│ └── ListUtil.java
└── Application.java
└── resources
│ ├── mapper
│ │ ├── {dbname}
│ │ │ ├── generator
│ │ │ │ └── UserMapper.xml
│ │ │ ├── custom
│ │ │ │ └── UserCustomMapper.xml
│ │── application.yml
│ │── application-{env}.yml
└── test

Java REST API 三层架构项目目录规划与使用建议的更多相关文章

  1. MVC设计模式与Java Web经典三层架构

    MVC设计模式 MVC的概念 首先我们需要知道MVC模式并不是javaweb项目中独有的,MVC是一种软件工程中的一种软件架构模式,把软件系统分为三个基本部分:模型(Model).视图(View)和控 ...

  2. 简单使用Idea创建三层架构项目和数据库连接(使用原生ajax进行访问+ajax)

    Idea创建三层架构项目 首先创建一个Web项目model 创建Web完成后进行创建entity.dao.service 特别注意 根据上面的步骤进行创建即可得到 创建完成 我们首先创建数据库 cre ...

  3. ThinkPHP5项目目录规划实践

    ThinkPHP5安装后(或者下载后的压缩文件解压后)可以看到下面的目录结构: tp5├─application     应用目录 ├─extend          扩展类库目录(可定义) ├─pu ...

  4. Java MVC和三层架构

    一.设计模式 Model 1 和Model 2 Model 1 前面学习了Servlet和Jsp,对这两个有个大概的认识,Servlet就是为了解决静态页面的问题,能够实现动态的页面,使维护,开发更加 ...

  5. .NET 三层架构的简单规划

    今天心血来潮简单看了下petshop4.0的源代码,他就是用三层架构来实现的.现在简单的做下总结. 首先我们先看下petshop的三层架构. 1 WEB 表示层 2 Model 业务实体 3 BLL ...

  6. ASP.NET三层架构项目创建流程

    1.进入VS2010,新建项目—>Visual C#—>Web—>ASP.NET空Web应用程序,如图所示: 2.在解决方案处右击—>新建项目—>Windows—> ...

  7. Java学习笔记——三层架构

    Layer: UI层: user interface 用户接口层 Biz层:   service business login layer 业务逻辑层 DAO层:   Date Access Obje ...

  8. ATM购物车项目 三层架构

    目录 项目开发流程 项目需求 三层架构 (重点) 实际案例 展示层 核心逻辑层 数据处理层 ATM项目 项目开发流程 # 1.项目需求分析 产品经理(客户) 架构师 开发经理 1.架构师 开发经理提前 ...

  9. MVC项目实践,在三层架构下实现SportsStore-09,ASP.NET MVC调用ASP.NET Web API的查询服务

    ASP.NET Web API和WCF都体现了REST软件架构风格.在REST中,把一切数据视为资源,所以也是一种面向资源的架构风格.所有的资源都可以通过URI来唯一标识,通过对资源的HTTP操作(G ...

  10. Java Web 三层架构详解

    java 三层架构ssh 一个spring2.5+hibernate3.2+struts2.0组合框架,使用spring的 IoC来管理应用的 所有bean,包括struts2的 action,充分发 ...

随机推荐

  1. Windows 10文件夹中的一些高级搜索技巧

    搜索文件中的内容 默认的win10搜索是只针对文件名搜索的,但有的时候我们需要搜索文件中包含特定内容的文件,这时候需要设置一下搜索的选项打开搜索文件名和内容选项: 打开文件夹–查看 选择选项 打开文件 ...

  2. nodejs 原生服务起一个httpServer

    离开express.koa.egg 你还会利用原生node写后端的http服务吗? 定义路由和返回 这里有一个例子,原生node起http服务. 返回了静态页面文件.字符串拼接的html,json对象 ...

  3. webpack专题

    一.编译 编译命令 直接cmd下执行webpack 即可,但是配置成为node项目,就可以使用npm的快捷脚本了, 那么我再提供一个在npm下好用的script命令(只支持windows) " ...

  4. QN 笔试反思 HL笔试 反思

    先写 HL的笔试题目 int a[4]; a++;是错的  因为  a代表了一个常量的地址. 百度解释: 对于一维数组,数组名代表的是数组的首地址,而且数组名是一个常量地址,也就是说数组名的地址是不可 ...

  5. java 使用反射 实现指针

    简介 java 使用反射 实现指针,但不推荐使用,推荐使用 interface code package com; import java.lang.reflect.*; public class M ...

  6. MySQL 更新字段的值为当前最大值加1

    摘要:在MySQL中,我们在执行update或者insert语句时,可以借助select语句更新一个字段,使其值更新为该字段的最大值加1.   在<MySQL中自增长序列(@i:=@i+1)的用 ...

  7. 通过AppLink把拼多多热门榜单商品同步至小红书

    上篇说到AppLink当中定时调度方式如何配置,这次来演示一下,如何把热门榜单信息同步至小红书 1.拉取一个定时器作为触发动作,通过配置定时器调度时间将定时策略配置为每天执行一次 2.触发动作完成后通 ...

  8. SciTech-Mathmatics-Probability+Statistics-I-Statistics:Quantifing Uncertainty + Population:Parameters and Sample:Statistics 总体和样本

    https://zhuanlan.zhihu.com/p/674010971?utm_id=0 I Population and Sample 总体和样本 统计学提供了一种量化不确定性的方法,使我们能 ...

  9. Timeseries Prediction Demo base on LSTM

    示例代码 import json import time import datetime import requests as req import numpy as np import pandas ...

  10. mysql数据库优化--九五小庞