低代碼平臺(tái) jeecg介紹

低代碼平臺(tái)應(yīng)該具備哪些基本的特征?

市面上的低代碼平臺(tái)一般具備幾個(gè)特征:

  • 基本的權(quán)限管理功能
  • 具備代碼生成器
  • 前端UI的設(shè)計(jì)
  • 后端數(shù)據(jù)接口服務(wù)

有些定位自己為無(wú)代碼平臺(tái)的產(chǎn)品還具備在線表單設(shè)計(jì)和直接預(yù)覽的功能,然后配以基本的插件或者腳本的開(kāi)發(fā)方式來(lái)達(dá)到不寫代碼或者少寫代碼的目的崇呵。

記得若干年前盛行的三層架構(gòu)或者SSH或者SSM框架配以代碼生成器的方式其實(shí)也是一種低代碼的方式,低代碼比較抽象的概念馅袁,代碼多少稱之為低沒(méi)有統(tǒng)一的標(biāo)準(zhǔn)域慷,如果框架具備一定的抽象的能力,并且采用了的DDD的設(shè)計(jì)理念將核心業(yè)務(wù)都采用領(lǐng)域模型進(jìn)行封裝汗销,簡(jiǎn)單的CRUD功能通過(guò)框架去完成犹褒,而開(kāi)發(fā)人員只需要生成簡(jiǎn)單的數(shù)據(jù)庫(kù)表的映射即實(shí)體(Entity),那么這樣的框架我們可以稱之為低代碼的弛针。有些無(wú)代碼框架將業(yè)務(wù)實(shí)體再抽象為字典表叠骑,然后采用前后端通過(guò)JSON動(dòng)態(tài)交互業(yè)務(wù)實(shí)體元數(shù)據(jù)的方式來(lái)消除了實(shí)體的生成,這樣可以把產(chǎn)品定位為“無(wú)代碼”钦奋。

但是理想很美好座云,現(xiàn)實(shí)很骨感,現(xiàn)實(shí)生活中我們很少業(yè)務(wù)是只有單實(shí)體的CRUD功能的付材,所以這樣的低代碼或者無(wú)代碼平臺(tái)無(wú)法完全覆蓋到現(xiàn)實(shí)業(yè)務(wù)朦拖,比如常見(jiàn)的一對(duì)多和多對(duì)多的關(guān)系是業(yè)務(wù)實(shí)體的常態(tài),所以低代碼平臺(tái)還需要做更高的抽象才能滿足現(xiàn)實(shí)的需求厌衔,所以有些商業(yè)軟件抽象了這些基本的模型璧帝,比如:?jiǎn)螌?shí)體模型,一對(duì)多模型富寿,多對(duì)多模型睬隶,甚至有些ERP產(chǎn)品的低代碼平臺(tái)還抽象出了行業(yè)模型的業(yè)務(wù)模型,從而提供更高的業(yè)務(wù)開(kāi)發(fā)和擴(kuò)展能力页徐。

jeecg如何定位苏潜?

jeecg把自己定位為低代碼平臺(tái),但是同時(shí)也具備了在線表單和在線報(bào)表的能力变勇,但是不具備商業(yè)軟件的模型抽象能力恤左,然而它麻雀雖小但五臟俱全,同時(shí)具備了商業(yè)軟件的微服務(wù)部署搀绣,流程設(shè)計(jì)飞袋,消息中心,任務(wù)中心链患,監(jiān)控中心巧鸭,以及移動(dòng)端的設(shè)計(jì)能力。

jeecg與ruoyi對(duì)比

jeecg開(kāi)源大部分功能麻捻,但是在線表單設(shè)計(jì)模塊未提供開(kāi)發(fā)纲仍,不管是前后端都采用了組件開(kāi)發(fā)的方式,并且商業(yè)授權(quán)不明確贸毕。rouyi是一款基于代碼代碼生成器的低代碼框架巷折,它有多個(gè)版本,我們對(duì)比的是它的前后端分離版本崖咨,從技術(shù)角度來(lái)說(shuō)它和jeecg才有對(duì)比性锻拘。

相同點(diǎn):

