不知从何时开始,创业变得很廉价,谈什么都是互联网,动辄融资千万。这阵风好像也刮向了程序员中,有那么一大批开发者,数据结构很差好学习、数据库原理不扎实掌握,在github上发布几个项目,用nodejs建立一些服务,再用H5写出APP,就自觉得迈入了高级程序员的队伍,可以指挥若定互联网项目,难道学习新技术、新理念就是快速成长吗,显然不彻底是,在这浮躁的氛围中,各类粗制滥造的互联网网站、APP接踵而至,不少看似漂亮的APP,连简单的http接口安全都没有措施应对,不少美丽的响应式网站,目录结构随意堆叠,这实在是一股歪风邪气,我以为程序员仍是应当踏踏实实的多学理论,多写代码,反复实践。前端
那么另一个问题就来了,新技术、新理念难道就没有用了吗,显然也不是,新技术新理念是无数的技术大牛在长期的实践中反复重构的胜利果实,而做为一个.NET老司机,眼看着这些年微软拥抱开源,拥抱社区带来的改变和进步,也是深感欣慰,因而今天,我想和你们分享一下这些年我以及个人公司对于使用.NET进行Web开发乃至于互联网应用开发的一些经验和技术总结。node
先看一个最新上线的典型案例,http://muban.printhelloworld.com,其中用到了诸如HTML五、Bootstrap、EF6 For MySql、阿里云RDS,阿里云CDN等新技术和新理念,然而却并无脱离采用.NET进行开发以及采用.NET生态环境(IIS、Windows Server)进行部署这一基础,但整个开发流程,已经彻底摆脱了WebForm甚至MVC,咱们实践了一套全新的.NET开发模式,在开发效率和团队协做上大大提高,在开发时间上也极大地缩短,在这个案例里面,整个网站的前台和后台管理,从构思到设计、开发、调试、部署,1我的3天完成。下面就开发模式的细节详细描述,也听取你们的意见,继续改进和完善。
git
对于ASP.NET WebForm的评价,我想如下的话是客观的:ASP.NET WebForm托拉拽以及事件驱动的Web开发模式的创新,虽然方便了一大批.NET入门者的学习和理解,但最终严重阻碍了的.NET的普及和商业化使用,并且在很长一段时间内,.NET优秀的语言特性得不到重视,反而一直被扣着低效率、难扩展、不适合商业开发的帽子,ASP.NET WebForm在这其中有着不可推卸的责任。程序员
遥想0六、07年的时候,我还在惊叹于UpdatePanel的强大和方便,如今回想来看,这样的开发模式让开发人员对HTTP和Web本质的认识无疑是罩上了一层迷雾,从长远看是一种倒退,再日后来,到了ASP.NET MVC时代,微软高阶程序员的陋习依旧没有改善,虽然MVC开源了,但仍然充斥着各类自觉得是的为开发人员提早想好的特性、绑定、快捷方法等等,这些东西初级开发人员可能会以为很方便,但我想,任何从事过商业项目架构和开发的技术经理都会深有感触,在真正须要稳定的扎实项目中,这些小聪明,不只毫无用处,并且难以扩展,更容易致使难以掌控的Bug和漏洞。github
使人庆幸的是,在Nadella的带领下,在比尔盖茨从新担任技术顾问的指引下,.NET不断修正方向,除了在语言上大步向前,更在生态建设上越发清晰可见。我一直在怀疑公司所创造的.NET敏捷开发模式是不是先进性的体现,直到vNext(MVC6.0)的出现,我豁然开朗,原来异曲同工,微软终于走对路了。数据库
在谈开发模式以前,我想先谈一谈:编程
1、目前的互联网项目或者是传统Web项目的一些新趋势和特色后端
一、再也不使用WebService,而是大量使用HTTP做为数据通信的方式浏览器
二、数据载体再也不使用XML,转而使用JSON缓存
三、Web前端会使用Bootstrap、JQueryUI、EasyUI等第三方HTML5框架
四、有APP的需求,甚至APP优先的需求,APP须要对接各种第三方插件
五、为了追求APP快速上线,有时候会采用HTML5的APP开发模式,例如PhoneGap、AppCan、HBuilder等
六、 有微信的需求,要求对接微信公众帐号,进行微信浏览器中的移动Web开发
七、开发周期短、迭代频繁
八、数据量增加迅速,对报表展现、数据分析有较多的需求
九、项目组人员需求由Web开发工程师,细分为HTML5前端工程师、JAVA(.NET)工程师、数据库工程师等
十、单元测试减小,功能测试愈来愈多,甚至用互联网工具(worktile等)替代专业测试工具
基于以上状况,咱们考虑,若是仍然使用.NET进行系统开发,那么在用户量<=50万的敏捷项目里:
2、一些传统的.NET Web开发模式和方法就应该被抛弃
一、ASP.NET WebForm以及MVC模式再也不合适,他们均存在先后端耦合严重,简单流程复杂化的问题,并且前端始终没法脱离.NET架构。
二、SQL Server数据库再也不合适,虽然SQL Server 2014的特性让人激动,但随着公有云的使用愈来愈广泛,同时相比其余数据库来讲,大小、价格、可扩展性甚至性能方面,SQL Server都显劣势。
三、传统三层架构再也不合适,不少互联网项目,从设计之初就要求可以支持多服务节点,不一样应用场景使用不一样数据库。再加上三层架构大量使用反射牺牲性能增长代码,也再也不适合敏捷开发。
四、Server 2003的IT架构应当被抛弃,不管是IIS6.0落后于IIS7的HTTP请求处理模型,仍是Server 2003落后于Server 200八、2012的稳定和扩展,都不该当再考虑基于Server 2003和IIS6的.NET部署。
虽然被抛弃了一些东西,但微软毕竟是微软:
3、一些.NET特性应当被强化
一、深刻使用Visual Studio 2015开发工具,VS2015是宇宙级开发工具无需多说,甚至在前端编码(CSS、JS、HTML)上也越发纯熟,配合适合工程师本身的自定义设置以及第三方插件,将会如虎添翼
二、TFS源代码管理的使用,不管是内部安装TFS Express版本仍是在tfs.visualstudio.com上申请免费空间,都可以很好的进行团队协做,以咱们实践来看,切勿被Git模式冲昏头脑,事实上TFS管理模式才是最适合.NET开发的
三、.NET高阶语言特性应当增强使用,在理解的基础上,若是能熟练使用Linq、Lamda表达式、反射、Task并行编程等.NET特有的优质语言特性和方法,将会极大地提高开发效率,缩短开发时间。
四、IIS的高级功能和动态管理应当增强使用,IIS7之后,IIS服务器就是高性能Web中间件的代名词,加上Server 200八、2012的Core模式,增强对IIS的动态管理和配置可以极大地提高Web处理效率。
五、Server 2012 R2操做系统应该增强使用,虽然跨平台是.NET的方向,也在mono上实践的很好,但在PC服务器和云服务器愈来愈便宜的今天,仍是多用用Windows最新的服务器操做系统吧。
有了以上这些认识,通过总结,咱们现行的.NET开发模式,能够简单归纳为以下:
1、先后端高度解耦
首先要作的就是完全抛弃ASP.NET WebForm和MVC模型,先后端高度解耦,前端的全部逻辑处理均使用JS进行处理,包括Dom元素布局与绘制以及数据请求,然后端为纯粹的业务逻辑处理,包括逻辑处理以及数据处理。目前咱们的项目因为使用了ASP.NET中的Routing特性,依然Host在ASP.NET模型以及IIS中,在理论中以及不久的未来,替换为Core IIS或者Linux下的Nginx来Host纯HTML5以及HTMl5缓存也将很是容易。
2、前端使用纯HTML5
前端抛弃传统HTML,尽可能所有使用HTML5技术,其中作出的牺牲有,抛弃IE11如下的浏览器,但在互联网思惟的今天,这样的思路也何尝不可,当在前端所有使用HTML5技术后, 文件、图形图像、音频视频、地理位置等各类处理将变得很是简单,并且扁平化、数据化。
3、前端充分利用成熟框架
使用新的开发模式后,很明显的一个改变就是,公司的美工再也不或者不多进行前端切图,而对于技术美工的需求(会CSS开发和JS开发、也懂设计)则日渐增长,带来这一改变的根源就是那些不断涌现先进的、优秀的前端框架,咱们目前正在使用的有JQuery、Zepto、JQueryUI、JQueryMobile、Bootstrap、Amaze UI、inoic、Framework七、SUI、MUI等等,以及伴随着这些优秀框架的第三方插件。客观的说,经过优秀框架的使用,不只没有增长前端的系统风险,反而因为框架的开源、架构清晰、稳定等特性,实现了更加稳定、可扩展的前端。简单的举个例子,在解决困扰不少Web工程师的全兼容性的布局以及响应式布局问题上,Bootstrap就功不可没。
4、前端开发面向对象化
将前端开发,经过JS面向对象特性进行简单封装,在Dom元素操做以及业务逻辑数据请求的处理上,与后端数据类型、实体结构以及处理逻辑上保持一致,不只拉近了先后端开发人员之间对业务需求的理解,也是极大地下降的技术培训的门槛,提高了团队合做的效率。
5、使用CDN服务
CDN服务在几年前仍是大企业、大公司的专属,如今已经彻底普及化、平民化,Web前端愈来愈重是不争的事实,但真正的业务逻辑每每只有几十K甚至几K,1个几百K的页面,90%是JQuery等第三方框架,所以,合理的使用CDN加速,不只提高用户端的体验,更直接将基于HTTP架构Web服务的负载能力提高5-10倍以上。
6、业务逻辑HTTP服务化
这句话的描述可能不是很恰当,但这也是咱们全新的.NET开发模式中最重要的环节,通过对阿里开放平台等先进互联网架构的学习,最终咱们造成告终构化但松散的业务逻处理模式,即每个业务逻辑行为均有1个惟一的路由名称,业务逻辑只对路由名称负责,而路由名称对流向、性能、权限、安全等上层需求负责。这样作的好处是,可以充分利用3-5年左右经验的开发人员(这也是大部分公司的开发主力军),让他们专一于业务逻辑的编写,而业务逻辑以外的事情,在架构层面由其他的控制器去解决,而一个大的.NET项目工程,也能够灵活以不一样的方式拆分为各个子模块。对于HTTP服务的实现,咱们尝试过ASP.NET ASHX处理器、Windows Service HOST WCF服务、ASP.NET Web API,当前较为稳定版本是Web API,固然针对HTTP服务化这一需求,Wen API也显略重,之后会继续改进。总之这一改变过程,在实践中提高了至少3倍以上的开发效率和测试效率。在后一章节中,将会进行详述。
7、分布式与热加载HTTP服务建设
互联网应用要求的是敏捷开发和反复迭代,同一个逻辑架构下的不一样请求会使用不一样的服务器和数据库已是屡见不鲜的事情,所以项目设计初期,分布式HTTP服务的建设相当重要,而业务更新更是须要可以进行热加载,在.NET体系里面,就是DLL托管代码的动态加载使用,惋惜的是,因为公司现有项目并未出现大规模分布式场景,所以还未研发出较为稳定的DLL动态加载架构,在后一章节中,将会详细讨论。
8、使用阿里云解决大数据问题
我想任何一个使用过阿里云以及其余云服务的IT架构师,都能深深的感受到,阿里云已经领先其余云不止一个身位。事实上,特别是阿里云的数据库相关功能,例如RDS、DRDS、KVStore等,都已经在实践环节真实的解决了不少传统需求里的复杂点和困难点,具体细节后面详细讨论,但真心的说一句,赶快使用阿里云吧,至少在现阶段,不是阿里云在绑架你,而是在帮助你。
今天写了不少,总的来讲,就是告诉你们,.NET的春天已经来了,.NET不只能够进行互联网化的敏捷开发,更能处理大型项目大型数据大型逻辑,这一点我在实践中已经尝到甜头,而做为一个写Pascal数据结构出身的程序员,也至今十五年有余,我也对各种新技术很是感兴趣,都有涉猎甚至尝试,不怕被别的语言喷,我甚至能够大胆的说一句,其余语言,从综合(语言、开发环境、开发效率、技术社区、团队协做、应用能力)上来看,在应用级开发领域,已经落后.NET太多太多,只是.NET程序员本身还没察觉,因此从这一点上来看,须要你们的共同努力,不断钻研和探索。
接下来的时间里,我会抽空继续把公司这一套开发模式和相关工具抽丝剥茧,开放出来,也听取你们的意见和建议,不断改进和完善,今天先写到这啦。