代码改变世界

随笔档案-2009年08月

使用表达式树构建DomainRoute的URL

2009-08-31 15:48 by Jeffrey Zhao, 5163 阅读, 收藏, 编辑
摘要: 由于DomainRoute支持针对URL域名的捕获和构造,这有些破坏了ASP.NET Routing所制定的“协议”(ASP.NET Routing只支持Path),因此在上一篇文章中,我们需要自己构造一个辅助方法来获得一个“包含域名”的URL。不过根据尽可能强类型的原则,我们应该使用的是类似于MvcFutures中定义的基于表达式树的辅助方法。由于MvcFutures已经提供了非常充足的辅助功能,因此这其实并不需要耗费我们多少代价。 阅读全文

使用Lambda表达式编写递归函数

2009-08-31 01:40 by Jeffrey Zhao, 22929 阅读, 收藏, 编辑
摘要: 其实这从来不是一个很简单的事情,虽然有些朋友认为这很简单。如果您把委托变量的声明和Lambda表达式分开写为两行,那么其实这已经是一中“伪”递归了。可能已经有朋友知道“标准”的做法是什么样的,不过我这里还想谈一下我当时遇到这个问题时想到的一个做法。比较笨(非常符合我的特点),但是可以解决问题。但是装配脑袋很早给了我们更好的解决方法,希望在以后的某一天,我可以把这部分内容融会贯通地理解下来,并且可以详细地解释给大家听。在这之前,我还是听脑袋的话,把Fix强行记在脑袋里吧。 阅读全文

与protected成员有关的单元测试方式

2009-08-28 17:33 by Jeffrey Zhao, 7860 阅读, 收藏, 编辑
摘要: protected是一个有趣而有用的修饰符,它把方法的访问成员严格限制在自身或自己的子类身上。换句话说,在使用过程中,protected成员对外部是开放的(因为其他类可以通过继承来使用该成员),又是封闭的(不是自身或子类的一切成员都无法访问)。而对于单元测试来说,protected成员又是尴尬的,因为它的“开放”意味着我们必须对它进行单元测试,而“封闭”又阻碍了我们在单元测试中涉及protected成员。 阅读全文

所有的成员都应该是virtual的吗?

2009-08-28 10:56 by Jeffrey Zhao, 7374 阅读, 收藏, 编辑
摘要: 这是一个由来已久的讨论,由于Java默认所有的方法都是可以被override的(除非手动写成final),因此从C#语言设计起初就有此番争论,甚至让Anders都出来解释了一下。最近又有人在讨论这方面话题了,虽然我的看法并没有超出这些人所涉及的范畴,但是我还是打算谈一下我的理解。退几步说,就当补充一些“实例”吧。 阅读全文

趣味编程:函数式链表的快速排序

2009-08-27 17:50 by Jeffrey Zhao, 11021 阅读, 收藏, 编辑
摘要: 前一段时间有朋友问我,Haskell快速排序的代码,是否可以转化成C#中等价的Lambda表达式实现。我当时回答,C#中缺少一些基础的数据结构,因此不行。经过补充之后,就没有任何问题了。后来,我觉得这个问题挺有意思,难度适中,也挺考察“基础编程”能力的,于是就自己写了一个。如果您感兴趣的话,也不妨一试。 阅读全文

再谈public类型中internal成员的坏味道

2009-08-27 10:49 by Jeffrey Zhao, 5951 阅读, 收藏, 编辑
摘要: 上一篇文章里我讨论了一个类中internal成员可能会造成的坏味道,并且认为如果您的类型中出现了这个情况,可能就值得检查一下设计上是不是有问题了。文章中我提出了三种可能出现internal的情况,其中两种争议不大,不过对于“public类中是否应该出现internal成员”这一点似乎引起了一些争议。从评论中发现,讨论的一部分焦点并不是我的本意,这可能是我前文描述地较为简单而造成的,因此我现在对于这个方面再进行略为详细的探讨。 阅读全文

