代码改变世界

随笔分类 -  02. ASP.NET

尽可能摆脱对HttpContext的依赖

2009-03-09 09:17 by Jeffrey Zhao, 13445 阅读, 收藏, 编辑
摘要: 我们继续《ASP.NET MVC单元测试最佳实践》,今天主要谈论HttpContext的依赖问题。简单说来:虽然已经可以对HttpContext进行Mock(这点增强了可测试性),但是过度依赖HttpContext对于单元测试来说也是一个伤害。这是HttpContext对象的天性所致:它实在太复杂了。因此,我们的代码要尽可能减少对HttpContext的依赖。 阅读全文

请别埋没了URL Routing

2009-03-05 09:04 by Jeffrey Zhao, 13795 阅读, 收藏, 编辑
摘要: 我们现在把数据转化的工作交给URL Routing,它的职责原本就是从URL中提取数据——任意类型的数据,以及把数据转化为URL,我们现在只是充分利用了URL Routing的功能而已。事实上,我建议任何使用URL表示的数据,都把转化的职责转移到URL Routing这一层,因为这是我们基本上无可避免地需要根据数据来生成URL。那么Model Binder难道就没有用了吗?当然不是。URL Routing负责从URL中提取数据,而Model Binder则用于从其他方面来获取参数。 打开视野,发挥程序员的敏捷思路,生活就会变得更加美好。 阅读全文

Model Binder机制的缺陷

2009-03-02 09:08 by Jeffrey Zhao, 12632 阅读, 收藏, 编辑
摘要: Model Binder提供了一种机制,将请求中的数据转化成Action方法的参数。但是它是唯一的做法吗?它真是合适的做法吗?本文提出了Model Binder机制的一个缺陷,并且在下一篇文章中提出解决方案。 阅读全文

尽可能地使用强类型数据

2009-02-27 08:19 by Jeffrey Zhao, 21172 阅读, 收藏, 编辑
摘要: 我们继续来谈《最佳实践》,这次的主题便是“强类型”。强类型的好处有很多,张嘴便可随意举上几例:能够享受代码提示功能、能够获得重构工具的支持、能够在编译期发现更多错误…… 阅读全文

对ASP.NET MVC项目中的视图做单元测试

2009-02-25 01:01 by Jeffrey Zhao, 19396 阅读, 收藏, 编辑
摘要: 说到ASP.NET MVC,我们似乎始终都在关注对于Controller的测试,那么我们该如何对视图进行独立的单元测试呢? 阅读全文

ASP.NET MVC单元测试最佳实践

2009-02-23 09:07 by Jeffrey Zhao, 24197 阅读, 收藏, 编辑
摘要: 我对于微软的一个特点时常呈一种否定态度,那就是因为它往往为了“显摆”自己的技术而向外界展现出一种“飘渺的美好”愿景。例如WebForm推出时铺天盖地的“拖拽”风潮,看似精彩却迷人双眼。这是我在上周“.NET技术大会”上的主题Session。先提供这次Session内容的PPT和演示吧,在接下来的一段时间内,我会陆续分析这次课程的内容。希望大家能够尽可能地把东西给“用好”,而不仅仅是得到表面上的正确结果。 阅读全文

简化异步操作(上):使用CCR和AsyncEnumerator简化异步操作

2009-02-20 11:25 by Jeffrey Zhao, 11095 阅读, 收藏, 编辑
摘要: 在以前的文章中,我曾多次强调应用程序中异步化的重要性。尤其对于IO密集型操作来说,异步执行对于应用程序的响应能力和伸缩性有非常关键的影响。正确使用异步编程能够使用尽可能少的线程来执行大量的IO密集型操作。可惜的是,即使异步编程有避免线程阻塞等诸多好处,但是这种编程方式至今没有被大量采用。其原因有很多,其中最主要的一点可能就是异步模型在编程上较为困难,导致许多开发人员不愿意去做。因此,无论是微软官方还是社区中都出现了一些简化异步编程方式的组件,例如微软的CCR和Wintellect's .NET Power Threading Library中的AsyncEnumerator。但是它们都有同样的局限性,例如操作之间存在依赖,则很难让它们并行执行。对于这样的场景,我们还需要构建额外的解决方案,使多个有依赖关系的异步操作之间的协作调用得以尽可能的简化。 阅读全文

