COLA架構(gòu)初始化DDD項目

創(chuàng)建項目

  • 使用COLA腳手架(Maven)創(chuàng)建COLA項目
    • DgroupId: 公司/組織名稱
    • DartifactId:項目名稱
    • Dversion:版本號
    • Dpackage:包路徑
# 先確認(rèn)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)使用"^"當(dāng)做換行符
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)使用"`"當(dāng)做換行符阔墩,并且參數(shù)使用單引號包裹
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有關(guān)的依賴,其他全部刪除
      • 生成代碼的依賴版本過于老舊彩届,為了方便先全部刪除,后面再自行添加需要的組件
  • 清理代碼
    • 刪除所有實(shí)例代碼、單元測試霉翔,只保留基礎(chǔ)目錄
    • 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
  • 驗(yàn)證是否有遺漏
    • 注意"ERROR"級別的錯誤,可能是沒刪完整苞笨,刪除對應(yīng)文件即可
mvn clean install

Maven依賴

版本管理

  • 在根目錄的pom.xml中债朵,使用"dependencyManagement"節(jié)點(diǎn)進(jìn)行版本管理
  • 在使用的模塊才真正引入依賴

Mybatis-plus

  • 數(shù)據(jù)庫操作
    <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命令運(yùn)行
# 打包jar文件
mvn clean package

# 運(yùn)行jar文件
java -jar start/target/start.jar

填充代碼

  • 代碼下載地址:https://gitee.com/XuXiaoCong/cola-springboot-demo
  • 代碼中谚中,大部分先使用領(lǐng)域分包,再使用功能分包
    • 領(lǐng)域分包指寥枝,用戶(User)宪塔、訂單(Order)、Product(商品)等大方向區(qū)分
    • 功能分包指脉顿,如下結(jié)構(gòu)圖中的"executor","consumer","scheduler"等功能
    • 不使用領(lǐng)域分包的例外
      • Adapter層:控制器包含多個接口蝌麸,本身按領(lǐng)域區(qū)分了
      • Infrastructure層中的"config":因?yàn)槭侨衷O(shè)置,無法按領(lǐng)域劃分
image.png

參考文章

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末艾疟,一起剝皮案震驚了整個濱河市来吩,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌蔽莱,老刑警劉巖弟疆,帶你破解...
    沈念sama閱讀 222,104評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異盗冷,居然都是意外死亡怠苔,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,816評論 3 399
  • 文/潘曉璐 我一進(jìn)店門仪糖,熙熙樓的掌柜王于貴愁眉苦臉地迎上來柑司,“玉大人迫肖,你說我怎么就攤上這事≡艹郏” “怎么了蟆湖?”我有些...
    開封第一講書人閱讀 168,697評論 0 360
  • 文/不壞的土叔 我叫張陵,是天一觀的道長玻粪。 經(jīng)常有香客問我隅津,道長,這世上最難降的妖魔是什么劲室? 我笑而不...
    開封第一講書人閱讀 59,836評論 1 298
  • 正文 為了忘掉前任伦仍,我火速辦了婚禮,結(jié)果婚禮上很洋,老公的妹妹穿的比我還像新娘充蓝。我一直安慰自己,他們只是感情好蹲缠,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,851評論 6 397
  • 文/花漫 我一把揭開白布棺克。 她就那樣靜靜地躺著,像睡著了一般线定。 火紅的嫁衣襯著肌膚如雪娜谊。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,441評論 1 310
  • 那天斤讥,我揣著相機(jī)與錄音纱皆,去河邊找鬼。 笑死芭商,一個胖子當(dāng)著我的面吹牛派草,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播铛楣,決...
    沈念sama閱讀 40,992評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼近迁,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了簸州?” 一聲冷哼從身側(cè)響起鉴竭,我...
    開封第一講書人閱讀 39,899評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎岸浑,沒想到半個月后搏存,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,457評論 1 318
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡矢洲,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,529評論 3 341
  • 正文 我和宋清朗相戀三年璧眠,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,664評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡责静,死狀恐怖袁滥,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情泰演,我是刑警寧澤呻拌,帶...
    沈念sama閱讀 36,346評論 5 350
  • 正文 年R本政府宣布葱轩,位于F島的核電站睦焕,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏靴拱。R本人自食惡果不足惜垃喊,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,025評論 3 334
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望袜炕。 院中可真熱鬧本谜,春花似錦、人聲如沸偎窘。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,511評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽陌知。三九已至他托,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間仆葡,已是汗流浹背赏参。 一陣腳步聲響...
    開封第一講書人閱讀 33,611評論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留沿盅,地道東北人把篓。 一個月前我還...
    沈念sama閱讀 49,081評論 3 377
  • 正文 我出身青樓,卻偏偏與公主長得像腰涧,于是被迫代替她去往敵國和親韧掩。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,675評論 2 359

推薦閱讀更多精彩內(nèi)容