中台框架模塊開發實踐-代碼生成器的添加及使用

来源:https://www.cnblogs.com/morang/p/18261754/zhontai_admin_core_module_dev_gencode
-Advertisement-
Play Games

前言 之前已經分享過幾篇關於中台項目框架的文章,相關介紹就不再贅述 所謂工欲善其事必先利其器,一個項目擁有一個代碼生成器是很有必要的,能夠大大的節省時間,減少手誤,提供開發效率(ps:特別小團隊搞微服務但是沒有代碼生成器,簡直要了老命) 本文將分享如何在中台框架項目 Admin.Core 中添加代碼 ...


前言

之前已經分享過幾篇關於中台項目框架的文章,相關介紹就不再贅述

所謂工欲善其事必先利其器,一個項目擁有一個代碼生成器是很有必要的,能夠大大的節省時間,減少手誤,提供開發效率(ps:特別小團隊搞微服務但是沒有代碼生成器,簡直要了老命)

本文將分享如何在中台框架項目 Admin.Core 中添加代碼生成器模塊,助力項目的快速開發

準備

作為本系列的第一篇第一個模塊,我們將從拉取代碼開始,當然也可以通過倉庫的腳手架直接創建自己的項目,本系列後續都將直接基於源碼開發,保持框架的同步更新

克隆或下載 Admin.Core 代碼

git clone https://github.com/zhontai/Admin.Core.git

當然,也可以直接拉取改造創建好的模塊倉庫 https://github.com/yimogit/Admin.Core

新建模塊文件夾

添加 modules 文件夾及解決方案文件夾,存放模塊代碼

添加代碼生成器模塊

  • 功能:

    • 中台模塊服務代碼生成

    • 後續計劃

      • 自定義模板管理
      • 通用代碼生成器
  • 參考之前的配置文章,代碼可直接從當前倉庫獲取最新代碼

配置後端

  • 添加模塊類庫 ZhonTai.Module.Dev

  • ZhonTai.Module.Dev 需添加對 ZhonTai.Admin 的引用

  • ZhonTai.Host 需添加對 modules/ZhonTai.Module.Dev 的引用,確保 xml 生成,不然 swagger 顯示不了中文

  • 修改配置 Configs/appconfig.json

    • 程式集配置:"assemblyNames": [ "ZhonTai.Admin", "ZhonTai.Module.Dev" ]
    • Swagger 配置:
    • "swagger": {
        //啟用
        "enable": true,
        "projects": [
          {
            "name": "中台Admin",
            "code": "admin",
            "version": "v8.2.0",
            "description": ""
          },
          {
            "name": "代碼生成",
            "code": "dev",
            "version": "v8.2.0",
            "description": ""
          }
        ]
      }
      
  • Ctrl+F5 運行後模塊載入成功,後端配置完成

配置前端

  • 安裝包:npm run install
  • 修改 gen/gen-api.js 添加生成器模塊

  • 將生成器代碼複製到 views 中

  • 執行:npm run gen:api 重新生成介面映射,會把後端介面轉為前臺可以直接調用的 ts 代碼

  • 個人建議:可以根據模塊獨立一個文件,添加模塊生成 gen-module.js,就只會重新生成模塊文件

  • 運行項目:npm run dev 使用 admin 123asd 即可登錄到系統

配置菜單

  • 代碼生成器的代碼添加了,但是目前還無法再頁面中顯示出來,有三種做法

  • 第一種:可以直接修改 /src/router/route.ts 將下麵的路由配置添加到參考樣例的路由中,只能在開發時使用

    •     {
              path: '/dev',
              name: 'dev',
              redirect: '/dev/codegen',
              meta: {
                title: '生成器',
                isLink: '',
                isHide: false,
                isKeepAlive: true,
                isAffix: false,
                isIframe: false,
                roles: ['admin'],
                icon: 'iconfont icon-zujian',
              },
              children: [
                {
                  path: '/dev/codegen',
                  name: '/dev/codegen',
                  component: () => import('/@/views/dev/codegen/index.vue'),
                  meta: {
                    title: '代碼生成',
                    isLink: '',
                    isHide: false,
                    isKeepAlive: true,
                    isAffix: false,
                    isIframe: false,
                    roles: ['admin'],
                    icon: 'iconfont icon-zujian',
                  },
                }]
            }
            //...{path: '/example',...}
      
  • 第二種方法是正常使用動態路由添加

    • 系統管理-視圖管理中添加對應的視圖(代碼中的路由的定義,地址為 dev/codegen/index)
    • 許可權管理-許可權管理中添加對應菜單(路由地址:/codegen,路由命名:devgen)
    • 添加後刷新頁面即可訪問到代碼生成頁面
  • 第三種方法:直接執行 sql 即可(這個也是根據前面的操作生成的)