1.前端都是基于VUE實(shí)現(xiàn)的
2.后端都使用spring boot+mybatis框架
3.都具有代碼生成器
4.都具有權(quán)限和部門管理功能

不同點(diǎn):
1. 前端組件方面rouyi使用的是Elment UI,jeecg為自己封裝的組件
2. jeecg具備在線表單開(kāi)發(fā)功能击蹲,rouyi只是簡(jiǎn)單的前后端代碼生成
3. jeecg具有流程設(shè)計(jì)署拟,消息中心,任務(wù)中心歌豺,移動(dòng)開(kāi)發(fā)能力,以及套打等功能
4. rouyi版本較多推穷,不光有前后端分離架構(gòu),還有其他版本
5. rouyi開(kāi)源性比jeecg更好

jeecg的在線表單功能的實(shí)現(xiàn)原理

前端

jeece目前的版本使用Vue 2.0實(shí)現(xiàn)类咧,路由使用Vue Router實(shí)現(xiàn)馒铃,入口main.js蟹腾,引用permission.js,這里調(diào)用router的beforeEach來(lái)獲取當(dāng)前用戶有權(quán)限的菜單区宇,里面調(diào)用Vue Store 的dispatch方法,本質(zhì)是調(diào)用store/user的GetPermissionList方法娃殖,最終是調(diào)用到后端的api接口的queryPermissionsByUser方法。


