美文网首页
COLA架构初始化DDD项目

COLA架构初始化DDD项目

作者: 言午日尧耳总 | 来源:发表于2024-06-22 11:05 被阅读0次

    创建项目

    • 使用COLA脚手架(Maven)创建COLA项目
      • DgroupId: 公司/组织名称
      • DartifactId:项目名称
      • Dversion:版本号
      • Dpackage:包路径
    # 先确认maven正确安装
    mvn --version
    
    # Shell(Linux)
    mvn archetype:generate \
        -DgroupId=com.xxc \
        -DartifactId=cola-springboot-demo \
        -Dversion=0.0.1 \
        -Dpackage=com.xxc.demo \
        -DarchetypeArtifactId=cola-framework-archetype-web \
        -DarchetypeGroupId=com.alibaba.cola \
        -DarchetypeVersion=5.0.0
    
    # CMD(Windows)使用"^"当做换行符
    mvn archetype:generate ^
        -DgroupId=com.xxc ^
        -DartifactId=cola-springboot-demo ^
        -Dversion=0.0.1 ^
        -Dpackage=com.xxc.demo ^
        -DarchetypeArtifactId=cola-framework-archetype-web ^
        -DarchetypeGroupId=com.alibaba.cola ^
        -DarchetypeVersion=5.0.0
    
    # PowerShell(Windows)使用"`"当做换行符,并且参数使用单引号包裹
    mvn archetype:generate `
        -DgroupId='com.xxc' `
        -DartifactId='cola-springboot-demo' `
        -Dversion='0.0.1' `
        -Dpackage='com.xxc.demo' `
        -DarchetypeArtifactId='cola-framework-archetype-web' `
        -DarchetypeGroupId='com.alibaba.cola' `
        -DarchetypeVersion='5.0.0'
    
    

    清理生成代码

    • 清理pom.xml文件(所有模块)
      • 更新Java、SpringBoot依赖的版本
        • java:17
        • SpringBoot: 3.3.0/3.1.12
      • 除了SpringBoot、Cola有关的依赖,其他全部删除
        • 生成代码的依赖版本过于老旧,为了方便先全部删除,后面再自行添加需要的组件
    • 清理代码
      • 删除所有实例代码、单元测试,只保留基础目录
      • java使用"package-info.java"占位
      • 目录使用".gitkeep"文件占位
    cola-springboot-demo
    ├─ .gitignore
    ├─ cola-springboot-demo-adapter
    │   ├─ pom.xml
    │   └─ src
    │       └─ main
    │           └─ java
    │               └─ com
    │                   └─ xxc
    │                       └─ demo
    │                           └─ package-info.java
    ├─ cola-springboot-demo-app
    │   ├─ pom.xml
    │   └─ src
    │       └─ main
    │           └─ java
    │               └─ com
    │                   └─ xxc
    │                       └─ demo
    │                           └─ package-info.java
    ├─ cola-springboot-demo-client
    │   ├─ pom.xml
    │   └─ src
    │       └─ main
    │           └─ java
    │               └─ com
    │                   └─ xxc
    │                       └─ demo
    │                           └─ package-info.java
    ├─ cola-springboot-demo-domain
    │   ├─ pom.xml
    │   └─ src
    │       └─ main
    │           └─ java
    │               └─ com
    │                   └─ xxc
    │                       └─ demo
    │                           └─ domain
    │                               └─ package-info.java
    ├─ cola-springboot-demo-infrastructure
    │   ├─ pom.xml
    │   └─ src
    │       └─ main
    │           ├─ java
    │           │   └─ com
    │           │       └─ xxc
    │           │           └─ demo
    │           │               ├─ config
    │           │               │   └─ package-info.java
    │           │               └─ package-info.java
    │           └─ resources
    │               ├─ logback-spring.xml
    │               └─ mybatis
    │                   └─ .gitkeep
    ├─ pom.xml
    └─ start
        ├─ pom.xml
        └─ src
            └─ main
                ├─ java
                │   └─ com
                │       └─ xxc
                │           └─ demo
                │               └─ Application.java
                └─ resources
                    ├─ application.properties
                    └─ logback-spring.xml
    
    • 验证是否有遗漏
      • 注意"ERROR"级别的错误,可能是没删完整,删除对应文件即可
    mvn clean install
    

    Maven依赖

    版本管理

    • 在根目录的pom.xml中,使用"dependencyManagement"节点进行版本管理
    • 在使用的模块才真正引入依赖

    Mybatis-plus

    • 数据库操作
        <properties>
            <mybatis-plus-starter.version>3.5.6</mybatis-plus-starter.version>
            <mysql-connector.version>8.3.0</mysql-connector.version>
        </properties>
    
        <dependencyManagement>
            <dependencies>
                <dependency>
                    <groupId>com.baomidou</groupId>
                    <artifactId>mybatis-plus-boot-starter</artifactId>
                    <version>${mybatis-plus-starter.version}</version>
                </dependency>
                <dependency>
                    <groupId>com.mysql</groupId>
                    <artifactId>mysql-connector-j</artifactId>
                    <version>${mysql-connector.version}</version>
                    <scope>runtime</scope>
                </dependency>
            </dependencies>
        </dependencyManagement>
    
    • 在SpringBoot3.2/3.3使用mybatis报错
    • 如果怕麻烦,SpringBoot版本改为3.1.X
            <dependency>
                <groupId>com.baomidou</groupId>
                <artifactId>mybatis-plus-boot-starter</artifactId>
                <!--  排除mybatis  -->
                <exclusions>
                    <exclusion>
                        <artifactId>mybatis-spring</artifactId>
                        <groupId>org.mybatis</groupId>
                    </exclusion>
                </exclusions>
            </dependency>
            <!--  自定义mybatis版本  -->
            <dependency>
                <groupId>org.mybatis</groupId>
                <artifactId>mybatis-spring</artifactId>
                <version>3.0.3</version>
            </dependency>
    

    MapStruct

    • 用于对象的映射,主要在infrastructure的convertor使用
    • 由于MapStruct的特殊性,需要修改plugin
        <properties>
            <mapstruct.version>1.5.5.Final</mapstruct.version>
            <mapstruct.binding>0.2.0</mapstruct.binding>
            <projectlombok.version>1.18.32</projectlombok.version>
        </properties>
    
        <dependencyManagement>
            <dependencies>
              
                <dependency>
                    <groupId>org.mapstruct</groupId>
                    <artifactId>mapstruct</artifactId>
                    <version>${mapstruct.version}</version>
                </dependency>
              
            </dependencies>
        </dependencyManagement>
    
        <build>
            <pluginManagement>
                <plugins>
                  
                    <plugin>
                        <artifactId>maven-compiler-plugin</artifactId>
                        <version>3.10.1</version>
                        <configuration>
                            <!-- MapStruct依赖 -->
                            <annotationProcessorPaths>
                                <path>
                                    <groupId>org.mapstruct</groupId>
                                    <artifactId>mapstruct-processor</artifactId>
                                    <version>${mapstruct.version}</version>
                                </path>
                                <path>
                                    <groupId>org.projectlombok</groupId>
                                    <artifactId>lombok</artifactId>
                                    <version>${projectlombok.version}</version>
                                </path>
                                <path>
                                    <groupId>org.projectlombok</groupId>
                                    <artifactId>lombok-mapstruct-binding</artifactId>
                                    <version>${mapstruct.binding}</version>
                                </path>
                            </annotationProcessorPaths>
                        </configuration>
                    </plugin>
    
                </plugins>
            </pluginManagement>
        </build>
    
    

    Swagger

    • 使用Swagger显示文档
    • spring-boot-starter-validation是Spring
        <properties>
            <springdoc.version>2.5.0</springdoc.version>
        </properties>
    
        <dependencyManagement>
            <dependencies>
              
                <dependency>
                    <groupId>org.springdoc</groupId>
                    <artifactId>springdoc-openapi-starter-webmvc-ui</artifactId>
                    <version>${springdoc.version}</version>
                </dependency>
              
            </dependencies>
        </dependencyManagement>
    

    打包配置

    • start层,pom.xml增加打包插件
        <build>
            <finalName>${project.artifactId}</finalName>
            <plugins>
                <plugin>
                    <groupId>org.springframework.boot</groupId>
                    <artifactId>spring-boot-maven-plugin</artifactId>
                    <executions>
                        <execution>
                            <id>repackage</id>
                            <goals>
                                <goal>repackage</goal>
                            </goals>
                        </execution>
                    </executions>
                </plugin>
            </plugins>
        </build>
    
    • 配置后可打包jar文件,使用java命令运行
    # 打包jar文件
    mvn clean package
    
    # 运行jar文件
    java -jar start/target/start.jar
    

    填充代码

    • 代码下载地址:https://gitee.com/XuXiaoCong/cola-springboot-demo
    • 代码中,大部分先使用领域分包,再使用功能分包
      • 领域分包指,用户(User)、订单(Order)、Product(商品)等大方向区分
      • 功能分包指,如下结构图中的"executor","consumer","scheduler"等功能
      • 不使用领域分包的例外
        • Adapter层:控制器包含多个接口,本身按领域区分了
        • Infrastructure层中的"config":因为是全局设置,无法按领域划分
    image.png

    参考文章

    相关文章

      网友评论

          本文标题:COLA架构初始化DDD项目

          本文链接:https://www.haomeiwen.com/subject/bbwkcjtx.html