--添加視圖
INSERT INTO ad_view (Id,ParentId,Name,Label,"Path",Description,Cache,Sort,Enabled,CreatedUserId,CreatedUserName,CreatedUserRealName,CreatedTime,ModifiedUserId,ModifiedUserName,ModifiedUserRealName,ModifiedTime,IsDeleted) VALUES
         (558530915442693,0,NULL,'代碼管理',NULL,NULL,0,99,1,161223411986501,'admin','管理員','2024-06-16 16:08:08',161223411986501,'admin','管理員','2024-06-16 16:08:16',0),
         (558531082424325,558530915442693,'codegen','代碼生成','dev/codegen/index',NULL,0,1,1,161223411986501,'admin','管理員','2024-06-16 16:08:49',NULL,NULL,NULL,NULL,0);
-- 添加許可權
INSERT INTO ad_permission (Id,ParentId,Label,Code,"Type",ViewId,Name,"Path",Redirect,Icon,Hidden,Opened,NewWindow,"External",IsKeepAlive,IsAffix,Link,IsIframe,Sort,Description,Enabled,CreatedUserId,CreatedUserName,CreatedUserRealName,CreatedTime,ModifiedUserId,ModifiedUserName,ModifiedUserRealName,ModifiedTime,IsDeleted) VALUES
         (558531409440773,0,'代碼生成',NULL,2,558531082424325,'devgen','/codegen',NULL,'ele-Memo',0,0,0,0,0,0,NULL,0,5,NULL,1,161223411986501,'admin','管理員','2024-06-16 16:10:09',161223411986501,'admin','管理員','2024-06-16 16:10:55',0);

代碼生成服務已就位,接下來分享如何使用

使用代碼生成器的使用

  • 使用需知:在本地運行訪問生成器列表時,將會同步遷移生成器表,自動創建表到資料庫(預設與後臺模塊同一個庫)

  • 使用前確保有可用數據源,本地直接運行預設 sqlite 資料庫,選擇資料庫後可以查看已有資料庫表來進行代碼生成

  • 當然,也可以直接創建表生成代碼&創建表,這裡以新建一個家常管理系統的模塊作為演示
  • ~~前置條件:需要先在 modules 中創建對應類庫 ZhonTai.Module.Homely,並添加對 ZhonTai.Admin 的引用,創建 DbKeys.AppDb 指定資料庫註冊鍵,HomelyConsts.AreaName 指定預設區功能變數名稱稱 ~~(目前已支持類庫的自動創建)

配置生成規則

  • 第一步:選擇數據源後,創建業務相關表:家常管理-物品管理

    • 根據格式來創建即可,實體名帕斯卡命名,會自動轉換寫法
    • 父菜單:需要在生成菜單前創建菜單分組

建議保存後再進行欄位配置,避免誤操作

創建完成後點擊按鈕【生成代碼】即可

