开发框架CIIP
github开源:企业级应用快速开发框架CIIP WEB+WIN+移动端
简介
CIIP是基于XAF开发的开源信息系统框架。CIIP最常见的应用场景是基于数据库的企业级应用程序,例如供应链系统,ERP系统,MRP系统,CRM系统等。
CIIP支持WEB版本、Windows桌面版本,其中Web版本支持PC浏览器,响应式布式,支持平板电脑,手机版本的WEB,同时,基于PhoneGap+WEB的原生手机应用壳+网页(HTML5)应用的版本正在开发中。
CIIP支持14种数据库,含MS SqlServer,Oracle,MYSQL等常见数据库。数据库访问层支持XPO和EF两种ORM,也可以自定义第三方ORM,当然这是高级开发者的选项。在使用了XPO时,切换数据库的切换(如从sqlserver换到oracle),如果没有手动调用硬编码的sql时,是无需修改代码的。
XAF架构是多语言版本的,CIIP当然也继承了这个特性,你开发出来的应用程序可以有中文版,英文版。。。。,架构上有了支持,需要做的就是准备应用中使用的字符的语言翻译文件了,值得一提的是,这个翻译是可以调用bing.com或google.com的翻译引擎的。
那么CIIP干了点什么事呢?
开源项目地址:https://github.com/tylike/CIIP
与XAF的联系
那么,CIIP与XAF又是什么样的关系呢?下图可以看出CIIP与XAF的关系,XAF体系庞大,图中只包含了部分信息。
前面简单介绍了CIIP与XAF的关系,下面来说说CIIP中几个模块使用的一些关键技术:
建模功能
CIIP中的业务模型是基于ORM的充血模型,我个人很喜欢这种方式,但ORM多数是基于.Net类型的,而.Net又是静态类型语言,虽然后面.net中增加了dynamic和System.Dynamic.DynamicObject等态类型,但不幸的是xpo中并不支持(EF中是否支持并未考试,也希望了解的朋友留言指点)
题外话:我最想要的是运行时构建业务对象,但又同时使用充血模型的概念,相当于自己构建一个简单的类型系统,管理这些元数据.我在框架的开发经历了很多年,由于整体的复杂度,开发周期和个人精力原因,最终先放弃了从零开始构建类型系统的做法.但我有种预感,后面我还会干这个事:D
所以,CIIP的建模功能就是创建ORM对象的过程.CIIP中当前开发了两种形式的建模:
注:CIIP的定位是在win中做"设计"相关的动作,在Web上面做业务系统的展示,以前我尝试过在web下面做设计,并且也出了一个开源版本,开源地址:https://github.com/tylike/InfoMatrix 但用起来总感觉不是很舒服.最终决定用win做设计比较好.
上图中,用户业务,可以理解成为一个简单的建表过程,但比表的概念有更多扩展,比如关联的聚合子表,也可以做操作(相当于建立外键).
上图展示了建立普通用户业务模型的界面,除了与数据库建表相类似的界面外,比如名称,"属性"即表字段,长度,类型以外,更多使用的是编程中OO的概念,比如"继承",现在使用的是单根继承概念,与.net中的类型继承相同,事实上生成的类与这个界面是对应的.
这个过程就是生成类的过程.再比如:属性的类型,直接使用了其他新建业务的类型,这也是OO的体现,而不用由用户想着建立键对应关系.
另外,关于继承的概念,在ORM中,由于.net的限制,只使用了单根继承,这其实不怎么样,而用关系型数据库中可以多次inner join多个表,对应着多继承是更好的选择.可惜啊可惜,我没有发现哪个ORM干了这事,XAF中的DC机制实现了类似的功能,使用接口做ORM模型,效果很不错,但,性能又下降了一些,有些行为实现的又不是很好.
表单功能
接下来再来看看表单的建立:
表单的实质是两个普通业务对象的相加,即,主子表结构,而这种形式是非常常见的,比如一套ERP中会有N百个表单,所以CIIP把这种形式特殊化,把主子表的内容放到一起,而一些联系可以自动化的实现出来.
举个最简单的例子:表单叫"采购订单"时,子表内容叫"采购订单明细",这是有规律的,没必要一个字一个字打上去,子表的内容自动生成了就好.自动化节省时间.
建立好模型后,工具中有个生成系统的按钮,按下之后,系统就调用roslyn编译,并生自动生成加载该dll了.
这时,XAF的机制开始工作了,TA开始生成数据库,生成表,生成字段,生成界面.是的,这些全是自动化的.
你为什么加班?就因为你的工作中有无数个无聊的重复工作在做.程序员每天在帮助业务人员做"自动化",做"智能化",然后他们自己的工作却没有这么自动智能,这个工作就需要框架来做!
简单业务逻辑
你当然会质疑,上面的功能无论如何,只是个建表功能,只是做了一些自动化,现实中的复杂业务,根本不行,这个只能做简单的东东!
是的,接下来很有必要介绍一下业务逻辑的实现,CIIP中调用了Roslyn+AvalonEdit,TA们可以帮助有代码经验的实施人员,或是程序员来书写业务逻辑.
上图以"仓库单据基类"为例,此单据是"对象"当然会有事件,对应的事件将在对应的时刻被触发,此时,我们可以加入对应的代码,进行数据控件.
代码编辑支持智能感知和实时错误验证:
上图代码中故意做了一个错误,var x = 10/0;按下回车后,下面就会报出错误了.
这里使用的AvalonEdit+Roslyn,以后在CIIP中应用的场景很多,而且功能也超级强大,比如,工资管理软件中,需要工式的编写.
这个模块花费了我很多时间,纠结很多次,最终找到了这个方案,也最为满意,或是超出意料的满意,可以扩展的事情太多了,比如自己定义DSL语言都没有问题.
流程
建模之后,就需要处理流程了:
CIIP中目前内置了供应链的一些单据,并内置了一些简单流程,这些流程是可以运行时配置的,下图是流程设计器:
下图是采购询价单生成采购合同的配置,在上图中即为一条线:
这里,主表映射和明细映射下面写的代码,即如何做默认附值,CIIP自动根据类型做出对应关系,并由用户来修改,这里使用的还是代码编辑器.
可以看到单据转换流程中用到了图形设计器,在CIIP中这个控件使用的也相当广泛,其中包含:
1.系统导航图,可设计,也可以由用户使用进行系统功能的导航.
2.上图中的单据转换流程设计器.
3.状态机设计器
4.单据真实进行情况+状态机运行情况,以图形方式展示给用户查看,非常直观.
在http://www.uims.top/post/tech1中也简单介绍了一些流程相关的内容.
商务智能Dashboard
CIIP中还包含了商务智能的功能,在CIIP结合供应链的DEMO系统中,正在制作此部分的内容,所以还没有中国式的图可以截,先上几张其他系统中全名用的此模块的,给大家一个直观的理解吧,这里是分析结果的显示界面:
这并没有什么,但是Dashboard的设计功能却是震撼的:
在BI数据分析时,数据源可以直接连接到SQL数据源,同样支持14种常见数据库,也可以连接SSIS等专门的数据源,可以从存储过程\SQL语句查询结.
而且设计界面,是完全拖拽完成的!
WEB,平板,手机版响应式布局支持
下面简单上两张web版本的图片吧:
可以在手机上运行的响应式布局:
普通的WEB
我不能在一篇文章中写太多内容,后面我会详细介绍每个模块的技术问题.
开源项目地址:https://github.com/tylike/CIIP
转载请注明出处。多谢! 欢迎加我微信: admiralcn 或扫码:
开发框架CIIP的更多相关文章
- github开源:企业级应用快速开发框架CIIP WEB+WIN+移动端
简介 CIIP是基于XAF开发的开源信息系统框架.CIIP最常见的应用场景是基于数据库的企业级应用程序,例如供应链系统,ERP系统,MRP系统,CRM系统等. CIIP支持WEB版本.Windows桌 ...
- 没有技术说明文档的开源都是耍流氓:微软Roslyn编译即服务在CIIP中具体应用(上)
前段时间我发布了 github开源:企业级应用快速开发框架CIIP WEB+WIN+移动端,很多园友们都表示支持并与我探讨相关技术问题,上篇中我也承诺会写相关的技术文章,本篇就来介绍一下建模模块中使用 ...
- XAF学习资源整合大全
近期有很多XAF初学者与我联系,我多数时间在重复很多入门问题,所以决定整理一篇XAF资源列表,方便大家查找资料,也请知晓其他资源的人留言或与我联系,我将新资源追加到本篇文章中,方便更多人. 一.本博客 ...
- Enterprise Solution 3.1 企业应用开发框架 .NET ERP/CRM/MIS 开发框架,C/S架构,SQL Server + ORM(LLBL Gen Pro) + Infragistics WinForms
行业:基于数据库的制造行业管理软件,包含ERP.MRP.CRM.MIS.MES等企业管理软件 数据库平台:SQL Server 2005或以上 系统架构:C/S 开发技术 序号 领域 技术 1 数据库 ...
- 从零开始编写自己的C#框架(27)——什么是开发框架
前言 做为一个程序员,在开发的过程中会发现,有框架同无框架,做起事来是完全不同的概念,关系到开发的效率.程序的健壮.性能.团队协作.后续功能维护.扩展......等方方面面的事情.很多朋友在学习搭建自 ...
- CRL快速开发框架系列教程十三(嵌套查询)
本系列目录 CRL快速开发框架系列教程一(Code First数据表不需再关心) CRL快速开发框架系列教程二(基于Lambda表达式查询) CRL快速开发框架系列教程三(更新数据) CRL快速开发框 ...
- CRL快速开发框架系列教程十二(MongoDB支持)
本系列目录 CRL快速开发框架系列教程一(Code First数据表不需再关心) CRL快速开发框架系列教程二(基于Lambda表达式查询) CRL快速开发框架系列教程三(更新数据) CRL快速开发框 ...
- CRL快速开发框架系列教程十一(大数据分库分表解决方案)
本系列目录 CRL快速开发框架系列教程一(Code First数据表不需再关心) CRL快速开发框架系列教程二(基于Lambda表达式查询) CRL快速开发框架系列教程三(更新数据) CRL快速开发框 ...
- CRL快速开发框架系列教程十(导出对象结构)
本系列目录 CRL快速开发框架系列教程一(Code First数据表不需再关心) CRL快速开发框架系列教程二(基于Lambda表达式查询) CRL快速开发框架系列教程三(更新数据) CRL快速开发框 ...
随机推荐
- hdu2243考研路茫茫——单词情结
Problem Description 背单词,始终是复习英语的重要环节.在荒废了3年大学生涯后,Lele也终于要开始背单词了. 一天,Lele在某本单词书上看到了一个根据词根来背单词的方法.比如&q ...
- winow.open打开窗口被拦截的解决方法
自己遇到的使用window.open打开新窗口被拦截的几种情况(使用的chrome浏览器,其他浏览器未测): 第一次:window.open("www.baidu.com"),打开 ...
- vim highlight whitespace at end of line and auto delete them
install Vundle.vim mkdir ~/.vim/bundle git clone https://github.com/gmarik/Vundle.vim.git ~/.vim/bun ...
- linux安装php5.3
安装php的依赖包 [root@localhost admin]# unzip libxml2-2.7.8.tar.zip [root@localhost admin]#tar zvxf libxml ...
- yii2 安装过程中的问题及解决方法
一.php版本要求5.4+,如果使用wamp组合包,建议更换 二.各种模块的支持,一般只要修改php.ini文件,去掉相应模块前的注释即可. 注意,Intl extension模块的支持需要将 ...
- jquery.validate的效验方式
jQuery校验官网地址:http://bassistance.de/jquery-plugins/jquery-plugin-validation 原文地址:http://www.cnblogs.c ...
- FileProvider是个什么东西?
FileProvider是个什么东西? 在<读取并监控文件的变化>中,我们通过三个简单的实例演示从编程的角度对文件系统做了初步的体验,接下来我们继续从设计的角度来继续认识它.这个抽象的文件 ...
- python魔术方法
在类中有一些特殊的方法具有特殊的意义,比如__init__和__del__方法,它们的重要性我们已经学习过了. 一般说来,特殊的方法都被用来模仿某个行为.例如,如果你想要为你的类使用x[key]这样的 ...
- 鼠标拖放div 实现
Javascript的mousemove事件类型是一个实时响应的事件,当鼠标指针的位置发生变化时(至少移动1个像素),就会触发mousemove事件.该事件响应的灵敏度主要参考鼠标指针移动速度的快慢, ...
- matlab中文论坛视频谷普教程MATLAB压缩包介绍
matlab中文论坛视频谷普教程MATLAB压缩包介绍 我也正在学习这个软件 ,看到这个教程就在这里分享了,希望大家喜欢!Matlab 初学者视频教学1. Matlab视频:Matlab中文论坛为新手 ...