首页 > 其他分享 >COLA架构初始化DDD项目

COLA架构初始化DDD项目

时间:2024-06-23 11:09:24浏览次数:33  
标签:xml 初始化 java demo xxc cola DDD com COLA

创建项目

  • 使用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":因为是全局设置,无法按领域划分

参考文章

标签:xml,初始化,java,demo,xxc,cola,DDD,com,COLA
From: https://www.cnblogs.com/XuXiaoCong/p/18263173

相关文章

  • AWS ec-2基于SSH连接以及初始化指南
    概述首先我们需要先了解一下ssh的连接原理。ssh大概就是,你的本地计算机生成了一对密钥,一个叫做私钥,一个叫做公钥。然后你把你的公钥上传到远端服务器其中一个user下的.ssh文件夹中。每次ssh连接时,服务器就会看自己的公钥和你计算机的私钥能不能对的上,对的上就可以连接。而刚创......
  • def __init__(self,parameterlist)初始化方法和def __functionName__(self,parameterl
    问题描述:def__init__(self,parameterlist)初始化方法和def__functionName__(self,parameterlist)实例方法,其中functionName是具体方法的名字,比如表示奔跑、或者狗叫的方法。对于上面这两种方法有什么区别?问题解答:在Python类中,__init__方法和其他实例方法(如__functionName_......
  • Unity初始位置初始化设置
    一、Transform面板介绍参数说明:        Position:位置;        Rotation:角度;        Scale:   比例。二、在Transform面板填写参数,如图所示:三、编写代码转换物体位置、角度、比例   1、位置转换:代码说明:        将目前游戏......
  • c语音实现单链表初始化的四种方式
    typedefstructmyLink{ intdata; structmyLink*next;}myLink,*myLLink;1、对于上面的简单结构,用函数赋值需要传递引用,需要用到指针的指针。对指针使用不是很清楚的童鞋很是头痛。voidinitlink(myLink**head){ *head=(myLink*)malloc(sizeof(myLink)); if(......
  • 【重写SpringFramework】第一章beans模块:Bean的初始化(chapter 1-8)
    1.前言前边我们介绍了创建实例和填充对象的流程,这是整个创建流程最重要的工作。有时候用户需要对Bean进行自定义的操作,这一过程称为初始化。此外,还有一些比较特殊的对象,本身管理着一定的资源,当对象销毁时需要释放这些资源,因此我们还需要相应的销毁操作。初始化和销毁操作......
  • 2、k8s-集群环境的搭建-docker安装部署-k8s组件(kubelet)安装部署-集群初始化-fannel网
    kubernetes集群分为两类:·一主多从:一台master节点和多台node节点、搭建简单、但是有单机故障的风险、适合用于测试环境·多主多从:多台master节点和多台node节点、搭建麻烦、安全性高、适用于生产环境 ===================================一主多从搭建=============......
  • Java数组 详解(初始化 格式 索引 地址值 遍历 …)
    数组什么是数组?数组指的是一种容器可以用来存储同种数据类型的多个值小结:数组指的是一种容器可以用来存储同种数据类型的多个值//数组容器在存储数据的时候需要结合隐式转换考虑//例如int类型的数组容器( byte short int )//例如double类型的数组容器......
  • DDD落地 - 实现一个简单的API
    1.前言去年看了这个系列产品代码都给你看了,可别再说不会DDD的文章,对DDD了解得深了一些,结果长时间不用,全给忘光了。最近又捡起来看了看,然后实操了一下,做了个小小的demo,加深一下印象,下次哪个项目可能就能用上。另外,这个demo没有做领域事件,回头再加上。代码地址:https://github.......
  • Spring初始化之循环依赖
    InjectionMetadata.injectresolveFieldValue解析去解析对象的属性时会自动去解析该属性是否是Bean依赖对象DefaultListableBeanFactory.doResolveDependency会去调用DependencyDescriptor.resolveCandidate方法而DependencyDescriptor.resolveCandidate方法就是回去调用B......
  • Spring中Bean的初始化创建AbastractApplicationContext.FinishBeanFactoryInitializat
    AbastractApplicationContext.FinishBeanFactoryInitialization模版调用子类DefaultListableBeanFacotry.preInstantiateSingletons通过循环子类DefaultListableBeanFactory中收集到的所有beanDefinitionNames,对满足条件的Bean进行初始化,getBean操作会调用父类AbstractBean......