低代碼平臺業(yè)務(wù)模型設(shè)計(低代碼平臺業(yè)務(wù)模型設(shè)計方案)

前言

在低代碼平臺中,如果需要支持復雜模型多數(shù)情況下會要求具備模塊級別的源碼導出功能,獨立模塊可以導出為獨立運行的原生代碼方便與業(yè)系統(tǒng)進一步集成。在低代碼平臺相對成熟的今天,這一功能也成為了絕大多數(shù)商業(yè)企業(yè)級低代碼平臺的必備功能,本文將從模塊代碼導出的角度來聊一下,低代碼平臺的代碼出碼設(shè)計。

一,低代碼平臺常用出碼模式

在用戶完成基礎(chǔ)的視圖設(shè)計以及應(yīng)用邏輯編排后,通常需要將業(yè)務(wù)設(shè)計通過特定的方式轉(zhuǎn)化為可執(zhí)行的代碼及配置以便于仿真測試或者直接交付部署應(yīng)用。通常這個過程有以下幾種方式:

(1)模板模式(直接出碼為可執(zhí)行原生代碼)

早在低代碼相關(guān)技術(shù)誕生以前,代碼生成模式就風靡于架構(gòu)設(shè)計圈子。由架構(gòu)師確立技術(shù)路線和代碼結(jié)構(gòu),通過framake等模板語言將數(shù)據(jù)庫或者通用配置批量的生成基礎(chǔ)代碼,然后交由程序員進行二次加工。

低代碼平臺業(yè)務(wù)模型設(shè)計(低代碼平臺業(yè)務(wù)模型設(shè)計方案)

這種方式優(yōu)點是:

簡單易操作,一個稍有經(jīng)驗的高級程序員即可完成整套的基礎(chǔ)模板設(shè)計,在經(jīng)過模板輸出后可以大幅降低普通程序員的勞動強度。

但缺點也很明顯:

首先由于模型設(shè)計過程中過于簡單,缺少元數(shù)據(jù)以及元元數(shù)據(jù)屬性的支撐,在代碼生成時需要更高級的屬性支持時只能在模板中去豐富,這就造成代碼模板會被嚴重污染大幅降低通用性,在真實使用過程中往往會出現(xiàn)一個項目一套模板,甚至一個程序員都有一套自有模板的囧局。這使得項目可維護性大幅降低,另外代碼在生成后,多數(shù)情況下還需要進行一些二次補充和修改。這個些過程中通常是不可逆的,這使得代碼生成只能在項目初始構(gòu)建的時候使用,對于功能擴展或者代碼重構(gòu)都無法發(fā)揮其應(yīng)有的作用。

小結(jié):

單純的代碼生成模式如果純粹作為程序員或者微型項目組,作為代碼工具使用尚可,在早期低代碼平臺中也比較常見于各種行業(yè)模板等應(yīng)用,但隨著技術(shù)進步,這種方式正在逐步被淘汰。

(2)引擎驅(qū)動模式(出碼為DSL)

引擎驅(qū)動模式最早來起源于“中間件”設(shè)計,其設(shè)計目的是將大量具有通用意義的業(yè)務(wù)邏輯進行抽象包裝,提供獨立的數(shù)據(jù)模型業(yè)務(wù)驅(qū)動模式再根據(jù)業(yè)務(wù)特性,抽象出特定的DSL業(yè)務(wù)描述語言,例如:流程語言BPEL, 報表中延續(xù)的EXECL公式,數(shù)據(jù)庫的SQL語言等等。用戶通過DSL語言來描述業(yè)務(wù)結(jié)構(gòu)以及數(shù)據(jù)信息,然后將DSL交由引擎去執(zhí)行,從而有效實現(xiàn)業(yè)務(wù)與代碼的解耦。這種技術(shù)在低代碼平臺中應(yīng)用還是比較廣泛的,在企業(yè)級低代碼平臺應(yīng)用中更是標配。

低代碼平臺業(yè)務(wù)模型設(shè)計(低代碼平臺業(yè)務(wù)模型設(shè)計方案)

結(jié)構(gòu)組成

低代碼平臺業(yè)務(wù)模型設(shè)計(低代碼平臺業(yè)務(wù)模型設(shè)計方案)

出碼實施過程

引擎模式優(yōu)點:

引擎模式是將業(yè)務(wù)模型輸出為“DSL”這種中間語言,這種方式很好的解決了模型的二次維護與可逆性輸出,在通用性的功能以及技術(shù)細節(jié)處理也相對更完善,能給直接用戶帶來更好的使用感受,在項目的重構(gòu)以及后期維護方面也有不錯的表現(xiàn)。

引擎模式缺點:

(1)易用性缺失,對使用者技術(shù)要求太高:

