AppBoxFuture(一): Hello Future!

  AppBoxFuture是一个快速应用框架(Rapid Application Framework),是做者十几年从事信息化建设的经验结晶。框架具有如下一些特点:html

  1. 极简的分布式系统架构
    根据须要可单节点或集群部署,以下图所示:
    前端

  2. 模型驱动开发(MDD):vue

    框架将应用系统所涉及的数据结构、业务逻辑、用户界面、工做流、报表、权限等抽象为各种型的模型,经过组合模型以造成完整的应用系统,经过调整模型以适应业务的需求变动。因为模型具有抽象性开发人员能够快速根据业务需求构建相应的模型;因为模型具有规范性约束,能够有效的保障不一样技能的开发人员开发出高质量的系统;因为模型具有关联性约束,能够有效的保障调整模型时不引入新的缺陷。c++

  3. 集成强一致性数据存储: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

实体模型(EntityModel对应数据结构)

注意:还没有实现新建及修改模型,暂用系统内置的员工模型做为示例(注意:Account成员上有唯一索引)。

服务模型(ServiceModel对应业务逻辑)

在左侧模型树内选择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将变动的模型发布至运行时。此时框架会将虚拟的业务逻辑代码编译转换为运行时代码,并由运行时容器管理。

视图模型(ViewModel对应用户界面)

在左侧模型树内选择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

相关文章
相关标签/搜索