二十七(序幕)、【开源】EFW框架破茧成蝶
EFW框架源代码下载V1.3:http://pan.baidu.com/s/1c0dADO0
EFW框架实例源代码下载:http://pan.baidu.com/s/1eQCc69G
自己也经历了一些Web项目,但对MVC的理解还是比较片面的,那就讲解一下我认识MVC的经历,这样没有理论教导,只有一些学习的引导以及感悟吧;在现实项目中可能更注重开发效率与成果,所以对新的技术或理论都是比较保守的,也跟所在的行业是个比较保守的行业有关吧;其实自己对业务架构清晰,代码结构整洁还是比较关心的,所以对一些好的技术理论也是有所关注;
1.asp时代
最早接触Web开发是用Asp做网站开发,就是在html标签中嵌入asp脚本代码,数据库也一般用的Access,当然程序功能也没那么复杂无非就那么几个栏目,首页、公司简介、产品、联系我们、留言板等;虽然功能简单但是一些代码复用还是想了一些办法,比如把连接数据库的代码单独一个conn.asp文件,还有用户验证、页眉、页脚等,那时候一般都是用文件引用的方式来复用代码;多年没接触asp,偶然去看了些流行的CMS代码,根本看不懂了,那么多代码文件没有一个是html文件,基本都是动态生成的吧,index.asp打开也是一堆的脚本;能写出这些代码或看懂代码的人怎么也是技术牛人吧,但如我这般的人还是占大多数吧,怎么也是一个结构简单明了,代码清晰整洁的框架更适合我们吧。
2.donet桌面程序时代
后来进入行业软件公司用.net做桌面程序,那时候还是用vs2003开发,系统为两层结构,客户端直连数据库,操作数据库的代码都是直接写在界面代码中的,就这样上千个客户端同时使用也是挺正常的;一些重复的功能一般都是封装成业务控件,使用的时候很方便把控件拖进去就行了,还有一些常用的基础数据就封装成公共的类库;
现在想来这种方法还是有很多优点的:
1.首先就是上手快,一个.Net新手马上就能修改程序bug,
2.查找问题维护也比较方便,因为结构简单根据界面上的操作按钮一步步就可以找到问题代码修正就行,也不会说对其他功能会有影响;
同时缺点也是很突出的:
1.随着业务功能越来越复杂,代码变得越来越难控制,程序中有几个复杂的界面,一个文件代码的行数就达到1万以上,后来增加一个新功能变得越来越痛苦;
2.程序代码的移植性很差,随着业务的扩展需要开发一些新的模块,而新模块的大部分功能在老模块中都有的,现在要把这些功能代码剥离出来是很痛苦的,千丝万缕,真是斩不断理还乱;
3.三层架构时代
在这些优点与缺点的磨练中,平时也就寻找一些解决办法,得整理出一种结合两者的开发模式;三层架构、MVC、ORM、AOP、面向对象、设计模式等都想利用起来,当然中间的一些技术还是挺复杂,如MVC、设计模式的理论,NHibernate的配置都是苦学无果,不过最后自己还是整出个简易的开发框架,当然三层架构和面向对象是少不了的,ORM自己弄了个单表操作,设计模式用了个工厂模式;刚好也有一个不大不小的项目需要重新开发,既然带队就得把新的开发模式给使用起来吧,幸好团队成员也都是非常支持使用新的,经过几个月的努力奋斗系统终于也给弄出来了,开发过程中有喜也有忧,喜的是这种新的开发模式用起来还是比较顺手的,写出来的代码也比以前好看,忧的是大家对面向对象的思想理解不一致或存在偏差,导致对象比较多,有些还不伦不类;不过想想不也是有个过程的,不还有重构这一条路吗。后来系统上线时候,后面的人员接收维护也都觉得比以前代码好,那是真的开心。
4.ExtJs+AspX
真正发挥这个框架的作用还在后面,有新的客户为了后期维护方便需要系统是B/S架构的,那么需要将现有C/S的程序改成B/S的,经过大家评估还是可行的,既然系统是用三层架构开发的,逻辑层已经分离了,那么只要把Winform界面替换成Web界面就行了,工作量还是比较小的;这样又开始了新一轮的征战,界面框架最后定了ExtJs,因为另一个部门就是用的ExtJs+Java开发的系统,为了减少技术的风险最后就定了ExtJs,最后发现这玩意是一个错误的选择,ExtJs太复杂了像我们这些新手根本一下掌握不了;最后搭建成B/S的框架是这样的,ExtJs+AspX,ExtJS界面开发,aspx调用后台逻辑层进行数据转换输出;虽然大部分人都是第一次做web系统,但还是跌跌撞撞的做出来了,后面的维护确实还是挺头痛,特别是Extjs做的界面那部分,一个js文件也是老长,javascript本来调试起来就不方便,维护就更困难了;后来也看了人家java部门的代码,对比起来,人家的确实还是清晰好看多了,经过一番分析可能是两方面问题:
一是、我们这边第一次接触JS代码编写所以难免写法不是很规范,对里面的控件封装使用都不熟练。
二是、我们的界面功能确实比那边的要复杂,因为我们都是把Winform的界面照搬用Extjs实现的,一些用Winform很容易实现的功能用Web方式就非常麻烦,没有做深层次的分析转换,所以Js代码变得很难维护是再所难免的;
5.JqueryEasyUI+HTTPHandler+Controller
经过了上面的经验教训,既然ExtJS这么难学就找个容易学的,就换成了JqueryEasyUI,Aspx做数据处理太浪费了,想把cs代码移到独立一个类库中去,后来就发现了ashx,再后来使用HTTPHandler把http请求完全分离,并扩展出了WebController统一进行数据的处理;最后框架就变成了如今这样,JqueryEasyUI+HTTPHandler+Controller。后来用这个框架进行了几个Web系统的开发,效果都不错,特别是学习成本与开发效率都是很突出的;
为了适用各种情况,对框架又做了一些扩展,比如:进行手机网站开发,界面框架换成JqueryMobile,那后台Controller也扩展出支持JqueryMobile的数据处理控制器;后来又加入了更多的界面框架和控制器,ExtJS、QUI、JqueryUI等;
随着框架的越来越完善,反过来想这种开发模式还是比较类似MVC模式的,想着以后给新人讲解开发模式的时候也有个理论依据,所以拿出来探讨一下,对比其他的MVC框架,总结出优缺点与适合的场景。
二十七(序幕)、【开源】EFW框架破茧成蝶的更多相关文章
- 华为云BigData Pro解读: 鲲鹏云容器助力大数据破茧成蝶
华为云鲲鹏云容器 见证BigData Pro蝶变之旅大数据之路顺应人类科技的进步而诞生,一直顺风顺水,不到20年时间,已渗透到社会生产和人们生活的方方面面,.然而,伴随着信息量的指数级增长,大数据也开 ...
- 【开源EFW框架】框架中自定义控件GridBoxCard使用实例说明
回<[开源]EFW框架系列文章索引> EFW框架源代码下载V1.3:http://pan.baidu.com/s/1c0dADO0 EFW框架实例源代码下载:http://p ...
- 公司管理系列--Facebook 如何化茧成蝶[转]
拒绝传统,看 Facebook 如何以三大法宝化茧成蝶:人才吸引.工程师文化和项目开发流程 我将结合之前在Facebook的四年工作经验,介绍Facebook创新的管理方法以及整个工程文化形成的方 ...
- 二十九、EFW框架开发的系统支持SaaS模式和实现思路
回<[开源]EFW框架系列文章索引> EFW框架源代码下载V1.3:http://pan.baidu.com/s/1c0dADO0 EFW框架实例源代码下载:http://p ...
- Unity3D学习笔记(二十七):MVC框架下的背包系统(2)
Tools FileTools using System.Collections; using System.Collections.Generic; using UnityEngine; using ...
- 化茧成蝶,开源NetWorkSocket通讯组件
前言 前后历时三年,期间大量参考.Net Framework和Asp.net MVC源代码,写写删删再重构,组件如今更新到V1.5.x了.从原来的丑小鸭,变成今天拥有稳定和强大的tcp协议支持基础层, ...
- 二十七、EFW框架BS系统开发中的MVC模式探讨
回<[开源]EFW框架系列文章索引> EFW框架源代码下载V1.3:http://pan.baidu.com/s/1c0dADO0 EFW框架实例源代码下载:http://p ...
- 【开源】EFW框架系列文章索引
开源轻量级.Net框架EnterpriseFrameWork详解 ——自己动手写框架 ——适合中小企业的开发框架 ——Ajax+JqueryEasyUI+NotNetBar+MVC+WebServic ...
- 二十六、【开源框架】EFW框架Winform前端开发之Grid++Report报表、条形码、Excel导出、图表控件
回<[开源]EFW框架系列文章索引> EFW框架源代码下载V1.2:http://pan.baidu.com/s/1hcnuA EFW框架实例源代码下载:http://pan ...
随机推荐
- paip.编程语言到底有没有优劣之分优秀之分
paip.编程语言到底有没有优劣之分优秀之分 人有没有优秀之分之分呢??狗有没有优秀之分呢?? 当然是有的,有好人坏人的说法,或者精英平民的区分..狗也有好狗狗,坏狗,疯狗嘛.. 所以,自然,编程语言 ...
- Paip.最佳实践-- Buildin variale 内建变量 ,魔术变量,预定义变量,系统常量,系统变量 1
Paip.最佳实践-- Buildin variale 内建变量 ,魔术变量,预定义变量,系统常量,系统变量 1.1.1 C++内建变量(__LINE__).... 1.1.2 ...
- Eclipse连接到My sql数据库之前操作
Eclipse连接到My sql数据库之前操作 1:首先是安装My sql数据库(为了减少你的麻烦,按照下面的连接,下载即可)百度云链接:http://pan.baidu.com/s/1mitWmbm ...
- C# .net中获取台式电脑中串口设备的名称
来源:http://www.cnblogs.com/hshuzhao/p/4028856.html?utm_source=tuicool&utm_medium=referral .情境: 做项 ...
- MyBatis crud操作
Test2.java package com.mycom.mybatis_1.crud; import java.util.List; import org.apache.ibatis.session ...
- RFID 仿真/模拟/监控/拦截/检测/嗅探器
Sound card based RFID sniffer/emulator (Too tired after recon.cx to do draw the schematics better th ...
- EasyN IP Camera
Android App: "EasyN P" How to access EasyN HD ip camera web interface by browser: http:// ...
- 第六章 - 图像变换 - 图像拉伸、收缩、扭曲、旋转[1] - 仿射变换(cvWarpAffine)
拉伸.收缩.扭曲.旋转是图像的几何变换,在三维视觉技术中大量应用到这些变换,又分为仿射变换和透视变换.仿射变换通常用单应性建模,利用cvWarpAffine解决密集映射,用cvTransform解决稀 ...
- ubuntu下安装多版本Python
今天一不小心又把ubuntu系统给完坏了,因为我把python3卸载了,然后就...好了,不废话了,接下来就说一下如何在ubuntu下管理python的多个版本.我这里使用的是一个叫pyenv的Pyt ...
- javascript一种新的对象创建方式-Object.create()
1.Object.create() 是什么? Object.create(proto [, propertiesObject ]) 是E5中提出的一种新的对象创建方式,第一个参数是要继承的原型,如果不 ...