亞寵展、全球?qū)櫸锂a(chǎn)業(yè)風(fēng)向標(biāo)——亞洲寵物展覽會(huì)深度解析
690
2025-04-05
天畫(huà)-codeMaker低代碼平臺(tái)設(shè)計(jì)與實(shí)現(xiàn)(上)
一、背景
1.1 總體背景
我在業(yè)余時(shí)間構(gòu)建了一個(gè)租房平臺(tái),采用springboot微服務(wù)的架構(gòu)模式,同時(shí)結(jié)合服務(wù)化思想進(jìn)行代碼實(shí)踐,但是由于存在很多重復(fù)且低效的變更導(dǎo)致業(yè)余時(shí)間對(duì)這個(gè)租房平臺(tái)的進(jìn)度產(chǎn)生影響。作為開(kāi)發(fā)人員長(zhǎng)期維護(hù)一個(gè)業(yè)余項(xiàng)目產(chǎn)生了很多進(jìn)度延遲和效率問(wèn)題會(huì)導(dǎo)致項(xiàng)目項(xiàng)目被遺棄的概率增大,對(duì)開(kāi)發(fā)者來(lái)說(shuō)也是一個(gè)非常沮喪的事情。為了避免這種事情發(fā)生,我一方面鼓勵(lì)自己盡量每天貢獻(xiàn)代碼,并在合適的時(shí)間構(gòu)建提高開(kāi)發(fā)效率的使用平臺(tái)。另一方面也是為了借助這個(gè)租房平臺(tái)進(jìn)行微服務(wù)+分庫(kù)分表+DDD領(lǐng)域?qū)嵺`。因此最初的目標(biāo)就是為了構(gòu)建大規(guī)模微服務(wù)應(yīng)用,這就需要大量構(gòu)建很多微服務(wù)工程。
目前這個(gè)平臺(tái)的業(yè)務(wù)API主要還是以CURD類(lèi)的接口為主,所以構(gòu)建一個(gè)支持微服務(wù)架構(gòu)生態(tài)支持分庫(kù)分表,支持sql生成管理,支持所構(gòu)建即所得,所操作即所得的低代碼生成平臺(tái)是優(yōu)于業(yè)務(wù)開(kāi)發(fā)的。在這個(gè)構(gòu)建過(guò)程中業(yè)務(wù)開(kāi)發(fā)和組件平臺(tái)開(kāi)發(fā)大部分時(shí)間是串行的,所以迭代不是一直持續(xù)的,而是優(yōu)先解決業(yè)務(wù)開(kāi)發(fā)過(guò)程中存在的效率問(wèn)題。
以上是對(duì)codeMaker的一些背景介紹,由于我最近大半年的時(shí)間都在研究DDD,產(chǎn)出了一系列文章,目前已經(jīng)到了實(shí)戰(zhàn)環(huán)節(jié),所以需要寫(xiě)大量的實(shí)戰(zhàn)項(xiàng)目代碼。但是時(shí)間和精力有限,所以想到了通過(guò)codemMaker來(lái)提高效率。
1.2 需求描述
1.支持單庫(kù),分庫(kù)分表sql生成&管理(PS:業(yè)余玩分庫(kù)分表也很輕松,持續(xù)迭代更容易)2.支持基于單庫(kù),分庫(kù)分表的全量代碼生成3.支持基于單庫(kù),分庫(kù)分表的增量代碼生成4.支持按模塊的代碼生成(如只生成某個(gè)表的service層,或者mapper層)5.基于spring,mybatis純?cè)蚣埽傻拇a不依賴(lài)任何經(jīng)過(guò)包裝的中間件代碼(如mybatis-plus)6.基于springboot工程的模式進(jìn)行構(gòu)建7.主要基于mysql數(shù)據(jù)庫(kù)
二、需求調(diào)研
2.1 技術(shù)調(diào)研
雖然沒(méi)有試用,經(jīng)過(guò)慎重的調(diào)研上面的平臺(tái)工具依然不是我理想中的或者我想要的那種,主要有以下幾點(diǎn)理由:
1.代碼生成模塊功能不夠豐富2.深度綁定某框架(如mybatis-plus),或者限定某spring版本3.有可視化界面缺缺乏表結(jié)構(gòu)構(gòu)建,表sql生成,包括分庫(kù)分表sql的生成,管理4.深度依賴(lài)編輯器(如只支持idea)當(dāng)然還有一些其他專(zhuān)門(mén)做低代碼的高端平臺(tái),這里就不再列了,感興趣的可以翻我朋友圈,內(nèi)容很豐富哦。
2.2 技術(shù)選型
經(jīng)過(guò)評(píng)估之后,我決定自己實(shí)現(xiàn)一個(gè)低代碼平臺(tái),在技術(shù)選型上也確實(shí)參考了一些其他代碼生成器的思路,這里給出我前期在構(gòu)建這個(gè)平臺(tái)的時(shí)候依賴(lài)的一些技術(shù)框架:數(shù)據(jù)庫(kù)持久層:mysql 持久化框架:mybatis 微服務(wù)框架:springboot 代碼文件模板:freemarker
2.3 核心功能和需求
1.支持基于數(shù)據(jù)庫(kù)表結(jié)構(gòu)的代碼生成,
2.支持springboot框架應(yīng)用的代碼生成
3.支持全量和增量式的代碼模塊生成
4.支持controller,do,bo,service,serviceimpl,mapper,mapper,entity,test的代碼元素的生成
5.支持基于數(shù)據(jù)庫(kù)表txt配置文件生成DDL的sql語(yǔ)句
6.支持分庫(kù)分表下的數(shù)據(jù)庫(kù)和表DDL的sql語(yǔ)句
7.生成的代碼demo單獨(dú)存儲(chǔ)在獨(dú)立的工程模塊下
三、工程架構(gòu)
3.1 設(shè)計(jì)方案
1.通過(guò)Mybatis 鏈接數(shù)據(jù)庫(kù)獲取指定數(shù)據(jù)庫(kù)中的表結(jié)構(gòu)描述,主要包括表名,表描述,字段名,字段描述,字段類(lèi)型
2.編寫(xiě)freemarker代碼模板
3.通過(guò)freemarker將數(shù)據(jù)庫(kù)表元數(shù)據(jù)渲染到代碼模板中,生成目標(biāo)代碼
3.2 項(xiàng)目工程介紹
整個(gè)代碼生成平臺(tái)最初有三個(gè)模塊組成,后面參考了團(tuán)隊(duì)的數(shù)據(jù)庫(kù)表設(shè)計(jì)習(xí)慣將數(shù)據(jù)庫(kù)表e-r圖生成功能引入代碼生成器里面,形成單獨(dú)的模塊:codermaker-dberPicture。后面被集成到codermaker-core工程項(xiàng)目中。
1.codermaker-core:根據(jù)數(shù)據(jù)庫(kù)表結(jié)構(gòu)和配置的代碼模板生成項(xiàng)目代碼2.codermaker-dberPicture:根據(jù)數(shù)據(jù)庫(kù)表結(jié)構(gòu)或者按照指定數(shù)據(jù)接口生成對(duì)應(yīng)數(shù)據(jù)模型e-r圖(基于plantUML),是個(gè)工具jar包工程3.codermaker-dbops:數(shù)據(jù)庫(kù)表結(jié)構(gòu)運(yùn)維工具,根據(jù)配置的sql字段內(nèi)容生成單表或者多表或者分庫(kù)分表的sql腳本,對(duì)各個(gè)應(yīng)用的各個(gè)數(shù)據(jù)庫(kù)的DDL語(yǔ)句進(jìn)行管理,包括分庫(kù)分表配置,但是不依賴(lài)數(shù)據(jù)源和中間件,是最簡(jiǎn)單的springboot工程。4.codermaker-web:這個(gè)工程是個(gè)空殼工程,根據(jù)codermaker-core項(xiàng)目生成的代碼會(huì)在這個(gè)工程里展示,所見(jiàn)即所得,所操作即所得。
四、設(shè)計(jì)與實(shí)現(xiàn)
4.1 項(xiàng)目配置
整個(gè)代碼生成項(xiàng)目分為三種配置:1.代碼模板配置template.ftl2.項(xiàng)目的核心配置application.properties3.項(xiàng)目生成代碼的個(gè)性化配置,projecttemplate.properties
4.2 架構(gòu)圖
4.3 接口api
4.3.1 表結(jié)構(gòu)生成接口(codemaker-dbops[1])
/** * 生成運(yùn)維分庫(kù)分表變更語(yǔ)句 * 對(duì)應(yīng)resources sql文件夾下目錄名 * @param appName 應(yīng)用名稱(chēng) * @param dbName 數(shù)據(jù)庫(kù)名稱(chēng) * @param opsName 操作 * @return */ @GetMapping(value = "/dbops")
/** * 初始化應(yīng)用表結(jié)構(gòu) * * @param appName 應(yīng)用名稱(chēng) * @param dbName 數(shù)據(jù)庫(kù)名稱(chēng) * @return */ @GetMapping(value = "/initshardingdb")
4.3.2 代碼生成接口(codemaker-core[2])
/** * 生成模塊的entity類(lèi) * @return */ @GetMapping("/getproject/entity")
/** * 生成模塊的vo類(lèi) * @return */ @GetMapping("/getproject/vo")
/** * 生成模塊的mapper類(lèi) * @return */ @GetMapping("/getproject/mapper")
/** * 生成模塊的service類(lèi) * @return */ @GetMapping("/getproject/service")
/** * 生成模塊的serviceimpl類(lèi) * @return */ @GetMapping("/getproject/serviceimpl")
/** * 生成模塊的mapperxml類(lèi) * @return */ @GetMapping("/getproject/mapperxml")
/** * 生成模塊的controller類(lèi) * @return */ @GetMapping("/getproject/controller")
/** * 生成項(xiàng)目的test類(lèi) * @return */ @GetMapping("/getproject/test")
4.4 極簡(jiǎn)模式介紹
這里的極簡(jiǎn)模式生成的代碼是最為純凈的代碼,主要體現(xiàn)在下面幾個(gè)方面:
1.vo,entity自動(dòng)生成get/set方法–不依賴(lài)lombok2.controller,service,mapper層之間沒(méi)有調(diào)用關(guān)系3.日志類(lèi)自動(dòng)集成slf4j–不依賴(lài)lombok
4.5 極速模式介紹
這里的極速模式生成的代碼是可以直接運(yùn)行的,同時(shí)在已有代碼上進(jìn)行字段更新,迭代更快捷:
vo,entity自動(dòng)帶有l(wèi)ombok注解
2.?controller,service,mapper層之間有默認(rèn)調(diào)用關(guān)系
3.日志類(lèi)自動(dòng)lombok注解slf4j
4.6 使用流程圖
五、未來(lái)規(guī)劃
5.1 版本發(fā)布?xì)v史
1.實(shí)現(xiàn)codermaker-core代碼生成功能 1.0.02.實(shí)現(xiàn)數(shù)據(jù)庫(kù)表sql生成功能 1.0.03.實(shí)現(xiàn)數(shù)據(jù)庫(kù)表e-r圖生成功能 1.0.14.實(shí)現(xiàn)代碼生成極速模式 1.0.2
5.2 迭代路線
1.codemaker-core增加代碼生成快照功能
2.codemaker-core全面梳理其他文件的生成依賴(lài)數(shù)據(jù)
3.增加cola架構(gòu)代碼生成器功能
4.增加可視化頁(yè)面配置 + 下載代碼功能
6.增加dubbo框架的代碼生成功能
六、后續(xù)
codeMaker經(jīng)過(guò)多輪迭代在后端java代碼生成已經(jīng)相對(duì)成熟了,本章講解的主要是codeMaker的早期設(shè)計(jì)和實(shí)現(xiàn),下一篇將重點(diǎn)介紹codeMaker最近的一些迭代版本和特性,以及如何實(shí)現(xiàn)一套API支撐三大框架和動(dòng)態(tài)ddd代碼生成的。敬請(qǐng)期待。
版權(quán)聲明:本文內(nèi)容由網(wǎng)絡(luò)用戶(hù)投稿,版權(quán)歸原作者所有,本站不擁有其著作權(quán),亦不承擔(dān)相應(yīng)法律責(zé)任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實(shí)的內(nèi)容,請(qǐng)聯(lián)系我們jiasou666@gmail.com 處理,核實(shí)后本網(wǎng)站將在24小時(shí)內(nèi)刪除侵權(quán)內(nèi)容。
版權(quán)聲明:本文內(nèi)容由網(wǎng)絡(luò)用戶(hù)投稿,版權(quán)歸原作者所有,本站不擁有其著作權(quán),亦不承擔(dān)相應(yīng)法律責(zé)任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實(shí)的內(nèi)容,請(qǐng)聯(lián)系我們jiasou666@gmail.com 處理,核實(shí)后本網(wǎng)站將在24小時(shí)內(nèi)刪除侵權(quán)內(nèi)容。