1
0
mirror of https://github.com/chatopera/cosin.git synced 2025-08-01 16:38:02 +08:00
cosin/cskefu-backend
lecjy 29d7756959 #1001
Signed-off-by: lecjy <5655726966@qq.com>
2024-01-28 10:34:21 +08:00
..
2024-01-28 10:34:21 +08:00
2024-01-28 10:34:21 +08:00
2024-01-28 10:34:21 +08:00

后端技术栈

  • Java21
  • Spring Boot 3
  • Spring Cloud两种方案采纳方案一
    • 方案一Spring Clouddocker-compose方案
      • 注册中心 Nacos
      • 声明式服务调用 OpenFeign
      • 负载均衡 Ribbon/LoadBanlancer 待定
      • 配置中心 Nacos
      • 服务容错 Sentinel
      • 链路追踪 Skywalking
    • 方案二Spring Cloud Kuberneteskubernetes方案
      • 注册中心 Kubernetes注册中心
      • 声明式服务调用 OpenFeign/Square 待定
      • 负载均衡 Kubernetes负载均衡/Ribbon/LoadBanlancer 待定
      • 配置中心 Kubernetes配置中心
      • 服务容错 Sentinel
      • 链路追踪 Skywalking
  • 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注解代替
  • 不建议使用代码生成器,如果使用了,请删除不需要的代码;