一年开发ASP.NET MVC4项目所用所学技术经验总结

阅读目录

  • 文章背景
  • 前端所用技术摘要
  • 后端所用技术摘要

1. 文章背景

  本人2014年从Java转行到C#从事BS项目的开发,刚开始接触的是ASP.NET WebForm,结果对于我这种从jsp+servlet时代的人非常的不适应,开发者不能自由的操作HttpContext及其原始的Web命名空间中的类库来开发,而是全部封装成基于事件的机制来操作,非常的别扭。后面就找到了ASP.NET MVC这个框架。发现不错,而且从Java Web方向转过来学习ASP.NET MVC还是容易接受的。 在其的学习上纸质书籍我看了两本(由于公司的IDE是VS2010,所以我就用的MVC4啦):

  1. 《Professional ASP.NET MVC 4》,wrox推荐的,这个感觉是一个入门教材,看完了你可能会使用这个框架及其里面的razor知识等,但是你可能不能全部了解框架内部的相关比如说路由机制的原理,那么你可以看第二本书。
  2. 《ASP.NET MVC 4 框架揭秘》,这是博客园大牛Artech写的书,在首页的博客推荐榜榜首可以看到他。看完这本书之后你大致就可以了解该框架对HttpModule和HttpHandler的封装和框架各种机制的内部实现原理了。

  注:其实光看书你也看不下去,因为还是有点枯燥的,尤其是第二本。但是这个书当你在开发的时候遇到的问题上面有解决方案或者给你思路的时候,你就会豁然开朗,就像本人开发一年ASP.NET MVC项目之后我也没事就去看看这两本书,发现都有一番韵味。当然现在技术更新的快,ASP.NET已经到5了,MVC也是6了,但是这个你参透这个MVC 4版本,其他也好说。

然而我写这篇文章的目的不是详细讲解ASP.NET MVC 框架的详细知识。

而是总结概括这一年我开发所用到的比较好的技术和知识,目的是为了以后我反过头可以快速的想起以前的所学知识,加快我开发新项目技术选型的速度。

2. 整体架构方案

  由于本人之前就有相关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。

  这里乃是大致的讲解了一下项目的基本架构,当然这篇文章是讲解技术选型的,所以在后面将会详细的涉及到内部所选择的很好的技术或者工具。

3. 前端所用技术摘要

  既然是BS项目,不管这个开发框架对应视图的语言比如说Razor视图引擎多么强大,你也不会全部使用它来渲染你的html,这个可能是因为本人原先在CSS和JQuery用的比较多,所以Razor的HTML辅助方法我相对用得少,不习惯在方法的htmlAttribute属性中输入CSS style, 更加坑爹的是razor的html辅助方法没有data-bind参数来嵌入knockoutjs. 所以对razor的使用我只用在一些需要提交并跳转的表单页面上面。

  本人开发的web项目由于异步Ajax比较多,有习惯了使用jquery的ajax方法,所以没有使用razor里面的Ajax辅助方法。好了不偏题,概括使用过的比较好的CSS和JS框架:

  • CSS框架及其新的知识

    • Bootstrap: 其是现在前端开发非常火的一个前端开发框架,是最受欢迎的 HTML、CSS 和 JS 框架,用于开发响应式布局、移动设备优先的 WEB 项目。选择Bootstrap,可以同时兼容移动设备访问和PC浏览器访问,他内部里面也有非常好的一些JS插件,CSS组件也设计的非常美观大方,使用起来也相当简单,直接附加对应的class名字即可。在中文官网上介绍了相关的CSS&JS库。同时Bootstrap是可以定制的。
    • Font Awesome: 是一个专门为bootstrap设计的图标字体,Font Awesome 中包含的所有图标都是矢量的,也就可以任意缩放,避免了一个图标做多种尺寸的麻烦。CSS对字体可以设置的样式也同样能够运用到这些图标上了。
    • animate.css:一个浏览器兼容的CSS动画库,非常方便使用。
    • CSS3 & HTML5:虽然都在说CSS3和HTML5,但是很多传统的web开发人员还是没有比较系统的看过其中的新的特性,这里我强烈推荐完整的看看,IE8是会被淘汰的,很多老页面里面必须要用JS来处理的效果都可以在在CSS3和HTML5中的新特性中找到。
  • JS框架及其插件相关

    • 页面效果类

      • Bootstrap推荐或者嵌入的JS框架: Click this
      • JQuery.UI: 是在jQuery 基础上开发的一套界面工具,几乎包括了网页上你所能想到和用到的插件以及动画特效。它是免费开源的,用户可根据需要自定义甚至重新设计。
      • jQuery.Pin插件:能将任意页面元素“钉在”某个容器顶部,而且在尺寸小的屏幕上能够自动禁用这种效果。
      • Messenger插件:是一个非常酷的弹框(Alert)组件,能够非常好的与Bootstrap融合,单独使用效果也非常棒。
      • Buttons: 是一个基于 Sass 和 Compass 构建的CSS按钮(button)样式库,图标采用的是Font Awesome,可以和Bootstrap融合使用。
      • DateTime Picker插件:Bootstrap日期时间选择器(Bootstrap DateTime Picker)是一个Bootstrap组件,能够简化页面上日期、时间的输入。
      • Boostrap-wysiwyg插件:bootstrap-wysiwyg是一个jQuery Bootstrap插件(5KB, < 200 行代码)可以将任何一个DIV转变成一个WYSIWYG富文本编辑器。
      • FullCalendar插件:一款非常实用的日历页面开发插件。使用这款插件能够快速帮助你实现基于web的日历查看功能,类似于outlook的日历项功能。
      • Nivo-Slider插件:最受欢迎的图片轮播插件。
      • 3D Gallery插件:3D图片轮播插件。
      • ScrollUp插件:一个可以点击定义区域使得页面返回顶部的jquery插件。
      • jQuery-Backstretch插件:Backstretch是一个轻简的jQquery图片展示插件,它可以在页面相关区域增加动态大小的背景图片,图片的大小完全适应于区域的大小。
    • 数据UI双向绑定
      • Knockoutjs:KO是一个简约的实现动态UI或者动态数据的双向绑定的基于MVVM模式的JS库。如果不了解MVVM模式可以先行学习,KO的双向绑定能够辅助程序员更少的编写JS代码,只需要简单的data-bind来绑定数据到html元素中就可以完成绑定。在单页Web程序中使用ko也更加方便.

