AppBoxFuture是一個快速應用框架(Rapid Application Framework),是做者十幾年從事信息化建設的經驗結晶。框架具有如下一些特點:html
極簡的分佈式系統架構
根據須要可單節點或集羣部署,以下圖所示:
前端
模型驅動開發(MDD):vue
框架將應用系統所涉及的數據結構、業務邏輯、用戶界面、工做流、報表、權限等抽象爲各種型的模型,經過組合模型以造成完整的應用系統,經過調整模型以適應業務的需求變動。因爲模型具有抽象性開發人員能夠快速根據業務需求構建相應的模型;因爲模型具有規範性約束,能夠有效的保障不一樣技能的開發人員開發出高質量的系統;因爲模型具有關聯性約束,能夠有效的保障調整模型時不引入新的缺陷。c++
集成強一致性數據存儲:git
框架基於Raft及RocksDB實現了分佈式強一致性的存儲引擎,因爲分佈式存儲天生的特性,隨着數據量的不斷增加能夠經過低成本的方式橫向擴展(Scaleout)節點,而且在集羣的多數派節點存活的條件下可保障系統連續不間斷運行。github
目前框架還在開發過程當中,現就已完成的部分作一個技術預覽,讓咱們開始體驗吧:typescript
注意:目前僅支持Ubuntu18.04c#
$> sudo apt install libjemalloc ragel libhwloc libnuma libpciaccess libcrypto++ libboost-all libxml2 xfslibs libgnutls28 liblz4 libsctp systemtap-sdt-dev libyaml-cpp libc-ares
$> git clone https://github.com/enjoycode/appbox.deploy.git
$> sudo ./appbox --init=10.211.55.10:9000 --peer=1.1.1
--init 指明初始化集羣的第一個節點,請修改成本機地址;
--peer 指明本節點的編號, [數據中心編號].[機架編號].[機器編號]後端
打開瀏覽器(建議新版Chrome),輸入http://10.211.55.10:5000/dev/index.html
出現登陸界面,輸入用戶名:Admin,密碼:任意(還沒有作驗證),登陸後跳轉至框架集成開發環境界面。api
注意:還沒有實現新建及修改模型,暫用系統內置的員工模型做爲示例(注意:Account成員上有唯一索引)。
在左側模型樹內選擇Services節點,點擊主菜單「New->Service」,彈出新建對話框輸入服務名稱:EmpService後點擊OK,而後從左側模型樹內展開並選擇新建的EmpService,出現服務模型編輯界面,輸入如下示例服務代碼:
注意:服務代碼編輯時有智能提示,在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(); } } }
點擊主菜單「Save」保存,並點擊主菜單「Publish」彈出發佈對話框,點擊Ok將變動的模型發佈至運行時。此時框架會將虛擬的業務邏輯代碼編譯轉換爲運行時代碼,並由運行時容器管理。
在左側模型樹內選擇Views節點,點擊主菜單「New->View",彈出新建對話框輸入視釁名稱:EmpList後點擊OK,而後從左側模型樹內展開並選擇新建的EmpList,出現視圖模型編輯界面,輸入如下示例代碼:
注意:視圖模型包括模版(Template)、腳本(Script)及樣式(Style)代碼,另點擊"Preview"可展開實時預覽界面
<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="查詢關鍵詞" 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>
@Component export default class EmpList extends Vue { qname: string //查詢關鍵詞 emps = [] //員工列表 // 調用服務加載員工列表 loadData() { this.$channel.invoke('sys.EmpService.GetAll', [this.qname]) .then(res => { this.emps = res }).catch(err => { this.$message.error('加載失敗') }) } }
此時在預覽界麪點擊「查找」按鈕,便可看到列表結果,在「查詢關鍵詞」輸入「Admin「便可過濾。
本篇主要體驗框架的集成開發環境如何快速開發一個列表視圖,並綁定調用相應的業務服務。下篇「Say goodbye to Sql「將介紹框架集成的強一致性分佈式存儲。 目前做者一我的在開發這套框架,想尋志同道合者(前端ts, vue, 後端c++ c# rocksdb)來共同完成它,若有意向或問題請發郵件聯繫enjoycode@icloud.com