添加代碼到項目

  • 第二步:生成代碼後,將【後臺代碼】其拷貝到對應模塊文件夾 ZhonTai.Module.Homely 中,並添加類庫添加到 modules 文件夾(可根據需要分離 Default_Consts 內容,其中包含了路由首碼,資料庫鍵值的預設配置,Core 文件夾只第一次使用,後續生成可以只覆蓋實體&倉儲&服務)

    • 修改 ZhonTai.Host 項目,添加對模塊類庫 ZhonTai.Module.Homely 的引用,並修改配置文件 appconfig.json 或者 appconfig.Development.json(若啟用了配置中心 UseConfigCenter:true 則修改 ConfigCenter 文件夾下的配置,我這裡因為配置中心的配置無效,於是禁用了)
    • 配置完成運行項目即可
    • 然後將前臺代碼【views】 文件夾拷貝到對應前端目錄中,執行 npm run gen:apinpm run gen:module 生成新介面的前端映射文件,重新啟動 下前端項目

生成遷移數據&菜單&許可權

  • 第三步:生成遷移腳本到剪切板,連接到資料庫進行執行(沒有直接生成,實際應用場景中,生產環境一般手動執行,為了確保腳本的正確性,還是先看一眼,後面加個生成並執行)

  • 第四步:因為是模塊的第一個服務,所以需要先在許可權管理中創建一個【家常管理】的分組,這裡的名字和代碼生成器中填寫的父菜單需要一致,否則無法生成菜單

    • 這裡可以重定向的路由地址由後續生成,預設列表頁以 /list 結尾
  • 第五步:介面管理中同步最新介面

  • 第六步:在代碼生成列表點擊【生成菜單數據】將會自動將模塊的菜單,視圖生成

效果展示

生成成功,刷新頁面,一個簡單的物品管理的基礎功能就出來了

新增編輯頁面已同步優化為彈窗

後語

至此,代碼生成器又一次被我重新改造了一番,後續有時間還會繼續完善代碼生成器。

flag 先立在這:做一個可以自定義模塊的通用代碼生成器

有感興趣的小伙伴歡迎一起加 zhontai 群溝通交流

改代碼不易,寫作更不易,希望路過的大佬們點個贊,指點一二

相關倉庫

未經許可,禁止轉載!!!
作者:易墨
Github:yimogit
純靜態工具站點:metools


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 大模型在一定程度上去改變了我們生活生工作的思考的方式,然後也越來越多的個人還有企業在思考如何將大模型去應用到更加實際的呃生產生活中去,希望大語言模型能夠呃有一些更多企業級別生產落地的實踐,然後去幫助我們解決一些業務上的問題。目前 1 LLM的問題 1.1 幻覺 LLM因為是一個預訓練模型,它已有一些 ...
  • SingleStringMathTex是Mobjects分類中用來顯示數學公式的class。manim中有3個可以用來顯示數學公式的class,還有兩個是MathTex和Tex,後續再介紹。 從SingleStringMathTex的名稱中也可以看出,它是用來顯示只有一行的簡單公式。SingleSt ...
  • 1 模型 來看兩種不同類型的模型--LLM 和聊天模型。然後,它將介紹如何使用提示模板來格式化這些模型的輸入,以及如何使用輸出解析器來處理輸出。 LangChain 中的語言模型有兩種類型: 1.1 Chat Models 聊天模型通常由 LLM 支持,但專門針對會話進行了調整。提供者 API 使用 ...
  • 今天我們還講講Consumer、Supplier、Predicate、Function這幾個介面的用法,在 Java8 的用法當中,這幾個介面雖然沒有明目張膽的使用,但是,卻是潤物細無聲的。為什麼這麼說呢?這幾個介面都在 java.util.function 包下的,分別是Consumer(消費型) ...
  • pip install --upgrade langchain==0.0.279 -i https://pypi.org/simple 1 創建一個LLM 自有算力平臺+開源大模型(需要有龐大的GPU資源)企業自己訓練數據 第三方大模型API(openai/百度文心/阿裡通義千問...)數據無所謂 ...
  • LLM大模型與AI應用的粘合劑。 1 langchain是什麼以及發展過程 LangChain是一個開源框架,旨在簡化使用大型語言模型構建端到端應用程式的過程,也是ReAct(reason+act)論文的落地實現。 2022年10月25日開源 54K+ star 種子輪一周1000萬美金,A輪250 ...
  • 1.創建一個文件夾HCJV_01 2.vscode打開該文件夾,打開終端。 3.使用vite安裝,選擇vue,選擇JavaScript,項目名稱demo01 cnpm create vite@latest 4.跳轉demo01目錄下 cd demo01 5.安裝cnpm cnpm install 嘗 ...
  • 下麵將完成的展示,使用MAPI介面操作Outlook完成通訊錄更新。 using Microsoft.Office.Interop.Outlook; using Microsoft.VisualBasic; using System; using System.Collections; using ...