3. 后台所用技术摘要

  • 工具(程序创建推荐安装,都可以在NuGet中获取呦)

    • ELMAH:错误日志记录模块和处理程序,它能够记录应用程序中出现的所有未处理异常,并在日志中保存这些未处理异常。
    • MiniProfiler: MiniProfiler会向网站的每个页面添加一个小部件,单击小部件,我们就可以得到当前页面的性能解析信息如每个方法的执行时间,Linq to EF的原始SQL内容等。
    • WebBackgrounder:这里我给了一个中文的使用示例。WebBackgrounder包可以安全地运行ASP.NET应用程序中反复出现的后台任务,ASP.NET和IIS随时都可以自由地终止我们应用程序的AppDomain。ASP.NET提供机制来通知代码终止时间。WebBackgrounder利用这一点可以尝试为那些反复出现的运行任务安全的运行一个后台定时器。
    • JSON.NET:是最流行的高性能的.NET JSON序列化框架,API强大,各种设置能够完全满足各种序列化场景。这里是园子的一篇中文部分功能介绍Newtonsoft.Json 的序列化与反序列化
    • Log4net:其是Apache开源组织为.NET设计的一款开源的日志记录库。相信大家都非常熟悉,这里是园子里的一篇中文使用介绍Log4Net使用指南   
  • 框架

    • Entity Framework: 未完待续

