XAF信息系统快速框架介绍

2023-11-23 10:20

本文主要是介绍XAF信息系统快速框架介绍,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

转载自:http://www.cnblogs.com/foreachlife/p/xaf.html

Xaf也算是本人最早使用的ORM系统了,受朋友所托转载下,哈哈

我们还是说说信息系统开发效率这件事吧,在我的印象中,传统的开发方式是这样的:

 

  • 最初

分析需求->建立数据库->画界面->调用Ado.Net->调用SQL语句(或都再写点存储过程)

其中画界面,不管是webform还是mvc都是跑不了的。

做了N个大小项目后,每一步都让我恶心得想吐,以客户信息维护为例:

建表:客户(姓名,生日,地址,电话,联系人)

画界面:上面的字段挨个拖一遍。

写SQL:增删改查,还是围着数据库表来一遍。

当然还要处理什么注入攻击之类的。如果你正好使用了某套数据库类库,这里可能会让人省点心。

  • 后来

一个信息系统中多数都是这样的操作,没完没了的CRUD,终于,开始流行代码生成了,我也站在风口浪尖上,偶遇了Raptier.

CodeProject上还有介绍它的文章,难得。开发效率果然提升了,当时公司要做网站后台,我在Raptier中设置一下,一个简单的后台就生成了。

那年我刚来上海,连续三个月,每个月和老板提一次涨工资的事情,每次都答应了。后来想想应该是起薪就要得太低了^_^

之后一段时内CodeSmith应该流行起来了,当然,代码生成的问题很多,比如生成之后要修改,可以直接改代码,再去改库结构,又要重新生成。结果以前修改过的代码就被覆盖了。当时c#还没有partial关键字。所以不管怎么弄都挺难受的。

  • 再后来

因为代码生成有种种的问题,我决定自己开发框架,现在想想也是非常可笑的事情,是想做信息系统的通用型框架,可以说是没有需求,也可以说是需求无限大。这可是大忌讳。做着做着感觉这辈子可能也做不完,从数据库访问到界面,再到功能模块,什么工作流状态机,单据编号,数据导入,报表打印,简直没救了。

做到控件时我想还是去找找现成的吧,这一找不要紧,直接导致了框架的开发失败,因为我找到了我想象中的框架,所以就弃了开发^_^

我发现了XAF!大约是在2009年,当时版本是8.X版本。

我开始学习XAF,学习得很顺利,感觉这就是为我开发的,也经常对着屏幕傻笑,说:怎么和我想的一样呢?

当然其实我没有那么高明,只是发自内心的高兴加点自恋!

 

ORM来了,不过我没有赶上这波,直接跳格了,因为XAF中使用了XPO ORM所以才接触到它,当时的Entity Framework简直就是惨不忍睹。用EF朋友不要拍我,确实不咋地,但LINQ为了帮助EF确实还是很好的东东。补充一句现在EF感觉也不怎么样,XPO都停止开发了。为什么EF不怎么样?他要是支持接口类型做为实体映射就好了,支持不同的数据库也很周折。

 

  • 现在

现在我一直用XAF,看到很多码农还在苦痛挣扎,我来分享一下使用经验,让更多的码农解脱吧,解脱一部分也好!腾点时间出来,陪家人,陪孩子,或因开发效率提高,软件质量提高,多拿一点点奖金,过个愉快的圣诞节吧!

当然,如果你要是认为我是XAF的推销员,并且戴着有色眼睛看商业软件,那请自便吧,visual studio也是商业的,所以才如此的出色!不过话说回来DEV公司确实该给我这个死忠点辛苦费!

XAF优点

一、一次编码,多种平台同时使用

通过一次代码编码写,可以同时产生四种项目:

1,Web项目(b/s)

2,win项目(c/s)

3,平板电脑(beta)

4,移动端(beta)

其中web/win是两个项目,3,4都是web项目,只是使用了不同的适应界面可以在移动设备和平板电脑上进行浏览操作等。

在Sliverlight刚出现的一段时间内,XAF曾试图支持Silverlight版本,不过由于HTML5的兴起,微软至今应该把Sliverlight放到角落里了,所以也导致了Dev公司不支持Sliverlight了。不过他们有些Sliverlight的控件。