类中的internal成员可能是一种坏味道

2009-08-26 16:54 by Jeffrey Zhao, 8281 阅读, 收藏, 编辑
摘要: 最近除了搞ASP.NET MVC之外,也在思考一些编程实践方面的问题。昨天在回家路上,忽然对一个问题产生了较为清晰的认识。或者说,原先只是有一丝细微的感觉,而现在将它和一些其他的方面进行了联系,也显得颇为“完备”。这就是问题便是:如何对待类中internal成员。我现在认为“类中的internal成员可能是一个坏味道”,换句话说,如果您的类中出现了internal的成员,就可能是设计上的问题了。 阅读全文

支持DomainRoute的URL构造辅助方法

2009-08-26 12:18 by Jeffrey Zhao, 6752 阅读, 收藏, 编辑
摘要: 上一篇文章中我们构造了DomainRoute类,这是一个将URL Routing扩展至域名的Route组件,于是现在我们便可以轻易地从一个URL的Domain部分中捕获数据并在程序中使用。不过作为URL Routing的另一个重要部分,在URL构建方面,我们还需给DomainRoute补充额外的支持。 阅读全文

配合域名作URL Routing

2009-08-25 16:00 by Jeffrey Zhao, 10975 阅读, 收藏, 编辑
摘要: 经常有朋友问我,如何对域名作URL Routing,他们可能希望根据域名(或自域名)来获得一些值,最终影响Controller,Action或某些参数的选择。之前我只是简单地说“扩展一下ASP.NET Routing吧”,而现在由于自己也正好需要使用这个功能,便实现了一个扩展。使用下来,效果不错。 阅读全文

常用辅助方法收集

2009-08-25 15:11 by Jeffrey Zhao, 5373 阅读, 收藏, 编辑
摘要: 在项目里经常会出现一些常用的,好用的扩展方法,因此也想到把它收集起来。如果您有什么好的辅助方法,也可以告诉我,希望可以成为一套丰富的辅助方法,简化我们的开发生活。 阅读全文

基于ParsedRoute的Domain Parser

2009-08-24 18:27 by Jeffrey Zhao, 5667 阅读, 收藏, 编辑
摘要: 之前谈了不少关于ASP.NET Routing中ParsedRoute的内容,例如它的设计以及如何调用它的功能,其目的便是为了如今的使用作准备。现在我们就基于它构建一个Domain Parser,而这个Parser也是为今后的功能打基础的。 阅读全文

再谈ASP.NET Routing中的ParsedRoute

2009-08-24 14:10 by Jeffrey Zhao, 5378 阅读, 收藏, 编辑
摘要: ParsedRoute是ASP.NET Routing中的内部类,作用是根据既定模式将一段URL解析为一个RouteValueDictionary。上次的文章中我主要谈了如何利用反射使用类库的内部成员,而这次则想分享一些使用ParsedRoute时产生的一些想法。 阅读全文

Kent Beck确认参加敏捷中国大会2009,讲述其35年架构设计心得

2009-08-23 23:47 by Jeffrey Zhao, 3711 阅读, 收藏, 编辑
摘要: 尘埃落定,Kent Beck终于确定他的行程,将于敏捷中国大会(9月11日~12日)前两天来京参会,并以大讲堂的形式分享其在架构设计方面的心得,在大会当天会做"实效的理想主义"的演讲,和另一位敏捷宣传创始人Dave Thomas一同为大会开幕。另外,这也是KB首次来中国,欢迎一起观瞻这个有点传奇色彩的极限编程创始人、敏捷宣言创始人。 阅读全文

书籍推荐:国内第一本ASP.NET 3.5 MVC技术专著

2009-08-23 15:39 by Jeffrey Zhao, 20110 阅读, 收藏, 编辑
摘要: 周五的时候我知道了国内第一本ASP.NET 3.5 MVC技术专著问世了。当时忙着搬家理东西,写代码,写博客,就没有仔细搭理。现在瞅瞅,不得了,了不得,至少有四大亮点值得推荐。 阅读全文