引擎模式有著諸多的優(yōu)勢,但在低代碼平臺除了需要強勁的功能支持以及擴展性支持外,還需要兼顧其易用性,對于低代碼平臺的核心用戶主要還是定位在泛開發(fā)者而非專家型程序員。多引擎的設(shè)計會隨著引擎細分越多、功能越強大、對于開發(fā)者而言所需的專業(yè)領(lǐng)域也會越寬泛。集成二次開發(fā)要求也會越來越強。而多引擎模式下所推崇的中臺模式、APAAS平臺初衷雖是為了更好的解耦應(yīng)用實現(xiàn)微服務(wù)架構(gòu)。但在一定程度上與低代碼平臺泛開發(fā)者定位是背道而馳的。往往在企業(yè)應(yīng)用中往往是一旦建立起來中臺,APAAS應(yīng)用就成為了巨無霸的存在,使得業(yè)務(wù)缺少靈活性,技術(shù)架構(gòu)更是僵硬不堪。

(2)構(gòu)建過程復雜,不適合簡單應(yīng)用

引擎模式下,業(yè)務(wù)功能拆分會比較細,這種拆分對于構(gòu)建復雜應(yīng)用是有益處的,但在日常企業(yè)應(yīng)用開發(fā)中在大多數(shù)的應(yīng)用功能,往往是類似于:“實驗數(shù)據(jù)上報”、“儀器設(shè)備管理”等等只在相對封閉的環(huán)境下使用的小功能。對于這種簡單應(yīng)用,引擎的功能就會顯得過于強大。而其中包含的隱形規(guī)則和設(shè)計要求更使得普通開發(fā)者無所是從。

(3)引擎擴展困難

業(yè)務(wù)應(yīng)用往往是復雜多變的,對引擎的要求也會多種多樣,有的時候功能強大和業(yè)務(wù)實用是兩個概念。單純依靠引擎功能的無限窮舉擴充來達避免業(yè)務(wù)代碼對引擎的侵入有的時候會適得其反。適當?shù)耐庋覣PI允許開發(fā)者進行深度的調(diào)用開發(fā)是大多數(shù)引擎的策略。但要使用好這一策略其實并不容易,需要開發(fā)者提出了對引擎結(jié)構(gòu)具備相當?shù)氖炀毘潭取U咭稽c往往成為引擎模式下最大的攔路虎。

(3)DDD領(lǐng)域驅(qū)動設(shè)計(出碼為DDD領(lǐng)域設(shè)計驅(qū)動語言)

領(lǐng)域域驅(qū)動設(shè)計(簡稱 ddd)概念來源于2004年著名建模專家Eric Evans 發(fā)表的他最具影響力的書籍:《領(lǐng)域驅(qū)動設(shè)計——軟件核心復雜性應(yīng)對之道》(Domain-Driven Design –Tackling Complexity in the Heart of Software),簡稱Evans DDD,在DDD中涵蓋了業(yè)務(wù)需求分解方法,項目工程管理方法,以及其通過倉儲庫、領(lǐng)域模型等一些列概念的定義來達到其高聚合、低耦合的設(shè)計目的。

域驅(qū)動設(shè)計早期是作為軟件架構(gòu)設(shè)計的基礎(chǔ)理論模型,是架構(gòu)師的理論必修課。但在低代碼應(yīng)用中,根據(jù)DDD驅(qū)動設(shè)計模型的低代碼工具則使得普通的開發(fā)者也可以設(shè)計出優(yōu)秀的軟件作品。這使得支持DDD理論模型成為了新一代的低代碼平臺理論標桿。而一系列領(lǐng)域模型工具的出現(xiàn)也大幅的降低了領(lǐng)域驅(qū)動設(shè)計的門檻。

領(lǐng)域建模模型:

低代碼平臺業(yè)務(wù)模型設(shè)計(低代碼平臺業(yè)務(wù)模型設(shè)計方案)

DDD領(lǐng)域驅(qū)動模式優(yōu)點:

(1)簡單業(yè)務(wù)與復雜引擎業(yè)務(wù)統(tǒng)一模型支持

領(lǐng)域驅(qū)動模式,是代碼生成與引擎模式的加強版。在領(lǐng)域驅(qū)動模型中各個引擎的功能,通過通用域、支撐域等領(lǐng)域模型進行了更高階的包裝與描述。開發(fā)者不再單獨的圍繞著獨立的引擎API來完成開發(fā),而是統(tǒng)一到領(lǐng)域服務(wù)與領(lǐng)域事件中使用統(tǒng)一的領(lǐng)域工具完成配置應(yīng)用,而簡單單一的業(yè)務(wù)模型也可以通過倉儲模版構(gòu)建復合領(lǐng)域模型聚合實體庫,最終統(tǒng)一到獨立的自定義用戶域服務(wù),開發(fā)者在基于領(lǐng)域模型時可以有機的將二者串聯(lián)起來。的以便于業(yè)務(wù)邏輯與具體實現(xiàn)的分離。而統(tǒng)一的語言環(huán)境支持則允許領(lǐng)域服務(wù)可直接觸及各引擎的DSL規(guī)則,方便于在領(lǐng)域事件中有機的完成各引擎的協(xié)同工作。