WPF也算是不死不活的状态,至少我看到的应用很少。VS除外,那是MS自己的东西:D

sliverlight如果没有HTML5的出现,是个不错的东西,太可惜了,HTML5的兴起,又将我们拉回该死的javascript开发中来了。

二、数据库支持

这应该是XPO的优点,支持14种数据库,SqlServer,Oracle,MySql,DB2.....常见的库都支持了。切换数据库时,无需修改源码,当然如果你开始用了Oracle并且手工调用了SQL语句,在sqlserver中肯定是不能正确执行的。

支持Entity Framework,虽然我不用这个,但是DEV还是支持了,可能是因为M$太强的原因吧。

三、国际化本地化支持

XAF支持多国语言版本,应用程序开发完成后,可以在应用程序模型中生成各种语言的本地化翻译文件,这也算是高大上的支持了吧。

四、自动机制

•由领域对象开始
•自动建立数据库
•自动建立界面
▫列表界面
▫详细界面
▫搜索界面
•内置增删改查,无需SQL编程
五、AOP应用
AOP是面向方面的应用,XAF中被应用到了极致,比如,系统内置的 保存按钮,无论你有多少个业务对象,只要这一个保存按钮,它们的行为是一致的,都是保存到数据库的表中去,如果你需要修改保存按钮的文字,只要在一个地方修改,整个系统中都变了。
模块化应用:
假如我们开发一个Excel数据导入功能,同样,我们可以应用于所有业务对象中去,做一次导入功能,所有地方立即使用。XAF内置了非常丰富的元数据,我们可以使来用。
控件的复用:
系统中有很多地方需要用到一个控件,比如时间选择,XAF默认没有这些控件时,我们可以开发出来,并可以设置为默认控件,例如应用到Timespan类型上去,只需一步,整个系统都会应用此控件。
XAF中有许多这样的自动机制,能一次解决的,坚决不用做两次,拒决重复,拒决复制。
六、元数据管理
元数据是指我们的程序中代码自身的信息,比如类叫什么名字,它继承自哪个类,实现了哪些接口,有哪些Attribute,有哪些属性?
是在,在.net中,用反射可以取得到这些信息。在信息系统开发中,这个元数据会得到扩展,比如这个类将会在界面上显示的文字是什么,填写数据时有哪些要求,过滤条件是什么等等 。
你会说,这不就是我们自己写的代码吗?
在XAF中这些信息也是需要维护的,我们在给客户写程序时是在帮助客户管理他们的信息。他们是信息化水平提高了。但我们自己的代码,自己的系统本身也是一个信息量庞大的需要管理的内容。我们如果不是处处考虑规划程序本身的内容,那后面乱做一团也是很正常的事情了。
看面向对象的软件设计中,不正是使用了各种概念对这些内容进行了规划吗?
于是有了一个名词叫元编程,也是让人着迷的东西。
那么元数据管理有什么用呢?它还是和AOP概念结合使用方显功效的。
比如:我想让所有拥有“名称”属性的类型,都在界面显示为红色,我们可以使用编程方式
复制代码
foreach(var x in classes)
{if(x.members.contains('名称')){var member = x.members["名称"];member.backColor = Color.Red;}
}
复制代码

 

这只是一段伪代码,如果用传统的开发方式,每个界面这样操作一次,可能会产生很多错误吧,最大的问题是,我们需要那么笨的处理日常问题吗?
我们为什么没有简单方法,节省出时间,不做那种无聊的修改呢?
另外,元数据也是可以扩展的,内置的没有提供的,我们可以自己实现。 
七、DomainComponents技术
通常被XAF开发人员简称为DC技术,DC技术是使用接口定义业务逻辑对象的,在EF中,我们通常是用class来定义一个业务对象,使用接口来定义业务逻辑会更快更简捷,我认为最大的一个好处是实现了多继承,如:
复制代码
public interface 客户{
......
}
public interface 公司{
}
public interface 个人{
}public interface 公司客户:公司,客户
{
}
public interface 个人客户:个人,客户
{
}
复制代码

 

