ASP.NET MVC开发最佳实践


ASP.NET MVC最佳实践与应用 赵劼 自我介绍 • 赵劼(jie2,非“颉”或“佶”) • 日写代码三百行,不辞长作程序员 • 喜挖掘,擅“滥用” • 兴趣:编程,音乐,减肥 ASP.NET MVC框架 ASP.NET MVC是…… • 一个新的ASP.NET应用开发方式 – 另一个自然便是“ASP.NET Web Form” – 弥补ASP.NET Web Form框架的一些缺陷 • 一种新的设计选择 • 对HTML有更多控制 • 更易于测试 • 灵活,易扩展,易替换 ASP.NET MVC不是…… • 三层架构设计的替代品 • ASP.NET Web Form的替代品 • ASP.NET Web Form的升级 – ASP.NET Web Form 4.0已处于开发过程中 • 适合RAD的框架 • 适合任何项目使用 • 适合任何人使用 您适合使用ASP.NET MVC吗? • 您接受“单元测试”的功效吗? • 您接受ASP.NET MVC的非RAD特性吗? • 您接受邻域驱动开发(DDD)吗? • 您“敏捷”吗? ASP.NET MVC框架组成 ASP.NET Routing (System.Web.Routing.dll) ASP.NET Abstractions (System.Web.Abstractions.dll) ASP.NET MVC (System.Web.Mvc.dll) ASP.NET MVC执行流程 Web Request Routing Route Route Handler HTTP Handler Controller View Engine View Response 应用程序典型架构 • ASP.NET MVC为一个表现层架构 • Front Controller模式 • 与业务逻辑分离 模型 Model 控制器 Controller 视图 View 应用程序典型架构(续) DemoApp.Web DemoApp.Web.Models DemoApp.Web.Controllers DemoApp.Business 表现层 业务层 DemoApp.Data数据层 应用程序典型架构(续) •(附解决方案截图) 最佳实践 最佳实践 全部用法最佳实践 什么是最佳实践? • 整体使用方法的一个子集 • 提供了一种开发准则(Guidelines) – 提高性能 – 提高可维护性 – etc. • 真正发挥框架功效 • 为“周边”辅助开发提供辅助点 单元测试 • 单元测试 != 测试驱动开发(TDD) • 单元测试与最佳实践 • 单元测试并不容易 • 对一切事物进行单元测试 – Model / View / Controller – Client Side JavaScript – Business Logics 时刻关注可测试性 • 优秀框架的新标准:可测试性(Testability) • 日省吾身:这么做容易测试吗? • 分离一切关注点,使各组件可分别测试 – Model / View / Controller – View Engine – Action Invoker – Controller / Action / Parameter Descriptor – Model Binder 服务器端最佳实践 实践1:分离一切关注点 • 控制器与视图完全解耦 – 互不了解实现,只是共享了Model • 控制器不了解HttpContext – 一切数据从参数传入 – 避免对HttpContext进行Mock,简化测试 • 视图不了解HttpContext – 视图的数据完全从ViewData中获得 – 使视图可以单独测试 实践2:使用强类型的视图 • 强类型一切视图 – ViewPage – ViewUserControl – ViewMasterPage • 为每个视图定义对应的视图模型 – MyDemo.Web.Models • 避免使用弱类型的ViewData字典 – 难以在编译期检测视图中的错误 实践3:尽可能薄的控制器 • 为什么总是说Web Form难以单元测试? – Code Behind中包含了大量的业务逻辑 • 连接表现层与业务层(仅此而已) – Action获取表现层输入 – 对输入进行整理并转发至业务层 – 获取业务层返回,并转换成视图所需数据 – 返回ActionResult 实践4:编写各种的辅助方法 • DRY原则 – 微软目前提供的辅助方法远远不够 – MvcContrib:http://codeplex.com/MvcContrib • 为View编写辅助方法 – 强类型一切,便于编译期检查错误 – 避免Tag Cloud • 为单元测试编写辅助方法 – 简化测试代码 演示 服务器端最佳实践 客户端最佳实践 实践1:客户端MVC • 客户端的MVC: – Model:HTML标记 – View:CSS – Controller:JavaScript • 编写标准的语义化的客户端标记 – 简化对View单元测试的难度 – 简化对JavaScript单元测试的难度 实践2:对JavaScript单元测试 • 编写优秀的JavaScript代码 – 组件化 – 注重复用 – 结合可视化元素?脱离可视化元素? • 使用JavaScript单元测试与Mock框架 • 思考:Web Form“污染”客户端标记的ID 真是很严重的问题吗? 演示 客户端最佳实践 ASP.NET MVC对传统Web Form模型的影响 实践1:基于抽象开发 • System.Web.Abstractions.dll • Web Form各组件均强烈依赖于HttpContext 对象,而ASP.NET Abstractions提供了对 HttpContext的抽象,大大简化了HttpContext 的Mock操作。 实践2:减少不可测试的代码 • 减少Code Behind中的代码 • 使用MVP模式 • 减少对于HttpContext的依赖 – 即使已经基于抽象,但是Mock还是不方便 演示 MVC对传统Web Form的影响 总结 • ASP.NET MVC为一种新的应用程序开发方式, 与Web Form模型相辅相成 • 只有符合一定规范进行开发,才能真正享 受框架带来的便利 • Web Form模型是一种优秀的框架,使用合 理的分离机制,也能够得到较好的可测试 性 Q& A 谢谢
还剩32页未读

继续阅读

下载pdf到电脑,查找使用更方便

pdf的实际排版效果,会与网站的显示效果略有不同!!

需要 8 金币 [ 分享pdf获得金币 ] 0 人已下载

下载pdf

pdf贡献者

伤痕美

贡献于2015-05-20

下载需要 8 金币 [金币充值 ]
亲,您也可以通过 分享原创pdf 来获得金币奖励!
下载pdf