一年开发ASP.NET MVC4项目经验总结的更多相关文章

  1. ASP.NET 5 入门(1) - 建立和开发ASP.NET 5 项目

    ASP.NET入门(1) - 建立和开发ASP.NET 5 项目 ASP.NET 5 理解和入门 使用自定义配置文件 建立项目 首先,目前只有VS 2015支持开发最新的ASP.NET 5 程序,所以 ...

  2. ASP.NET入门(1) - 建立和开发ASP.NET 5 项目

    原文转载自:http://www.cnblogs.com/zergcom/p/4493358.html 建立项目 首先,目前只有VS 2015支持开发最新的ASP.NET 5 程序,所以我们首先需要下 ...

  3. 基于BUI开发Asp.net MVC项目

    因工作性质参于并开发过一些Web应用程序,前端项目框架也用了不少,比如MiniUI.ExtJS.以及定制的项目前端框架.无意中看到BUI前端框架,第一眼就被它的优雅布局所吸引.简洁的项目门户Banne ...

  4. angluarjs2项目生成内容合并到asp.net mvc4项目中一起发布

    应用场景 angular2(下文中标注位NG2)项目和.net mvc项目分别开发,前期采用跨域访问进行并行开发,后期只需要将NG2项目的生产版本合并到.net项目. NG2项目概述 ng2项目采用的 ...

  5. 在asp.net mvc4项目里bootstrap datetimepicker控件的使用

    前段时间写了一篇关于调用阿里大于的短信接口来开发例会短信群发通知功能的文章http://www.cnblogs.com/zhouyuangan/p/apicall_1.html,其中的例会时间是需求中 ...

  6. Asp.Net mvc4 项目 在vs中调试正常 在IIS发布后连接oracle数据库时提示数据库连接关闭

    解决办法: 1.打开iis,找到发布的程序 2.右键单击“TAKANAPP” 从右键菜单选择“管理应用程序”--“高级设置....” 在打开的高级设置  面板 查看对应的应用程序池 名称 3.设置应用 ...

  7. ASP.NET MVC4入门到精通系列目录汇总

    序言 最近公司在招.NET程序员,我发现好多来公司面试的.NET程序员居然都没有 ASP.NET MVC项目经验,其中包括一些工作4.5年了,甚至8年10年的,许多人给我的感觉是:工作了4.5年,We ...

  8. ASP.NET MVC4入门到精通系列目录汇总(转)

    序言 最近公司在招.NET程序员,我发现好多来公司面试的.NET程序员居然都没有 ASP.NET MVC项目经验,其中包括一些工作4.5年了,甚至8年10年的,许多人给我的感觉是:工作了4.5年,We ...

  9. ASP.NET MVC项目框架快速搭建实战

    MVC项目搭建笔记---- 项目框架采用ASP.NET MVC+Entity Framwork+Spring.Net等技术搭建,采用”Domain Model as View Model“的MVC开发 ...

随机推荐

  1. 从汇编来看i++与++i

    故事背景,一个正在c语言的家伙,问我++i 和 i++的问题,我当时由于要去上课没给他说,正好今晚有空就測试了一下例如以下代码: 编译环境:VS2010  语言:C++ #include <io ...

  2. 微信訪问页面,莫名其妙刷新两次,火狐、谷歌、ie无问题

    做微信刮刮卡活动,有个用户刮奖次数的限制,昨天一切正常,所以就修改了一些东西,今天再打开的时候刮奖次数第一次是1,第二次是3,第三次是5.感觉就是页面刷新了两遍. 检查前后台代码.发现一些bug就顺手 ...

  3. .net通用权限框架B/S (三)--MODEL层(2)

    接上篇 实体数据模型保存后生成上下文和实体 上下文和实体实际是由根据.tt模版生成的 当实体数据模型.edmx更新保存后,上下文和实体就会根据.tt模版自动更新 生成的上下文继承 DbContext ...

  4. Datatable根据多行排序

    DataTable dt = new DataTable(); dt.Columns.Add("ID", typeof(int)); dt.Columns.Add("Na ...

  5. [分 享] PHPCMS V9 更换域名,附件地址无法批更新(更换变便)问题>解决方法!!

    大家应该都有在域名更换(比如说,从本地上传到空间)的情况下,用内容>附件管理>附件地址替换 功能. 基本上替换不了所有表中原来域名的地址. 现PHPCMS V9最新版本的依旧存在些问题. ...

  6. [置顶] 蓝牙基础知识进阶——Physical channel

    从本篇文章开始,晓东将会和大家一起来学习一些蓝牙的比较高阶的基础知识. 二.物理通道 物理通道是piconet区分的标准,它是蓝牙系统结构层次中的最底层了.     Q1:物理通道有哪些类型 物理通道 ...

  7. struts2中的表达元素标签使用详解

    级联标签是使用:一级下拉框应该使用map对象的key集合作为下拉框元素,二级下了框应该使用一级下拉框对应的选择值自动的弹出待选择的元素值(集合) 页面代码如下:<s:set name=" ...

  8. EditText 默认不获取焦点,弹出软键盘布局变形解决方案

    关于弹出软键盘布局变形解决方案: 在androidMainfest.xml文件中在此Activity中写入 android:windowSoftInputMode="adjustPan&qu ...

  9. Grunt之学习历程(转自网上资源-整理自用)

    认识Grunt Grunt中文文档 安装Node环境 CNode 配置Grunt Grunt中文文档-配置任务 什么是package.json package.json中文文档 关于Grunt资料 应 ...

  10. 练习-checkbox 全选 ,反选, 单选,以及取值

    1.方法1 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w ...