这样是多么简单,如果使用class,只支持单继承,另一个接口中的内容,只能手工再次重复敲出代码,那是多么无聊的事情。
有一点小小遗憾的是,DC技术还不支持泛型机制,如果以后能够支持,那它是完美的。在一个进销存系统中,单据无比多,但无非是出库类,入库类,不出不入库类,这三种,然后就有了各种可以想出来的组合,组合出了N多张单据,我们若是使用了DC技术,天空瞬间晴朗了。
八、内置功能模块
一、权限模块:
1.支持业务对象级别的权限,增删改查看权限。
2.支持字段级权限,某个字段可读可写。
3.支持行级权限,某个业务对象中某些条件的记录是否有权限进行 删 、改、查看
4.支持上述4种混合权限
5.支持角色,并支持角色嵌套,即,角色3=角色2+角色1
二、审记模块
用于实现业务对象的变更的每个环境,创建时间、修改时间、删除时间,修改内容,每个属性从什么值变更为什么值,何人操作的。
生成的记录相当多,不过可以选择性记录,或自定义。
三、 Business Class Library Customization Module 业务对象支持

这是基础模块了,实现了业务对象的无SQL CRUD操作。
四、图表模块
可以实现各种图表的显示,柱状图,饼图之类的,如果你用过DEV的控件,你就已经看过它的效果图了。
五、Clone Objct模块
实现了业务对象的复制,这是一个小模块。
六、Conditional Appearance Module Overview
条件外观模块,非常常用的模块,实现全局的控制控件是否可用,可见,颜色、字体等 。
七、FileAttachment Module,文件附件模块
用于管理附件文件,可以传到数据库中,也可以个性化为文件系统。
八、HTML Property Editor
在业务对象中可以使用html编辑器。
九、Notifications Module
提醒模块,像outlook一样,到达某时间给出一个弹出提醒,可以选择推迟或取消,可以在业务模块中进行个性化。
比如,到时间提醒去联系客户,更新订单等操作。
十、KPI模块
绩效考核模块,工作的朋友应该都被考核过吧,是标准的模块,可以提供一些图表。
十一、Maps模块
支持地图的显示,这个我还没有用过,不过看起来还不错。
十二、Pivot Chart Module
交叉数据分析表+图表模块,在Excel中有交叉数据透视分析表,因为样子长得一样,我就这么翻译了。
这个确实相当强大,客户可操控性很强,要什么数据统计结果,随心所欲,当然,客户要愿意操作。
这个模块同时带了图表显示,可以将Pivot中的数据同时显示成图表,很直观。
十三、Pivot Grid Module
和上面的一样,只有Pivot表格的显示。
十四、报表模块
当前版本是15.2了,新的功能不断在增加,以前的版本中我们一直在等很多很好的功能。比如报表模块,以前只能在win中做报表设计,现在web中也有了报表设计器了。
相当高大上。
十五、Scheduler 模块
和Outlook中的日历一样。
十六、状态机模块
做简单审批流用的,还不错。
十七、TreeListEditor 
树形列表模块,这个也很常用。
十八、验证模块
这个使用频率是最高的,必填验证,唯一验证等 ,你能想到的都有了。当然也提代了扩展接口。
十九、View Variant
让一个业务对象有多种是显示方式,并可以快速切换。比如图表界面切换成树形视图。
二十、工作流模块
就是工作流了,当前只在winform下可用。
九、缺点
1.需要学习
2.体系庞大
好吧,今天就介绍这么多吧,我也只能想到这么多了!另外,本文发表时,我已经写了6篇入门教程,如果需要请来我的blog中查看。
另外,就算你不打算用XAF也没有关系,我们在自己设计系统时,多多借鉴别人的好思路,是很重要的。
XAF也不是完美的,永远没有完美的工具,对的时候选择对的工具吧!
说了这多,上几张图片,看看到底开发的系统长什么样吧!
真的希望能帮到你!
QQ4603528 群:50185791

这篇关于XAF信息系统快速框架介绍的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/417256

相关文章

java脚本使用不同版本jdk的说明介绍

《java脚本使用不同版本jdk的说明介绍》本文介绍了在Java中执行JavaScript脚本的几种方式,包括使用ScriptEngine、Nashorn和GraalVM,ScriptEngine适用... 目录Java脚本使用不同版本jdk的说明1.使用ScriptEngine执行javascript2.

Python实现NLP的完整流程介绍

