AppBoxFuture(低代碼快速開發(fā)框架)- Hello Future!(低代碼開源框架)
AppBoxFuture(低代碼快速開發(fā)框架): Hello Future!(低代碼開源框架)
AppBoxFuture是一個低代碼快速應(yīng)用框架(Rapid Application Framework),是作者十幾年從事信息化建設(shè)的經(jīng)驗(yàn)結(jié)晶??蚣芫邆湟韵乱恍┨厣?/p>
- 極簡的分布式系統(tǒng)架構(gòu):
根據(jù)需要可單節(jié)點(diǎn)或集群部署,如下圖所示:
- 模型驅(qū)動開發(fā)(MDD):
框架將應(yīng)用系統(tǒng)所涉及的數(shù)據(jù)結(jié)構(gòu)、業(yè)務(wù)邏輯、用戶界面、工作流、報表、權(quán)限等抽象為各類型的模型,通過組合模型以形成完整的應(yīng)用系統(tǒng),通過調(diào)整模型以適應(yīng)業(yè)務(wù)的需求變更。由于模型具備抽象性開發(fā)人員可以快速根據(jù)業(yè)務(wù)需求構(gòu)建相應(yīng)的模型;由于模型具備規(guī)范性約束,可以有效的保障不同技能的開發(fā)人員開發(fā)出高質(zhì)量的系統(tǒng);由于模型具備關(guān)聯(lián)性約束,可以有效的保障調(diào)整模型時不引入新的缺陷。
- 集成強(qiáng)一致性數(shù)據(jù)存儲:
框架基于Raft及RocksDB實(shí)現(xiàn)了分布式強(qiáng)一致性的存儲引擎,由于分布式存儲天生的特性,隨著數(shù)據(jù)量的不斷增長可以通過低成本的方式橫向擴(kuò)展(Scaleout)節(jié)點(diǎn),并且在集群的多數(shù)派節(jié)點(diǎn)存活的條件下可保障系統(tǒng)連續(xù)不間斷運(yùn)行。
目前框架還在開發(fā)過程中,現(xiàn)就已完成的部分做一個技術(shù)預(yù)覽,讓我們開始體驗(yàn)吧:
安裝與啟動:
注意:目前僅支持Ubuntu18.04
安裝依賴包
$> sudo apt install libjemalloc ragel libhwloc libnuma libpciaccess libcrypto libboost-all libxml2 xfslibs libgnutls28 liblz4 libsctp systemtap-sdt libyaml-cpp libc-ares
安裝運(yùn)行時
$> git clone https://github.com/enjoycode/appbox.deploy.git
啟動集群的第一個節(jié)點(diǎn)
$> sudo ./appbox –init=10.211.55.10:9000 –peer=1.1.1
–init 指明初始化集群的第一個節(jié)點(diǎn),請修改為本機(jī)地址;
–peer 指明本節(jié)點(diǎn)的編號, [數(shù)據(jù)中心編號].[機(jī)架編號].[機(jī)器編號]
開發(fā)體驗(yàn)
打開瀏覽器(建議新版Chrome),輸入http://10.211.55.10:5000/dev/index.html
出現(xiàn)登錄界面,輸入用戶名:Admin,密碼:760wb,登錄后跳轉(zhuǎn)至框架集成開發(fā)環(huán)境界面。
實(shí)體模型(EntityModel對應(yīng)數(shù)據(jù)結(jié)構(gòu))
暫用系統(tǒng)內(nèi)置的員工模型作為示例(注意:Account成員上有惟一索引)。
服務(wù)模型(ServiceModel對應(yīng)業(yè)務(wù)邏輯)
在左側(cè)模型樹內(nèi)選擇Services節(jié)點(diǎn),點(diǎn)擊主菜單“New->Service”,彈出新建對話框輸入服務(wù)名稱:EmpService后點(diǎn)擊OK,然后從左側(cè)模型樹內(nèi)展開并選擇新建的EmpService,出現(xiàn)服務(wù)模型編輯界面,輸入以下示例服務(wù)代碼:
注意:服務(wù)代碼編輯時有智能提示,在IDE底部的\”Problems\”會提示代碼錯誤
using System;using System.Threading.Tasks;namespace sys.ServiceLogic{ public class EmpService { public async Task<Entities.Emploee[]> GetAll(string name) { var q = new TableScan<Entities.Emploee>(); if (!string.IsNullOrEmpty(name)) q.Filter(t => t.Name == name); return await q.ToListAsync(); } }}
點(diǎn)擊主菜單“Save”保存,并點(diǎn)擊主菜單“Publish”彈出發(fā)布對話框,點(diǎn)擊Ok將變更的模型發(fā)布至運(yùn)行時。此時框架會將虛擬的業(yè)務(wù)邏輯代碼編譯轉(zhuǎn)換為運(yùn)行時代碼,并由運(yùn)行時容器管理。
視圖模型(ViewModel對應(yīng)用戶界面)
在左側(cè)模型樹內(nèi)選擇Views節(jié)點(diǎn),點(diǎn)擊主菜單“New->View\”,彈出新建對話框輸入視釁名稱:EmpList后點(diǎn)擊OK,然后從左側(cè)模型樹內(nèi)展開并選擇新建的EmpList,出現(xiàn)視圖模型編輯界面,輸入以下示例代碼:
注意:視圖模型包括模版(Template)、腳本(Script)及樣式(Style)代碼,另點(diǎn)擊\”Preview\”可展開實(shí)時預(yù)覽界面。
- 模版示例代碼:
<div> <e-button-group> <e-button type=\”primary\” icon=\”fas fa-plus-circle\”> 新建</e-button> <e-button type=\”primary\” icon=\”fas fa-search\” @click=\”loadData\”> 查找</e-button> </e-button-group> <e-input v-model=\”qname\” placeholder=\”查詢關(guān)鍵詞\” icon=\”search\” style=\”width:150px\” size=\”small\”> </e-input> <e-table :data=\”emps\” border highlight-current-row> <e-table-column prop=\”Name\” label=\”名稱\” width=\”220\”> </e-table-column> <e-table-column prop=\”Account\” label=\”帳號\”> </e-table-column> </e-table></div>
- 腳本示例代碼
@Componentexport default class EmpList extends Vue { qname: string //查詢關(guān)鍵詞 emps = [] //員工列表 // 調(diào)用服務(wù)加載員工列表 loadData() { sys.Services.EmpService.GetAll(this.qname).then(res => { this.emps = res }).catch(err => { this.$message.error(\’加載失敗\’) }) }}
此時在預(yù)覽界面點(diǎn)擊“查找”按鈕,即可看到列表結(jié)果,在“查詢關(guān)鍵詞”輸入“Admin“即可過濾。
小結(jié)
本篇主要體驗(yàn)框架的集成開發(fā)環(huán)境如何快速開發(fā)一個列表視圖,并綁定調(diào)用相應(yīng)的業(yè)務(wù)服務(wù),下篇“Say goodbye to Sql“將介紹框架集成的強(qiáng)一致性分布式存儲。如果您有問題或Bug報告,請留言或在https://github.com/enjoycode/appbox.deploy提交Issue。