(2)以業(yè)務(wù)應(yīng)用為中心建模高聚合應(yīng)用

領(lǐng)域建模設(shè)計理念上是以具體的“業(yè)務(wù)模型”為基礎(chǔ)的,其對應(yīng)的出碼輸出物也是可直接運行的業(yè)務(wù)代碼。這一點得益于其高聚合的設(shè)計,但同時也為低代碼平臺向無代碼過渡提供了有力的建模理論支持與技術(shù)支撐。

低代碼平臺業(yè)務(wù)模型設(shè)計(低代碼平臺業(yè)務(wù)模型設(shè)計方案)

?

(3)模塊間的低耦合設(shè)計

DDD領(lǐng)域驅(qū)動設(shè)計在強調(diào)業(yè)務(wù)主導的同時,也更注重元圍繞著業(yè)務(wù)主體流程及數(shù)據(jù)的元數(shù)據(jù)以及元元數(shù)據(jù)的支持,在主體業(yè)務(wù)之外采用元數(shù)據(jù)以及元元數(shù)據(jù)模型來描述業(yè)務(wù)源本身關(guān)聯(lián)的事件、動作、交互展現(xiàn)等等。這使得業(yè)務(wù)本身的隔離性會更優(yōu)秀,業(yè)務(wù)模塊的之間的關(guān)聯(lián)關(guān)系也更清晰。在設(shè)計業(yè)務(wù)關(guān)聯(lián)以及實現(xiàn)時只需要關(guān)心業(yè)務(wù)本身的關(guān)聯(lián)即可,而對于其他的事件,展現(xiàn)交互等統(tǒng)一作為元數(shù)據(jù)與元元數(shù)據(jù)處理實現(xiàn)解耦應(yīng)用。

低代碼平臺業(yè)務(wù)模型設(shè)計(低代碼平臺業(yè)務(wù)模型設(shè)計方案)

元元數(shù)據(jù)配置

?

低代碼平臺業(yè)務(wù)模型設(shè)計(低代碼平臺業(yè)務(wù)模型設(shè)計方案)

?

DDD領(lǐng)域驅(qū)動模式缺點:

領(lǐng)域驅(qū)動設(shè)計高度抽象隔離了業(yè)務(wù)實現(xiàn),但其作為一個新型的設(shè)計模式。對應(yīng)的工具以及開發(fā)者生態(tài)還相對匱乏,對于大多數(shù)已經(jīng)通過原生代碼完成集成的業(yè)務(wù)模塊以及基于引擎DSL語言的業(yè)務(wù)模型而言,元數(shù)據(jù)以及元元數(shù)據(jù)的剝離還需有待時日。

二,OneCode低代碼引擎出碼設(shè)計

OneCode低代碼引擎是一款基于DDD驅(qū)動設(shè)計的通用低代碼引擎。OneCode 采用Java作為原生語言,通過Java元數(shù)據(jù)注解方式,實現(xiàn)了一套完整通用領(lǐng)域驅(qū)動元數(shù)據(jù)模型。并且針對領(lǐng)域模型的元數(shù)據(jù)以及支撐元數(shù)據(jù)應(yīng)用的元元數(shù)據(jù)提供了完整的配置管理以及元數(shù)據(jù)出碼設(shè)計。開發(fā)者只需要引入OneCode元數(shù)據(jù)注解包,添加相應(yīng)的元數(shù)據(jù)注解即可通過OneCode低代碼引擎渲染輸出為領(lǐng)域模型應(yīng)用。

(1)OneCode 元數(shù)據(jù)注解

低代碼平臺業(yè)務(wù)模型設(shè)計(低代碼平臺業(yè)務(wù)模型設(shè)計方案)

?

(2)OneCode 元數(shù)據(jù)注解讀取即可視化編輯

低代碼平臺業(yè)務(wù)模型設(shè)計(低代碼平臺業(yè)務(wù)模型設(shè)計方案)

?

(3)通用領(lǐng)域模型元數(shù)據(jù)設(shè)計

低代碼平臺業(yè)務(wù)模型設(shè)計(低代碼平臺業(yè)務(wù)模型設(shè)計方案)

?

(4)頁面設(shè)計器

低代碼平臺業(yè)務(wù)模型設(shè)計(低代碼平臺業(yè)務(wù)模型設(shè)計方案)

相關(guān)新聞

聯(lián)系我們
聯(lián)系我們
公眾號
公眾號
在線咨詢
分享本頁
返回頂部