《Python实现NLP的完整流程介绍》这篇文章主要为大家详细介绍了Python实现NLP的完整流程,文中的示例代码讲解详细,具有一定的借鉴价值,感兴趣的小伙伴可以跟随小编一起学习一下... 目录1. 编程安装和导入必要的库2. 文本数据准备3. 文本预处理3.1 小写化3.2 分词(Tokenizatio

shell脚本快速检查192.168.1网段ip是否在用的方法

《shell脚本快速检查192.168.1网段ip是否在用的方法》该Shell脚本通过并发ping命令检查192.168.1网段中哪些IP地址正在使用,脚本定义了网络段、超时时间和并行扫描数量,并使用... 目录脚本:检查 192.168.1 网段 IP 是否在用脚本说明使用方法示例输出优化建议总结检查 1

Rust中的Option枚举快速入门教程

《Rust中的Option枚举快速入门教程》Rust中的Option枚举用于表示可能不存在的值,提供了多种方法来处理这些值,避免了空指针异常,文章介绍了Option的定义、常见方法、使用场景以及注意事... 目录引言Option介绍Option的常见方法Option使用场景场景一:函数返回可能不存在的值场景

MyBatis框架实现一个简单的数据查询操作

《MyBatis框架实现一个简单的数据查询操作》本文介绍了MyBatis框架下进行数据查询操作的详细步骤,括创建实体类、编写SQL标签、配置Mapper、开启驼峰命名映射以及执行SQL语句等,感兴趣的... 基于在前面几章我们已经学习了对MyBATis进行环境配置,并利用SqlSessionFactory核

性能测试介绍

性能测试是一种测试方法,旨在评估系统、应用程序或组件在现实场景中的性能表现和可靠性。它通常用于衡量系统在不同负载条件下的响应时间、吞吐量、资源利用率、稳定性和可扩展性等关键指标。 为什么要进行性能测试 通过性能测试,可以确定系统是否能够满足预期的性能要求,找出性能瓶颈和潜在的问题,并进行优化和调整。 发现性能瓶颈:性能测试可以帮助发现系统的性能瓶颈,即系统在高负载或高并发情况下可能出现的问题

水位雨量在线监测系统概述及应用介绍

在当今社会,随着科技的飞速发展,各种智能监测系统已成为保障公共安全、促进资源管理和环境保护的重要工具。其中,水位雨量在线监测系统作为自然灾害预警、水资源管理及水利工程运行的关键技术,其重要性不言而喻。 一、水位雨量在线监测系统的基本原理 水位雨量在线监测系统主要由数据采集单元、数据传输网络、数据处理中心及用户终端四大部分构成,形成了一个完整的闭环系统。 数据采集单元:这是系统的“眼睛”,

Hadoop数据压缩使用介绍

一、压缩原则 (1)运算密集型的Job,少用压缩 (2)IO密集型的Job,多用压缩 二、压缩算法比较 三、压缩位置选择 四、压缩参数配置 1)为了支持多种压缩/解压缩算法,Hadoop引入了编码/解码器 2)要在Hadoop中启用压缩,可以配置如下参数

电脑桌面文件删除了怎么找回来?别急,快速恢复攻略在此

在日常使用电脑的过程中,我们经常会遇到这样的情况:一不小心,桌面上的某个重要文件被删除了。这时,大多数人可能会感到惊慌失措,不知所措。 其实,不必过于担心,因为有很多方法可以帮助我们找回被删除的桌面文件。下面,就让我们一起来了解一下这些恢复桌面文件的方法吧。 一、使用撤销操作 如果我们刚刚删除了桌面上的文件,并且还没有进行其他操作,那么可以尝试使用撤销操作来恢复文件。在键盘上同时按下“C

图神经网络模型介绍(1)

我们将图神经网络分为基于谱域的模型和基于空域的模型,并按照发展顺序详解每个类别中的重要模型。 1.1基于谱域的图神经网络         谱域上的图卷积在图学习迈向深度学习的发展历程中起到了关键的作用。本节主要介绍三个具有代表性的谱域图神经网络:谱图卷积网络、切比雪夫网络和图卷积网络。 (1)谱图卷积网络 卷积定理:函数卷积的傅里叶变换是函数傅里叶变换的乘积,即F{f*g}