天畫(huà)-codeMaker低代碼平臺(tái)設(shè)計(jì)與實(shí)現(xiàn)(上)

      網(wǎng)友投稿 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)

      天畫(huà)-codeMaker低代碼平臺(tái)設(shè)計(jì)與實(shí)現(xiàn)(上)

      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)容。

      上一篇:excel表格如何作表頭
      下一篇:C# 網(wǎng)絡(luò)編程之webBrowser獲取網(wǎng)頁(yè)url和下載網(wǎng)頁(yè)中圖片
      相關(guān)文章
      亚洲国产天堂久久综合网站| 亚洲三区在线观看无套内射| 亚洲五月六月丁香激情| 亚洲精品国产美女久久久| 国产精品自拍亚洲| 国产精品亚洲专区一区| 综合一区自拍亚洲综合图区| 亚洲AV成人无码网天堂| 亚洲αⅴ无码乱码在线观看性色| 亚洲偷自拍另类图片二区| 亚洲熟妇无码AV| 亚洲国产aⅴ成人精品无吗| 亚洲AV永久无码天堂影院| 国产亚洲欧美日韩亚洲中文色| 亚洲AV无码之国产精品| 国产精品自拍亚洲| 亚洲一级Av无码毛片久久精品| 亚洲性日韩精品国产一区二区| 亚洲无线码一区二区三区| 亚洲日韩中文无码久久| 国产亚洲色婷婷久久99精品| 久久精品国产亚洲夜色AV网站| 亚洲AV无码1区2区久久| 亚洲自偷自拍另类图片二区| 91亚洲性爱在线视频| 91丁香亚洲综合社区| 亚洲av永久中文无码精品| 亚洲福利精品一区二区三区 | 亚洲国产黄在线观看| 精品国产亚洲男女在线线电影| 亚洲一区二区三区香蕉| 亚洲av永久无码精品漫画| 亚洲一区二区中文| 精品亚洲成A人无码成A在线观看| 亚洲综合无码一区二区痴汉| 日韩欧美亚洲中文乱码| 亚洲人成人无码网www国产| 国产亚洲人成网站在线观看不卡| 亚洲综合婷婷久久| 亚洲91精品麻豆国产系列在线| 久久精品国产99国产精品亚洲|