router.beforeEach((to, from, next) => {
 NProgress.start() // start progress bar

 if (Vue.ls.get(ACCESS_TOKEN)) {
   /* has token */
   if (to.path === '/user/login' || to.path === OAUTH2_LOGIN_PAGE_PATH) {
     next({ path: INDEX_MAIN_PAGE_PATH })
     NProgress.done()
   } else {
     if (store.getters.permissionList.length === 0) {
       store.dispatch('GetPermissionList').then(res => {
       ...
       }
     }
   }
 }
}

后端存儲(chǔ)數(shù)據(jù)在sys_permission表议谷,通過(guò)該表知道Online表單開(kāi)發(fā)的對(duì)應(yīng)的組件路徑是modules/online/cgform/OnlCgformHeadList炉爆,但是在源代碼中并沒(méi)有這個(gè)路徑,經(jīng)過(guò)搜到知道在utils/util的工具類中g(shù)enerateChildRouters方法對(duì)在線表單做了特殊處理卧晓,其實(shí)是替換到了外部組件包


let componentPath
    if(item.component=="modules/online/cgform/OnlCgformHeadList"){
      componentPath = onlineCommons.OnlCgformHeadList
    }else if(item.component=="modules/online/cgform/OnlCgformCopyList"){
      componentPath = onlineCommons.OnlCgformCopyList
    }else if(item.component=="modules/online/cgform/auto/OnlCgformAutoList"){
      componentPath = onlineCommons.OnlCgformAutoList
    }else if(item.component=="modules/online/cgform/auto/OnlCgformTreeList"){
      componentPath = onlineCommons.OnlCgformTreeList
    }else if(item.component=="modules/online/cgform/auto/erp/OnlCgformErpList"){
      componentPath = onlineCommons.OnlCgformErpList
    }else if(item.component=="modules/online/cgform/auto/tab/OnlCgformTabList"){
      componentPath = onlineCommons.OnlCgformTabList
    }else if(item.component=="modules/online/cgform/auto/innerTable/OnlCgformInnerTableList"){
      componentPath = onlineCommons.OnlCgformInnerTableList
    }else if(item.component=="modules/online/cgreport/OnlCgreportHeadList"){
      componentPath = onlineCommons.OnlCgreportHeadList
    }else if(item.component=="modules/online/cgreport/auto/OnlCgreportAutoList"){
      componentPath = onlineCommons.OnlCgreportAutoList
    }else{
      componentPath = resolve => require(['@/' + component+'.vue'], resolve)
    }

@jeecg/antd-online-mini,這個(gè)包是jeece提供的專門用來(lái)在線開(kāi)發(fā)的組件包芬首,并沒(méi)有開(kāi)源。

后端

后端實(shí)體元數(shù)據(jù)主要是兩個(gè)表:

  • onl_cgform_head 實(shí)體元數(shù)據(jù)主表
  • onl_cgform_field 實(shí)體元數(shù)據(jù)字段表

后端API提供方式也是采用jar包組件的方式提供逼裆,主要邏輯在org.jeecgframework.boot郁稍,反編譯后可以看到API只是c.a這個(gè)類,采用Spring Boot方式提供API訪問(wèn)接口胜宇,底層取數(shù)使用的是mybatis plus艺晴,crud使用的sql通過(guò)從元數(shù)據(jù)表取得的表名和字段名,然后通過(guò)拼sql的方式實(shí)現(xiàn)掸屡,實(shí)現(xiàn)還是比較簡(jiǎn)單的封寞。

總結(jié)

jeecg在低代碼這塊實(shí)現(xiàn)完整度方面還是不錯(cuò),只不過(guò)在開(kāi)源方面還有所欠缺仅财,同時(shí)缺少行業(yè)模板狈究,在定制和擴(kuò)展方面還有待加強(qiáng),開(kāi)發(fā)方式封裝度感覺(jué)還不是太夠盏求,比較的原始抖锥,缺少對(duì)實(shí)體邏輯的基本抽象和封裝。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末碎罚,一起剝皮案震驚了整個(gè)濱河市磅废,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌荆烈,老刑警劉巖拯勉,帶你破解...
    沈念sama閱讀 211,194評(píng)論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異憔购,居然都是意外死亡宫峦,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,058評(píng)論 2 385
  • 文/潘曉璐 我一進(jìn)店門玫鸟,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)导绷,“玉大人,你說(shuō)我怎么就攤上這事屎飘⊥浊” “怎么了贾费?”我有些...
    開(kāi)封第一講書人閱讀 156,780評(píng)論 0 346
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)檐盟。 經(jīng)常有香客問(wèn)我褂萧,道長(zhǎng),這世上最難降的妖魔是什么遵堵? 我笑而不...
    開(kāi)封第一講書人閱讀 56,388評(píng)論 1 283
  • 正文 為了忘掉前任箱玷,我火速辦了婚禮怨规,結(jié)果婚禮上陌宿,老公的妹妹穿的比我還像新娘。我一直安慰自己波丰,他們只是感情好壳坪,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,430評(píng)論 5 384
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著掰烟,像睡著了一般爽蝴。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上纫骑,一...
    開(kāi)封第一講書人閱讀 49,764評(píng)論 1 290
  • 那天蝎亚,我揣著相機(jī)與錄音,去河邊找鬼先馆。 笑死发框,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的煤墙。 我是一名探鬼主播梅惯,決...
    沈念sama閱讀 38,907評(píng)論 3 406
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼仿野!你這毒婦竟也來(lái)了铣减?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書人閱讀 37,679評(píng)論 0 266
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤脚作,失蹤者是張志新(化名)和其女友劉穎葫哗,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體球涛,經(jīng)...
    沈念sama閱讀 44,122評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡魄梯,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,459評(píng)論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了宾符。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片酿秸。...
    茶點(diǎn)故事閱讀 38,605評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖魏烫,靈堂內(nèi)的尸體忽然破棺而出辣苏,到底是詐尸還是另有隱情肝箱,我是刑警寧澤,帶...
    沈念sama閱讀 34,270評(píng)論 4 329
  • 正文 年R本政府宣布稀蟋,位于F島的核電站煌张,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏退客。R本人自食惡果不足惜骏融,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,867評(píng)論 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望萌狂。 院中可真熱鬧档玻,春花似錦、人聲如沸茫藏。這莊子的主人今日做“春日...
    開(kāi)封第一講書人閱讀 30,734評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)务傲。三九已至凉当,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間售葡,已是汗流浹背看杭。 一陣腳步聲響...
    開(kāi)封第一講書人閱讀 31,961評(píng)論 1 265
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留挟伙,地道東北人楼雹。 一個(gè)月前我還...
    沈念sama閱讀 46,297評(píng)論 2 360
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像像寒,于是被迫代替她去往敵國(guó)和親烘豹。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,472評(píng)論 2 348

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