一周排行
    -Advertisement-
    Play Games
  • 一:背景 1. 講故事 前些天有位朋友找到我,說他們的程式會偶發性的卡死一段時間,然後又好了,讓我幫忙看下怎麼回事?窗體類的程式解決起來相對來說比較簡單,讓朋友用procdump自動抓一個卡死時的dump,拿到dump之後,上 windbg 說話。 二:WinDbg 分析 1. 主線程在做什麼 要想 ...
  • 功能說明 使用ListView時,希望可以在單元格顯示圖片或其他控制項,發現原生的ListView不支持,於是通過拓展,實現ListView可以顯示任意控制項的功能,效果如下: 實現方法 本來想著在單元格裡面實現控制項的自繪的,但是沒找到辦法,最後是通過在單元格的錶面顯示對應控制項的,浮於錶面達到目的。 實 ...
  • 由於.NET Framework 4.0 是比較古老的版本,只有New Relic 7.0以下的版本才會支持.NET Framework 4.0的引用程式。 Technical support for .NET Framework 4.0 or lower 你可以參考這個官方Install New ...
  • 前言 隨著 DEV24.1.3 的發佈,XAF Blazor 中的屬性編輯器(PropertyEditor)也進行了很大的改動,在使用體驗上也更接近 WinForm 了,由於進行了大量的封裝,理解上沒有 WinForm 直觀,所以本文通過對屬性編輯器的原理進行解析,並對比新舊版本中的變化,使大家能夠 ...
  • OPC基金會提供了OPC UA .NET標準庫以及示常式序,但官方文檔過於簡單,光看官方文檔和示常式序很難弄懂OPC UA .NET標準庫怎麼用,花了不少時間摸索才略微弄懂如何使用,以下記錄如何從一個控制台程式開發一個OPC UA伺服器。 安裝Nuget包 安裝OPCFoundation.NetSt ...
  • 今天在技術群里,石頭哥向大家提了個問題:"如何在一個以System身份運行的.NET程式(Windows Services)中,以其它活動的用戶身份啟動可互動式進程(桌面應用程式、控制台程式、等帶有UI和互動式體驗的程式)"? 我以前有過類似的需求,是在GitLab流水線中運行帶有UI的自動化測試程 ...
  • .Net 中提供了一系列的管理對象集合的類型,數組、可變列表、字典等。從類型安全上集合分為兩類,泛型集合 和 非泛型集合,傳統的非泛型集合存儲為Object,需要類型轉。而泛型集合提供了更好的性能、編譯時類型安全,推薦使用。 ...
  • 在以前我做程式的時候,一般在登錄視窗裡面顯示程式名稱,登錄視窗一般設置一張背景圖片,由於程式的名稱一般都是確定的,所以也不存在太大的問題,不過如果客戶定製不同的系統的時候,需要使用Photoshop修改下圖層的文字,再生成圖片,然後替換一下也可以了。不過本著減少客戶使用繁瑣性,也可以使用空白名稱的通... ...
  • 一:背景 1. 講故事 在dump分析的過程中經常會看到很多線程卡在Monitor.Wait方法上,曾經也有不少人問我為什麼用 !syncblk 看不到 Monitor.Wait 上的鎖信息,剛好昨天有時間我就來研究一下。 二:Monitor.Wait 底層怎麼玩的 1. 案例演示 為了方便講述,先 ...
  • 目錄前言學習參考過程總結: 前言 做個自由仔。 學習參考 ChatGpt; https://www.cnblogs.com/zhili/p/DesignPatternSummery.html(大佬的,看了好多次) 過程 原由: 一開始只是想查查鏈式調用原理,以為是要繼承什麼介面,實現什麼方法才可以實 ...