`
tylike
  • 浏览: 1228 次
文章分类
社区版块
存档分类
最新评论

github开源企业级应用框架介绍CIIP

阅读更多

简介

CIIP是基于XAF开发的开源信息系统框架,经历了4个月的开发终于可以拉出来见人了。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

 

欢迎加入XAF技术交流群讨论 XAF技术应用 336090194, QQ:4603528 
分享到:
评论

相关推荐

    GitHub:GitHub企业级应用与策略.docx

    GitHub:GitHub企业级应用与策略.docx

    github 开源中国项目

    虽然描述未提供具体信息,但根据提供的博客链接,我们可以推测这篇博客可能介绍了如何利用GitHub找到并参与到开源中国的项目中,可能涵盖了项目搜索技巧、贡献指南以及参与开源社区的经验分享等内容。博客可能还会...

    教你如何用Github找开源项目(保姆级教程)

    教你如何用Github找开源项目(保姆级教程)教你如何用Github找开源项目(保姆级教程)教你如何用Github找开源项目(保姆级教程)教你如何用Github找开源项目(保姆级教程)教你如何用Github找开源项目(保姆级教程)教你...

    5个好玩的github游戏区开源项目

    对于游戏爱好者来说,GitHub 上有许多有趣的开源游戏项目,能够让我们深入了解游戏开发的过程,甚至参与其中。以下是五个涵盖 C++, Java, JavaScript 和 Rust 语言的开源游戏项目,它们不仅好玩,还能帮助我们提升...

    github 开源贡献指南中文版本.pdf

    github 开源贡献指南中文版本

    GitHub开源项目android

    在Android开发领域,GitHub是一个宝贵的资源库,汇聚了大量的开源项目,为开发者提供了丰富的代码示例、组件和工具。本文将围绕“GitHub开源项目android”这一主题,深入探讨这些开源项目的特点和价值,以及它们如何...

    Github Android开源客户端

    Github Android客户端源代码,导入后Eclipse后可直接编译运行。是开源学习的好东西。

    GitHub开源项目SlidingMenu类库

    GitHub开源项目SlidingMenu的类库,导入之后可以直接使用 教程地址:http://blog.csdn.net/yangyu20121224/article/details/9255829

    收藏的博客 -- Qt有关的GitHub-Gitee开源项目.docx

    【Qt开源框架与资源】 Qt 是一个跨平台的C++应用程序开发框架,广泛应用于桌面、移动设备和嵌入式系统的用户界面设计。它提供了一整套的库,包括图形渲染、网络通信、数据库访问等功能,使得开发者能够创建功能丰富...

    一款以github仓库为数据源的开源论坛客户端客户端使用flutter框架进行开发

    【标题】:GitHub仓库数据源的开源论坛客户端基于Flutter框架 这款开源论坛客户端的独特之处在于它利用了GitHub仓库作为其核心的数据源,提供了一个全新的交流平台。Flutter框架的使用为这款应用带来了诸多优势,...

    github开源项目photoview

    《GitHub开源项目PhotoView:实现图片的自由缩放与平移》 在移动应用开发中,用户对于图片的查看体验有着越来越高的需求,包括图片的缩放和平移操作。为满足这种需求,开发者们通常会引入一些专门处理图片视图的库...

    github开源

    【标题】"GitHub 开源" 指的是在 GitHub 上公开分享的源代码项目,它体现了开源软件的精神,即开发者可以自由地查看、使用、修改和分发代码。在这个特定的案例中,我们关注的是一个名为 "django cas" 的项目。 ...

    vue在线聊天,github开源的聊天项目

    vue在线聊天,github开源的聊天项目

    GitHub Desktop(macOS版)是由GitHub开发的完全免费且开源的基于Electron的Git客户端应用程序

    GitHub Desktop是由GitHub开发的完全免费且开源的可自定义的基于Electron的Git客户端应用程序,它允许你与GitHub和其他Git平台(包括Bitbucket和GitLab)进行交互。 它的特点包括漂亮的分区方法,可以轻松地检查带有...

    eclipse下github开源项目Context-Menu.Android

    具体实现及错误解决方法见博客http://my.csdn.net/heiya0409

    GitHub开源项目SlidingMenu类库(加注释)

    开源项目SlidingMenu提供了最佳的实现:定制灵活、各种阴影和渐变以及动画的滑动效果都很不错。不过这是一个开源库,而不是一个完整的项目,要把它作为libary引入到你自己的工程里,简单配置一下就可以实现...

    九个上热榜的Github开源库.pdf

    九个上热榜的Github开源库.pdf

    基于GitHub开源的smartknob项目设计源码下载与学习

    本项目为基于GitHub开源的smartknob项目,提供了全面的设计源码,共计227个文件,涵盖C, C++, Python, TypeScript, HTML, Shell等多种编程语言。文件类型丰富,包括C/C++源代码、库文件、配置文件、文档和图像等多种...

    GitHub开源的吃鸡版超级玛丽

    前几天一国外友人InfernoPlus竟然将吃鸡和超级玛丽相结合,自制一款网页游戏《Mario Royale》又名《超级马里奥大逃杀》,很好的诠释了万物皆可大逃杀。 参考网站见:...

Global site tag (gtag.js) - Google Analytics