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

  1. 极简的分布式系统架构

    根据需要可单节点或集群部署,如下图所示:

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

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

  3. 集成强一致性数据存储:

    框架基于Raft及RocksDB实现了分布式强一致性的存储引擎,由于分布式存储天生的特性,随着数据量的不断增长可以通过低成本的方式横向扩展(Scaleout)节点,并且在集群的多数派节点存活的条件下可保障系统连续不间断运行。

目前框架还在开发过程中,现就已完成的部分做一个技术预览,让我们开始体验吧:

安装与启动:

注意:目前仅支持Ubuntu18.04

安装依赖包

$>sudo apt install libsnappy1v5 libcrypto++6 libgnutlsxx28 libxml2 libnuma1 libhwloc5 libc-ares2 libatomic1 libunistring2

安装运行时

$> 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,密码:760wb,登录后跳转至框架集成开发环境界面。

实体模型(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>
<el-button-group>
<el-button type="primary" icon="fas fa-plus-circle"> 新建</el-button>
<el-button type="primary" icon="fas fa-search" @click="loadData"> 查找</el-button>
</el-button-group>
<el-input v-model="qname" placeholder="查询关键词" icon="search" style="width:150px" size="small">
</el-input> <el-table :data="emps" border highlight-current-row>
<el-table-column prop="Name" label="名称" width="220">
</el-table-column>
<el-table-column prop="Account" label="帐号">
</el-table-column>
</el-table>
</div>

脚本示例代码

@Component
export default class EmpList extends Vue {
qname: string //查询关键词
emps = [] //员工列表 // 调用服务加载员工列表
loadData() {
sys.Services.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

AppBoxFuture(一): Hello Future!的更多相关文章

  1. AppBoxFuture(五): 分布式文件存储-Store Everything

      本来本篇是想介绍前端组件化开发用户界面,发现框架还未实现文件存储,原本计划是后续设计开发的,索性把计划提前,所以本篇将介绍基于Raft实现分布式的文件存储引擎. 一. 实现思路   既然是分布式存 ...

  2. AppBoxFuture(二): Say goodbye to sql!

      信息管理类应用系统离不开关系数据存储,目前大家基本都使用的是传统的数据库如MySql.Postgres等.作者从事信息化建设十多年,个人认为传统的数据库存在以下的问题: 扩展问题:   系统数据的 ...

  3. 面向未来的友好设计:Future Friendly

    一年前翻译了本文的一部分,最近终于翻译完成.虽然此设计思想的提出已经好几年了,但是还是觉得应该在国内推广一下,让大家知道“内容策略”,“移动优先”,“响应式设计”,“原子设计”等设计思想和技术的根源. ...

  4. 线程笔记:Future模式

    线程技术可以让我们的程序同时做多件事情,线程的工作模式有很多,常见的一种模式就是处理网站的并发,今天我来说说线程另一种很常见的模式,这个模式和前端里的ajax类似:浏览器一个主线程执行javascri ...

  5. 第二篇 Entity Framework Plus 之 Query Future

    从性能的角度出发,能够减少 增,删,改,查,跟数据库打交道次数,肯定是对性能会有所提升的(这里单纯是数据库部分). 今天主要怎样减少Entity Framework查询跟数据库打交道的次数,来提高查询 ...

  6. Eclipse调试Android App若选择“Use same device for future launches”就再也无法选择其他设备的问题

    在狂批了某供应商的多媒体控制App有多烂后,夸下海口自己要做一个也是分分钟的事.当然要做好不容易,要超过他们的烂软件还是有信心的.过程中遇到各种坑,其中之一如下 刚开始只使用一个平板进行调试,老是弹出 ...

  7. java Future 接口介绍

    (转自:http://blog.csdn.net/yangyan19870319/article/details/6093481) 在Java中,如果需要设定代码执行的最长时间,即超时,可以用Java ...

  8. java多线程系类:JUC线程池:06之Callable和Future(转)

    概要 本章介绍线程池中的Callable和Future.Callable 和 Future 简介示例和源码分析(基于JDK1.7.0_40) 转载请注明出处:http://www.cnblogs.co ...

  9. 架构师养成记--9.future模式讲解

    什么是future模式呢?解释这个概念之前我们先来了解一个场景吧,财务系统的结账功能,这个功能可能是每个月用一次,在这一个月中相关的数据量已经积累得非常大,这一个功能需要调用好几个存储过程来完成.假如 ...

随机推荐

  1. QT—QTextEdit控件显示日志

    功能:利用QTextEdit开发一个日志显示窗口.没有太多操作,需要实现的是日志自动向上滚动,总体的日志量可以控制在x行(比如300行)以内:其他的应用功能我后面继续添加 #include <Q ...

  2. django 源码报错

    启动django ,一直提示一个 AttributeError: 'str' object has no attribute 'decode' 哥,查了一下午google,就怕是自己判断错了,最后在一 ...

  3. Vue(MVVM)、React(MVVM)、Angular(MVC)对比

    前言 昨天阿里内推电面一面,面试官了解到项目中用过Vue,就问为什么前端框架使用Vue而不适用其他的框架,当时就懵了.因为只用过Vue,不了解其他两个框架,今天就赶紧去了解一下他们之间的区别.大家发现 ...

  4. pyqt5之简单窗口的创建

    在学完tkinter后,发现tkinter在布局方面特别的不方便(Tkinter资料:http://effbot.org/tkinterbook/tkinter-index.htm),因此学习pyqt ...

  5. Git生成ssh密钥指定文件

    ssh-keygen 使用的时候可以直接使用 -f 参数 指定密钥保存文件,省去后面生成成功后再提示选择保存文件: ssh-keygen -t rsa -C "abc@example.com ...

  6. Android Studio 直播弹幕

    我只是搬运:https://blog.csdn.net/HighForehead/article/details/55520199 写的很好很详细,挺有参考价值的 demo直通车:https://do ...

  7. [文章汇总]ASP.NET Core框架揭秘[最近更新:2018/10/31]

    之前一段时间都在个人公众号账号“大内老A”发布关于ASP.NET Core的系列文章,很多人留言希望能够同步到这里,所以在这里 对这些文章做一个汇总,以便于PC端阅读.如果说微软官方文档主要关于ASP ...

  8. Eclipse极致性能调优

    直接复制以下到eclipse.ini里面 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 -Xverify:n ...

  9. Redis基础入门,Redis的优点也特点,Redis五种数据类型

    Redis是一个开源,高级的键值存储和一个适用的解决方案,用于构建高性能,可扩展的Web应用程序. 1.Redis的主要特点 Redis有三个主要特点,使它优越于其它键值数据存储系统 - Redis将 ...

  10. Android 实现卡片翻转的动画(翻牌动画)

    Android 实现卡片翻转的动画(翻牌动画) 需求描述 点击卡片,卡片翻转过来显示内容. 点击左边的卡片,将卡片翻转显示右边的图片结果. 功能实现 因为要翻转所以使用动画来完成翻转的动画.动画分为两 ...