本人2014年从Java转行到C#从事BS项目的开发,刚开始接触的是ASP.NET WebForm,结果对于我这种从jsp+servlet时代的人非常的不适应,开发者不能自由的操作HttpContext及其原始的Web命名空间中的类库来开发,而是全部封装成基于事件的机制来操作,非常的别扭。后面就找到了ASP.NET MVC这个框架。发现不错,而且从Java Web方向转过来学习ASP.NET MVC还是容易接受的。 在其的学习上纸质书籍我看了两本(由于公司的IDE是VS2010,所以我就用的MVC4啦):
注:其实光看书你也看不下去,因为还是有点枯燥的,尤其是第二本。但是这个书当你在开发的时候遇到的问题上面有解决方案或者给你思路的时候,你就会豁然开朗,就像本人开发一年ASP.NET MVC项目之后我也没事就去看看这两本书,发现都有一番韵味。当然现在技术更新的快,ASP.NET已经到5了,MVC也是6了,但是这个你参透这个MVC 4版本,其他也好说。
然而我写这篇文章的目的不是详细讲解ASP.NET MVC 框架的详细知识。
而是总结概括这一年我开发所用到的比较好的技术和知识,目的是为了以后我反过头可以快速的想起以前的所学知识,加快我开发新项目技术选型的速度。
由于本人之前就有相关Java Web开发经验,追求完善的项目架构也是我非常感兴趣的地方,在准备使用ASP.NET MVC作为框架来开发项目之前对自己的项目的架构选型和设计上也花了很多功夫。在对自己编程规范上严格遵循SOLID原则,详见SOLID Architecture principles using simple C# examples. 阿九在<让姑姑不再划拳 码农也要有原则 : SOLID via C#>中用中文详细的对其解释。
真正的项目开发中层次化和模块化的设计要体现出来。园子大牛圣殿骑士在其文章《最近架构随想》中说过“架构决定项目的成败以及高度,所以在编码之前一定要设计好项目的整体规划和架构。好的架构或者考虑比较全面到位的架构会极大的帮助团队,对项目起到灵魂的作用;糟糕的设计往往会把整个项目组带入泥潭或者恶性循环,对项目直接致命打击!”。
首先简单的介绍下这个实际项目的内容,该项目是工厂内部实时监控整个工厂所有产线某种类型的工作站台的生产能力、效能分析、缺陷分析、报表统计、资产统计的解决方案,Web端负责业务逻辑处理以及呈现,Parse端负责机器与中央服务器的数据传输和存储。大致类似于Web端在数据库中取数据,Parse端在数据库中存数据。 Parse端用的WCF技术来实现通信,这里暂且不去提及。
在Web端整体的架构方案如下所示:
系统采用Bootstrap和ASP.NET MVC with Razor作为View,KnockoutJs作为MVVM框架。UI Designer设计好UI,然后由前端工程师绑定相应的UI Model到UI,后端工程师则负责相应的OOAD以及业务处理。这里全部的角色都是本人来做。。。SQL Server数据库作为数据存储,并且利用了ADO.NET Entity Framework作为进行数据访问的ORM框架,DBContext帮助我们实现与数据库的交互。我采用Repository模式将单纯的数据访问操作封装在Repository中,它可以看成是针对某个Entity Data Model 的DbContext的封装。
业务逻辑的实现在Service中并以服务的形式暴露出来,Service调用Repository完成针对数据的存取操作,服务的消费者是ASP.NET MVC的Controller。
这里乃是大致的讲解了一下项目的基本架构,当然这篇文章是讲解技术选型的,所以在后面将会详细的涉及到内部所选择的很好的技术或者工具。
既然是BS项目,不管这个开发框架对应视图的语言比如说Razor视图引擎多么强大,你也不会全部使用它来渲染你的html,这个可能是因为本人原先在CSS和JQuery用的比较多,所以Razor的HTML辅助方法我相对用得少,不习惯在方法的htmlAttribute属性中输入CSS style, 更加坑爹的是razor的html辅助方法没有data-bind参数来嵌入knockoutjs. 所以对razor的使用我只用在一些需要提交并跳转的表单页面上面。
本人开发的web项目由于异步Ajax比较多,有习惯了使用jquery的ajax方法,所以没有使用razor里面的Ajax辅助方法。好了不偏题,概括使用过的比较好的CSS和JS框架: