mirror of
https://github.com/chatopera/cosin.git
synced 2025-08-01 16:38:02 +08:00
6.3 KiB
6.3 KiB
后端技术栈
- Java21
- Spring Boot 3
- Spring Cloud两种方案,采纳方案一
- 方案一:Spring Cloud,docker-compose方案
- 注册中心 Nacos
- 声明式服务调用 OpenFeign
- 负载均衡 Ribbon/LoadBanlancer 待定
- 配置中心 Nacos
- 服务容错 Sentinel
- 链路追踪 Skywalking
- 方案二:Spring Cloud Kubernetes,kubernetes方案
- 注册中心 Kubernetes注册中心
- 声明式服务调用 OpenFeign/Square 待定
- 负载均衡 Kubernetes负载均衡/Ribbon/LoadBanlancer 待定
- 配置中心 Kubernetes配置中心
- 服务容错 Sentinel
- 链路追踪 Skywalking
- 方案一:Spring Cloud,docker-compose方案
- Spring Security + Oauth2.0
- MyBatis-Flex
- Webflux、 Tomcat
- Jackson,不使用Fastjson
- redisson
- mysql 8.0
- HikariCP,不使用Druid
- Smart-doc,不使用Swagger
- RabbitMQ
- Seata
- jakarta.validation.Valid + org.springframework.validation.annotation.Validated
各服务使用的端口
cskefu-web-gateway: 8080
cskefu-manager-service: 8081
cskefu-auth-service: 8082
cskefu-plugin-service: 8083
cskefu-channel-wechat-service: 8084
cskefu-websocket-service: 10000
模块及服务划分约定
统一的、简单的、一致的风格更有利于代码的维护,在模块及服务划分和模块及服务命名上遵守以下约定。如不能请及时在开发者群反馈。
所有-service结尾代表一个微服务,-gateway结尾代表一个聚合网关,-domain结尾代表一个需要和其他服务或其他业务共用的实体类。
contact-backend
│
├─cskefu-assistant-module 此目录下都是辅助模块(如工具类),不包含任何微服务,模块数量依据需要添加
│ │
│ ├─cskefu-assistant-base 基础辅助模块
│ │
│ └─cskefu-assistant-mvc mvc相关辅助模块
│
├─cskefu-auth 认证和鉴权,不要随意添加微服务
│ │
│ ├─cskefu-auth-domain
│ │
│ └─cskefu-auth-service
│
├─cskefu-channel 渠道接入,不同渠道用不同的,不要随意添加微服务
│ │
│ ├─cskefu-channel-service xxx渠道微服务,目录以cskefu-channel-开头
│ │
│ ├─cskefu-channel-wechat-domain 微信渠道
│ │
│ ├─cskefu-channel-wechat 微信渠道业务逻辑
│ │
│ ├─cskefu-channel-xxx-domain xxx微信渠道
│ │
│ └─cskefu-channel-xxx xxx渠道业务逻辑
│
├─cskefu-manager 核心控制,如基础配置、时效管理、会话分配,不要随意添加更多服务
│ │
│ ├─cskefu-manager-domain
│ │
│ └─cskefu-manager-service
│
├─cskefu-plugin 插件后端功能,建议尽可能的只使用一个微服务,不同插件放在不同的包中
│ │
│ ├─cskefu-plugin-domain
│ │
│ └─cskefu-plugin-service
│
└─cskefu-websocket
│
├─cskefu-websocket-domain
│
└─cskefu-websocket-service 客户端的WebSocket直接和这个服务连接
依赖、包、和类的约定
统一的、简单的、一致的风格更有利于代码的维护,在依赖、包、和类的划分及命名上遵守以下约定。如不能请及时在开发者群反馈。
依赖的管理
- 所有的依赖统一在cskefu-backend/pom.xml中dependencyManagement标签中管理,groupId为com.cskefu的依赖不需要遵守此约定;
除cskefu-backend/pom.xml的properties标签外,所有pom.xml中不允许写版本号,所有的版本号统一在cskefu-backend/pom.xml的properties标签中声明,groupId为com.cskefu的依赖不需要遵守此约定;
- 尽可能少的引入外部依赖。
因此,所有pom中请加入以下内容
<parent>
<groupId>com.cskefu</groupId>
<artifactId>cskefu-backend</artifactId>
<version>1.0.0-SNAPSHOT</version>
</parent>
如果包中有java代码,其对应的pom请加入以下内容
<dependencyManagement>
<dependencies>
<dependency>
<groupId>com.cskefu</groupId>
<artifactId>cskefu-backend</artifactId>
<version>1.0.0-SNAPSHOT</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
包和类的组织
类的全路径为com.cskefu.www.xxx.yyy.zzz.ooo.java,其中com.cskefu.xxx.yyy.zzz为包名,ooo为类名,即包最多6层,启动类放在com.cskefu下。
src
└─main
├─java
│ └─com
│ └─cskefu
│ ├─CskefuXXXApplication.java 启动类
│ └─sys
│ ├─SysUserController.java
│ ├─SysUser.java 不需要和其他业务公用的实体类,如果需要公用,请放到对应的-domain下
│ ├─SysUserService.java
│ ├─SysUserServiceImpl.java
│ ├─UserMapper.java
│ └─UserMapper.xml
└─resources
└─application.properties 配置文件推荐使用properties,但不强制,后面会考虑扩展使用json格式
不要使用下面这种方式
├─controller
│ ├─SysUserController.java
│ ├─SysRoleController.java
│ └─SysPermissionService.java
└─service
├─SysUserService.java
├─SysRoleService.java
└─SysPermissionService.java
类的命名
- 按照包和类的组织中描述的方式命名,实体类不区分VO、BO、DO、POJO、DTO等,也不要使用这些后缀;
- 枚举类统一以Enum结尾;
- 工具类以Utils结尾,提供private无参构造函数,并在构造函数中抛出异常,参考JacksonUtils,阻止类被实例化;
- 除非必要,不需要定义异常类;
数据库变更
涉及到表结构的变更,或必要的初始化数据,请及时同步到contact-backend/v9.mysql.init.sql中。
其他
统一的、简单的、一致的风格更有利于代码的维护,请遵守以下约定。如不能请及时在开发者群反馈。
- 禁止使用Apache PropertyUtils、Apache BeanUtils等工具类,尽量不要使用Spring BeanUtils、Cglib BeanCopier,建议手写;
- 不要使用xxxMapper.xml文件,使用MyBatis注解代替;
- 不建议使用代码生成器,如果使用了,请删除不需要的代码;