为ASP.NET MVC扩展异步Action功能(下)

2009-02-04 09:04 by Jeffrey Zhao, 16079 阅读, 收藏, 编辑
摘要: 续上篇:异步请求处理是ASP.NET 2.0中引入的高级特性,它依托IO Complete Port,对于提高IO密集型应用程序的吞吐量非常重要(详见原理描述和性能测试)。但是目前ASP.NET MVC框架缺少异步Action功能,这也就是老赵经常挂在嘴边的那个“目前ASP.NET MVC所缺少的非常重要的功能”。我在春节休假期间仔细思考了一下这方面的问题,得出了一个相对不错的扩展:完整,方便,并且非常轻巧——核心逻辑代码只有200行左右,这意味着绝大部分功能将会委托给框架中现成的内容,确保了扩展的稳定,高效并且拥有较好的向后兼容性。 阅读全文

为ASP.NET MVC扩展异步Action功能(上)

2009-02-02 09:22 by Jeffrey Zhao, 26833 阅读, 收藏, 编辑
摘要: 异步请求处理是ASP.NET 2.0中引入的高级特性,它依托IO Complete Port,对于提高IO密集型应用程序的吞吐量非常重要(详见原理描述和性能测试)。但是目前ASP.NET MVC框架缺少异步Action功能,这也就是老赵经常挂在嘴边的那个“目前ASP.NET MVC所缺少的非常重要的功能”。我在春节休假期间仔细思考了一下这方面的问题,得出了一个相对不错的扩展:完整,方便,并且非常轻巧——核心逻辑代码只有200行左右,这意味着绝大部分功能将会委托给框架中现成的内容,确保了扩展的稳定,高效并且拥有较好的向后兼容性。 阅读全文

Lab:体会ASP.NET异步处理请求的效果

2009-01-19 13:21 by Jeffrey Zhao, 11515 阅读, 收藏, 编辑
摘要: 关注老赵的朋友们一定记得,我不止一次强调过在ASP.NET应用程序中使用异步方式处理请求对于提高吞吐量的作用。不过似乎很多朋友们一直没有理解这样做的原因,亦或是对这样做的效果没有一个实际的“体会”,甚至在质疑这么做的功效。现在老赵将向大家进行一个演示,我们一起来看一下这么做的实际效果如何。 阅读全文

这下没理由嫌Eval的性能差了吧?

2009-01-09 02:32 by Jeffrey Zhao, 18979 阅读, 收藏, 编辑
摘要: 写ASP.NET中使用Eval是再常见不过的手段了,好像任何一本ASP.NET书里都会描述如何把一个DataTable绑定到一个控件里去,并且通过Eval来取值的用法。什么,您觉得Eval性能差不堪大用?那么就来看看这篇文章吧。(Updated:提供思考题解答) 阅读全文

对aspx等页面进行预编译以进行编译期检查

2009-01-08 12:38 by Jeffrey Zhao, 14062 阅读, 收藏, 编辑
摘要: 话说在开发Web应用程序时能够很轻易地对后台代码进行编译,并获得编译时的错误。可惜有时候我们对后台代码进行重构或Find all references的时候都会忽略aspx,ascx和master等文件里的代码,因为它们只有在打开时(执行期)才能发现错误。这是一个非常惹人厌的问题,但是事实上,我们只需要对一个asp.net目录下的文件进行预编译即可发现哪里出现问题。在项目中我经常会准备一个bat脚... 阅读全文

一个较完整的关键字过滤解决方案(下)

2009-01-05 14:59 by Jeffrey Zhao, 19624 阅读, 收藏, 编辑
摘要: 陷阱何在?适用场合是什么?如何控制输入过滤和输出过滤?我们真的需要HttpModule吗?性能如何?在这篇文章里,我们来针对一些问题进行讨论。如果您觉得有哪些您感兴趣但是没有涉及到的问题则请在评论中补充,我会修改文章添加一下内容。 阅读全文

一个较完整的关键字过滤解决方案(中)

