是时候改变你的开发方式了-XAF信息系统快速框架介绍
我是一名.Net开发者,从DOS时代Turbo c 算起(1996年),马上满20年了。想想写过的代码真是不少,却做了很多重复反复的编码工作。当然中间也带过团队做过几个大项目,但是代码仍没写够,还是每天在敲着代码,真心是喜欢这个别人眼中这件无聊的事情吧。
可能我的视野不够开阔,自从2002年从asp开始加入M$阵营,后来转向.net开发一直没有变化过,而且一直在做企业信息系统开发,做这行的,大家都知道是工作繁重修改反复。
不管是需求变化,还是老板有新点子,我们就得加班加点,理由总不需要那么多,只有一个就能让你忙活个没完没了。
是的,一直在这种赶项目进度的时间里,逼着我要想到底如何才能更快,更好的完成任务。我希望一个需求来了简简单的就能完成。然后再和老板聊薪水的时候让他没什么理由说你还需要提高。当然,这也是挺可笑的,这是后话了。
我们还是说说信息系统开发效率这件事吧,在我的印象中,传统的开发方式是这样的:
- 最初
分析需求->建立数据库->画界面->调用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支持多国语言版本,应用程序开发完成后,可以在应用程序模型中生成各种语言的本地化翻译文件,这也算是高大上的支持了吧。
四、自动机制
foreach(var x in classes)
{
if(x.members.contains('名称')){
var member = x.members["名称"];
member.backColor = Color.Red;
}
}
public interface 客户{
......
}
public interface 公司{
}
public interface 个人{
}
public interface 公司客户:公司,客户
{
}
public interface 个人客户:个人,客户
{
}


是时候改变你的开发方式了-XAF信息系统快速框架介绍的更多相关文章
- XAF学习资源整合大全
近期有很多XAF初学者与我联系,我多数时间在重复很多入门问题,所以决定整理一篇XAF资源列表,方便大家查找资料,也请知晓其他资源的人留言或与我联系,我将新资源追加到本篇文章中,方便更多人. 一.本博客 ...
- linux 如何改变文件属性与权限
我们知道档案权限对于一个系统的安全重要性,也知道档案的权限对于使用者与群组的相关性, 那如何修改一个档案的属性与权限呢? 我们这里介绍几个常用于群组.拥有者.各种身份的权限的指令.如下所示: chgr ...
- [转]linux 如何改变文件属性与权限
转自:http://www.cnblogs.com/yangjinjin/p/3165076.html 我们知道档案权限对于一个系统的安全重要性,也知道档案的权限对于使用者与群组的相关性, 那如何修改 ...
- PHP chdir函数:改变当前的目录
PHP chdir函数的作用是改变当前的目录,这里主机吧详细介绍下chdir函数的用法,并列举使用chdir函数的例子. chdir定义和用法: chdir() 函数改变当前的目录. chdir实例: ...
- linux 如何改变文件属性与权限1
我们知道档案权限对于一个系统的安全重要性,也知道档案的权限对于使用者与群组的相关性, 那如何修改一个档案的属性与权限呢? 我们这里介绍几个常用于群组.拥有者.各种身份的权限的指令.如下所示: chgr ...
- ant design pro 当中改变ant design 组件的样式和 数据管理
ant design pro 简介 官网简介 链接 https://pro.ant.design/docs/getting-started-cn 项目结构 https://github.com/ant ...
- [连载]《C#通讯(串口和网络)框架的设计与实现》-1.通讯框架介绍
[连载]<C#通讯(串口和网络)框架的设计与实现>- 0.前言 目 录 第一章 通讯框架介绍... 2 1.1 通讯的本质... 2 1 ...
- Hibernate和IBatis对比
[转自]http://blog.csdn.net/ya2dan/article/details/7396598 项目也做过几个, 使用IBatis就做一个项目, 基本上都是使用Hibernate, 也 ...
- Git分支的前世今生
摘自Jack__CJ CSDN博客,写得很好,保存一下. 导读 几乎所有的版本控制系统都以某种形式支持分支. 使用分支意味着你可以把你的工作从开发主线上分离开来,以免影响开发主线. 在很多版本控制系 ...
随机推荐
- JS 动态加载脚本 执行回调_转
关于在javascript里面加载其它的js文件的问题可能很多人都遇到过,但很多朋友可能并不知道怎么判断我们要加载的js文件是否加载完成,如果没有加载完成我们就调用文件里面的函数是不会成功的.本文讲解 ...
- linux的lsof命令
删除文件,用命令df -h看磁盘空间,但发现没有变化. 这种情况,需要使用命令查看是不是文件被某个进程占用了: /usr/sbin/lsof |grep deleted
- 检测内存泄露:Instruments中的Leaks
前言 如果要检测内存泄露,我们会使用Xcode7自带的Instruments中的Leaks工具来检测. 现在的开发环境是ARC,所以很少会出现内存泄漏的情况. 不过我们一定要养好码代码的规范性. 例如 ...
- tcpproxy:基于 Swoole 实现的 TCP 数据包转发工具的方法
假设我们希望有一台机器A(ip 192.168.1.101)要开放端口6379给用户访问,但可能实际情况是用户无法直接访问到A(ip 192.168.1.101), 但却有一台机器B(ip 192.1 ...
- sql server 快捷键
书签:清除所有书签. CTRL-SHIFT-F2 书签:插入或删除书签(切换). CTRL+F2 书签:移动到下一个书签. F2 功能键 书签:移动到上一个书签. SHIFT+F2 取消查询. ALT ...
- recycleview + checkbox 实现单选
使用map集合记录checkbox的选中状态 private HashMap<Integer,Boolean> positionMap; positionMap = new HashMap ...
- maven 手动安装jar到仓库的命令
mvn install:install-file -DgroupId=com.sun -DartifactId=tools -Dversion=1.6.0 -Dpackaging=jar -Dfile ...
- 使用django的ImageField和from制作上传图片页面
需求描述: 做一个简单的注册页面,使得用户在注册页上传头像. 解决办法: 以前用java写这个的时候,在action上面需要用IO接受文件,然后生成一个文件名,再将文件相对路径保存到user表的img ...
- 20151124001 关闭C#主窗体弹出是否关闭对话框
关闭C#主窗体弹出是否关闭对话框 private void Frm_Main_FormClosing(object sender, FormClosingEventArgs e) { ...
- HDU(1853),最小权匹配,KM
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1853 Cyclic Tour Time Limit: 1000/1000 MS (Java/Other ...