为什么是HttpContextBase而不是IHttpContext

2009-08-21 15:15 by Jeffrey Zhao, 9943 阅读, 收藏, 编辑
摘要: 由于HttpContext很难进行Mock,因此为了提高可测试性,微软随ASP.NET MVC发布了一个“抽象包”,专门用于对HttpContext及其相关组件进行抽象。不过在Preview 1版本中,这些抽象都是一个个接口,如IHttpContext,IHttpRequest等等。而在下一个版本中,立即就成为了一个个抽象类,如HttpContextBase,HttpRequestBase。现在我打算从“使用”角度来谈一下,为什么这里的确应该用抽象类而不是接口。 阅读全文

在单元测试时指定HttpContext的各种Path

2009-08-21 10:02 by Jeffrey Zhao, 7374 阅读, 收藏, 编辑
摘要: 设置HttpContext中各种Path一直是个问题,因为被测试的方法可能用到各种Path中的任何一个,而各种Path之间有一定关联,如果我们完全手动设置Mock对象的话会是一个浩大的工程。还好,这个问题还算容易解决。 阅读全文

C#编译器对泛型方法调用作类型推断的奇怪问题

2009-08-20 16:50 by Jeffrey Zhao, 8765 阅读, 收藏, 编辑
摘要: 范型是.NET平台上重要的功能,范型即为一个“不确定”的类型。C# 3.0中加强了对于类型推断的力度。但是C#的代码推断作的相当不完整,刚才我又遇上了一个奇怪的问题。 阅读全文

支持Area的ControllerFactory

2009-08-20 11:33 by Jeffrey Zhao, 5722 阅读, 收藏, 编辑
摘要: 由于项目需要,把ASP.NET MVC 2中的Area功能搬到1.0上来吧……其实只是借用个Area名头而已,根本不是那么一回事。有时候,我们就为自己的项目做一点简单的扩展,不是很合适吗? 阅读全文

复用类库内部已有功能

2009-08-19 18:59 by Jeffrey Zhao, 8272 阅读, 收藏, 编辑
摘要: 经常看我博客的人可能会知道,我是一个喜欢搞点小技巧来实现某个功能的人。例如博客的皮肤,自己花了不少时间定义,也是为了效果丰富一些。当然,搞得最多的是从框架或类库内部取出一点小功能来用用,节省自己开发的时间。 阅读全文

再谈抽象类和接口

2009-08-19 12:15 by Jeffrey Zhao, 9521 阅读, 收藏, 编辑
摘要: 昨天我质疑了为什么定义RouteBase抽象类,而不是IRoute接口,我谈到对于一个“没有任何实现”的抽象类来说,开发人员应该使用接口。不过在后面的评论中,有朋友给了我启发,让我忽然想到更多的事情。晚上又再次翻了翻《Framework Design Guidelines》之后,打算再谈一些东西,把这个问题讨论地更加清楚一些。 阅读全文

ASP.NET Routing中最令人摸不着头脑的设计

2009-08-18 19:47 by Jeffrey Zhao, 7336 阅读, 收藏, 编辑
摘要: 您觉得ASP.NET Routing中最令人摸不着头脑的设计是什么? 阅读全文

DefaultControllerFactory不是线程安全的

2009-08-18 16:07 by Jeffrey Zhao, 6808 阅读, 收藏, 编辑
摘要: 由于项目需要,刚才打算为ASP.NET MVC应用程序增强ControllerFactory的功能,因此翻出了ASP.NET MVC的源代码开始阅读其DefaultControllerFactory。代码不多,很容易理解,不过读着读着便发现了问题,因为我发现DefaultControllerFactory不是线程安全的。 阅读全文

将Windows Live Writer打造为“所见即所得”编辑器