2008-12-24 10:56 by Jeffrey Zhao, 21507 阅读, 收藏, 编辑
摘要: 上篇文章提出的问题解决了没有?哦哦,我是指采取命名约定的方式来改变过滤行为。当然有问题,不过我这里提一下比较重要的两个:1. 首先,就是“改名”这种行为——究竟是否方便?2. 再者,命名真是我们可以控制的吗?路漫漫而修远兮…… 阅读全文

一个较完整的关键字过滤解决方案(上)

2008-12-22 09:11 by Jeffrey Zhao, 27318 阅读, 收藏, 编辑
摘要: 关键字过滤功能自然无比重要,但是如果要在代码中对每个输入进行检查和替换则会是一件非常费神费事的事情。尤其是如果网站已经有了一定规模,用户输入功能已经遍及各处,而急需对所有输入进行关键字过滤时,上述做法更可谓“远水解不了近渴”。这时候,如果有一个通用的办法,呼得一下为整站的输入加上了一道屏障,那该是一件多么惬意的事情。这就是本文希望解决的问题。是不是很简单?我一开始也这么认为,不过事实上并非那么一帆风顺,而且在某些特定条件下似乎更是没有太好的解决方法…… 阅读全文

在Web应用程序开发过程中利用ASP.NET MVC框架的实战技巧

2008-11-07 23:18 by Jeffrey Zhao, 30969 阅读, 收藏, 编辑
摘要: 这是我在TechED 2008北京站讲的一个Community Session,主要内容是在传统的ASP.NET(Web Forms)应用程序中运用ASP.NET MVC中一些优秀特性的方式。这里是PPT和Demo下载,以后我再慢慢细说。 阅读全文

概念,依旧是概念……csproj文件是做什么用的?

2008-08-04 08:57 by Jeffrey Zhao, 44368 阅读, 收藏, 编辑
摘要: 本来今天是在写一篇关于LINQ的文章,不过写着写着忽然觉得有些找不着北的感觉,似乎有点过于发散了?于是来博客园逛了一下,正好发现有朋友发了一篇文章《.NET面试题,看看你的水平》,于是就在这篇文章里和目前正红火的小包子同学为某个问题进行了一番争论。而在吵吵闹闹的过程中看到这么一句话“pdb文件需要放在Debug目录下才有效果”,忽然觉得有个话题值得一说:“开发环境与运行环境”。回想起平时被问到的问题,发现有不少朋友对于开发环境和运行环境并不是分的非常清楚。那么就让我们从标题中的问题开始:“csproj文件究竟是做什么用的”。 阅读全文

输出缓存与CachePanel

2008-07-28 10:02 by Jeffrey Zhao, 40077 阅读, 收藏, 编辑
摘要: 缓存的作用自不必说,提高系统性能最重要的手段之一。ASP.NET作为一个成熟、强大的应用程序框架,缓存相关的设计自然是它不可或缺的一部份。ASP.NET中的输出缓存即为所谓的“OutputCache”。不过我们有时候需要更灵活和强大的缓存方式,这就CachePanel诞生的原因。本文将分为以下三个部分: 1、缓存的级别 2、ASP.NET的Output Cache及其缺陷 3、CachePanel的构建及使用 阅读全文

方案改进:直接通过User Control生成HTML

2008-07-14 13:24 by Jeffrey Zhao, 43605 阅读, 收藏, 编辑
摘要: 对于使用User Control生成HTML的方式,大家应该已经比较熟悉了,老赵也曾经写过一篇文章(《技巧:使用User Control做HTML生成》)来描述这个做法。在“我的衣橱”中大量使用了这种生成HTML的方法。不过当项目达到一定规模之后,这个方法的不足之处也慢慢地体现了出来。如果能解决这个问题,就无疑是一个锦上添花的举动…… 阅读全文

精化集ASP.NET AJAX与ASP.NET MVC分类第二轮筛选结果

2008-06-14 16:48 by Jeffrey Zhao, 47489 阅读, 收藏, 编辑
摘要: 以下是包同学导给我的清单。老赵的第二轮把关很严,杀了几乎99%的文章。不过似乎有少部分并没有经过我的手,可能是其他同学转过来的吧。第三轮老赵依旧会严格把关,肯定也会杀更多(包括通过其他同学第二轮的)文章。请大家监督,有疑问请及时告诉老赵。 阅读全文
上一页 1 2 3 4 5 6 7 8 ··· 11 下一页