2009-08-18 00:14 by Jeffrey Zhao, 6288 阅读, 收藏, 编辑
摘要: Windows Live Writer的最大优势之一,便是可以自动获取目标博客的样式,然后让用户在特定的样式环境下编写文章。我们可以利用它在特定样式环境下编写HTML内容,这篇文章将会提供一个指南,希望可以帮助您打造一个合适的编辑环境。 阅读全文

NHibernate中一对一关联的延迟加载

2009-08-17 09:08 by Jeffrey Zhao, 10690 阅读, 收藏, 编辑
摘要: 这篇文章谈论的其实只是一个小技巧,而且甚至于这个是由于我对NHibernate不够了解而造成的。因此,如果您有更好的做法也请不吝指出。这个问题也就是“如何实现NHibernate中一对一映射的延迟加载”。 阅读全文

从.NET中委托写法的演变谈开去(下):性能相关

2009-08-10 00:44 by Jeffrey Zhao, 11873 阅读, 收藏, 编辑
摘要: 在上一篇文章中,我们详细讲述了C# 3.0中Lambda表达式(构造委托)的使用方式,它在语义上的优势及对编程的简化——这些内容已经属于委托的“扩展内容”。不如这次谈得更远一些,就来讨论一下上文中“编程方式”的性能相关话题。 阅读全文

从.NET中委托写法的演变谈开去(中):Lambda表达式及其优势

2009-08-07 08:24 by Jeffrey Zhao, 20890 阅读, 收藏, 编辑
摘要: 在上一篇文章中我们简单探讨了.NET 1.x和.NET 2.0中委托表现形式的变化,以及.NET 2.0中匿名方法的优势、目的及注意事项。那么现在我们来谈一下.NET 3.5(C# 3.0)中,委托的表现形式又演变成了什么样子,还有什么特点和作用。 阅读全文

从.NET中委托写法的演变谈开去(上):委托与匿名方法

2009-08-05 12:50 by Jeffrey Zhao, 23817 阅读, 收藏, 编辑
摘要: 在《关于最近面试的一点感想》一文中,Michael同学谈到他在面试时询问对方“delegate在.net framework1.1,2.0,3.5各可以怎么写”这个问题。我也问过,那么我就先单独针对这个问题进行解释,然后谈谈自己为什么会提出这个问题吧。 阅读全文

适合C# Actor的消息执行方式(6):协变与逆变

2009-08-03 09:19 by Jeffrey Zhao, 8417 阅读, 收藏, 编辑
摘要: 在上一篇文章中,我们实现了一个简单的爬虫,并指出了这种方式的缺陷。现在,我们就来看一下,如何使用C# 4.0中所引入的“协变和逆变”特性来改进这种消息执行方式,这也是我认为在“普适Actor模型”中最合适的做法。这次,我们动真格的了,我们会一条一条地改进前文提出的缺陷。 阅读全文

Agile China 2009大会报名信息

2009-08-01 19:57 by Jeffrey Zhao, 3938 阅读, 收藏, 编辑
摘要: 在敏捷领域最具有影响力的技术社区InfoQ中文站、敏捷方法论的领导厂商ThoughtWorks共同主办的敏捷中国技术大会(Agile China 2009),将于9月11日~12日(周五、周六)在北京举行。届时将有超过400位来自电信、金融、互联网、教育等行业在内的高级软件开发人员、项目管理人员等参加。 阅读全文

ASP.NET MVC 2 Preview 1 发布

2009-08-01 01:35 by Jeffrey Zhao, 7246 阅读, 收藏, 编辑
摘要: 微软发布了ASP.NET MVC 2的Preview 1版本,并在论坛中向社区征求反馈意见和建议。ASP.NET MVC 2的“主题”是“提高生产力”,提供多个有用的功能。令人放心的是,ASP.NET MVC 2 Preview 1能够与ASP.NET MVC 1.0 RTM共存,不会影响后者的正常使用。 阅读全文
点击右上角即可分享
微信分享提示