代码改变世界

如何对一个博客系统进行CSS管理?

2009-11-10 19:56 by Jeffrey Zhao, 17213 阅读, 收藏, 编辑
摘要:忽然发现,我的博客皮肤又改变了,这次是About栏。我在我的博客版式上投入了很大的精力,动用了大量的JavaScript和自定义CSS,希望可以让浏览效果更加“和谐”。可是,博客园在样式管理上似乎经常会出现一些问题,时不时让一些基础的样式修改破坏了版式。为什么这样的事情总是一而再,再而三地发生呢?这无法不让我多想一些。似乎这次的问题是由两方面原因造成的:1) 博客园修改了过于宽泛的选择器 2) 皮肤的样式直接依赖了最基础的样式 阅读全文

一次失败的尝试(上):原来GetCustomAttributes方法每次都返回新的实例

2009-11-10 00:08 by Jeffrey Zhao, 21338 阅读, 收藏, 编辑
摘要:前一段时间我在比较各种URL生成方式性能的时候,其实已经为利用Lambda表达式的做法进行了优化。在优化之前,使用Lambda构建URL的性能比现在的结果还要慢上50%。性能低下的原因,在于每次都使用GetCustomAttributes来获取参数(或其他一些地方)标记的Custom Attribute。这里应该用到了反射,在这种密集调用情形中性能急转直下。 阅读全文

我在TechEd的演讲:Real World ASP.NET MVC

2009-11-09 10:03 by Jeffrey Zhao, 20893 阅读, 收藏, 编辑
摘要:上周的TechEd 2009比想象中忙,掺和了不少Session。不过一到晚上就开始胡吃海喝,总体来说过得还是挺不错的——只不过博客就落下了。嗯嗯,从现在开始继续。这个是我在这次TechEd上关于ASP.NET MVC的演讲以及演示代码下载,内容比较多,时间有些不够用。大家不妨看看,权当消遣。我去处理别的事情了……太多邮件没有回复,太多RSS没有看了。 阅读全文

为URL生成设计流畅接口(Fluent Interface)

2009-11-03 09:43 by Jeffrey Zhao, 19656 阅读, 收藏, 编辑
摘要:昨天我比较了三种URL生成方式的性能,并对结果进行了分析。从结果中我们得知使用Lambda表达式生成URL的性能最差,而且差到了难以接受的地步。经过分析,我们发现其中光“构造表达式树”这个阶段就占了接近30%的开销。虽然表达式树的节点是有些多,但是.NET中创建对象其实非常快,我实在没想到它会占这么高的比例。因此,我们需要这种做法进行方向性的调整,减少对象创建的数目。 阅读全文

各种URL生成方式的性能对比(结论及分析)

2009-11-02 00:16 by Jeffrey Zhao, 19850 阅读, 收藏, 编辑
摘要:上次我们设计了一个实验,比较三种不同URL生成方式的性能。您运行了吗?如果运行的话,有没有对结果进行一些的分析呢?现在我们就来详细观察及分析这次试验的结果,并给出我的分析。如果您有一些其他的看法,也请进行一些补充。从结果上看,Lambda表达式生成URL的性能令人难以接受,经过分析之后更发现,这是一个硬伤,必须根本性,方向性地进行改变。您对此有什么看法呢?我们不妨一起讨论一下如何做到“既美观,又高效”。如果您有更理想的做法也请告诉我。 阅读全文

统计一个表达式树拥有的节点数量

2009-10-31 21:05 by Jeffrey Zhao, 16751 阅读, 收藏, 编辑
摘要:如果要统计表达式树的节点数量,我们可以编写一个Expression Visitor来完成这个任务。值得注意的是,由于ExpressionVisitor只负责“遍历”,因此在进行“统计”、“收集信息”等任务的时候,都需要在子类内部保存临时信息。因此,许多ExpressionVisitor的实现其实都不是线程安全的。一般说来,由于自动生成闭包等机制,一个Lambda表达式实际构造出的节点总比我们“看出”的要多一些。 阅读全文

各种URL生成方式的性能对比

2009-10-30 00:31 by Jeffrey Zhao, 23334 阅读, 收藏, 编辑
摘要:在上一篇文章中我们列举了各种URL生成的方式,其中大致可以分为三类:1) 直接拼接字符串,2) 使用Route规则生成URL,3) 使用Lambda表达式生成URL。我们可以轻易得知,这3种作法可维护性依次增加,而性能依次减少。不过,我们还是有一个疑问,这个性能究竟相差多少?它是否的确真的可以被忽略?为此,我们还是来进行一次性能对比吧。您可以在这里下载文末的解决方案,亲自试验一下——不过在此之前,您不妨进行一个预测,猜猜看最后的结果究竟如何。 阅读全文

浅谈URL生成方式的演变

2009-10-29 00:29 by Jeffrey Zhao, 20541 阅读, 收藏, 编辑
摘要:开发Web应用程序的时候,在页面上总会放置大量的链接,而链接的生成方式看似简单,也有许多不同的变化,且各有利弊。现在我们就来看看,在一个ASP.NET MVC应用程序的视图中如果要生成一个链接地址又有哪些做法,它们之间又是如何演变的。这个演变的过程,其实也是一步步发现缺点,再进行针对性改进的过程。我们虽然使用在ASP.NET MVC的视图作为演示载体,但是它的方式和思路并不仅限于此,它也可以用在ASP.NET MVC的其它方面(如在Controller中生成URL),或是其它模型(如WebForms),甚至与Web开发并无关联的应用程序开发上面。 阅读全文

您选择简单的组合,还是完整的集成?(补充)

2009-10-28 10:03 by Jeffrey Zhao, 16920 阅读, 收藏, 编辑
摘要:昨晚就写到这里,刚看到有朋友提意见了,说我标题党,标题写着“文化”,里面变成PowerShell介绍了。其实如果我要介绍PowerShell就会更详细一些,而现在即使把所有的PowerShell脚本删了也还是有些内容的吧……不过现在还想多谈一些东西。例如,如果你要完成一件事情,那么会选择什么方式。我这里简单分为两种,一种是集成进常用的工具,如Visual Studio;另一种便是使用额外的工具——可以是Shell,也可以是别的。 阅读全文

您选择简单的组合,还是完整的集成?

2009-10-28 01:09 by Jeffrey Zhao, 17252 阅读, 收藏, 编辑
摘要:其实这是两种文化,很多人说前者属于Unix文化,后者属于Windows文化。前者好比是一系列分散的小工具,它们互相配合完成任务,其典型代表是Unix Shell。而后者好比是一个完整的工具箱,包含了完成某件特定工作所需的几乎全部功能,其典型代表是我们再熟悉不过的Visual Studio。当然,既然是文化,就能够互相借鉴和采纳,因此我们在Unix环境中也可以使用如Eclipse和IntelliJ IDEA,而Windows环境中也有cygwin和Powershell。我今天写这个东西的原因是,我想要做的一件事情正好落入了这样的“俗套”,于是不仅“多想”了一些。这个事情便是所谓的“项目模板”。 阅读全文

二十行C#代码打造Ruby Markup Builder

2009-10-27 00:47 by Jeffrey Zhao, 20397 阅读, 收藏, 编辑
摘要:从.NET诞生之日起就有了XML类库,但是从使用上来说非常不方便,许多行代码只能构造一个简单的XML对象。这个情况在.NET 2.0中也没有得到改变,直到有一天,LINQ to XML随.NET 3.5横空出世,于是乎XML的生活一下子变得美好了很多。与DOM API相比,使用LINQ to XML,无论是XML的构造还是读取都容易了许多。不过俗话说得好:“不怕不识货,就怕货比货”,这样的API与Ruby Markup Builder相比还是有明显差距。但是我们这些可怜的C#程序员难道只有在一边眼馋的份吗?不见得。 阅读全文

书评:卓有成效的ThoughtWorks程序员的45个习惯

2009-10-26 00:46 by Jeffrey Zhao, 23660 阅读, 收藏, 编辑
摘要:这个书名看起来似乎有些莫名其妙,因为其实它包含了三本书:《高效程序员的45个习惯》、《卓有成效的程序员》和《软件开发沉思录:ThoughtWorks文集》。虽然最后一本书的中文标题里包含“沉思”字样,但总体来说其实这三本都是实践性的很强的书,基本上是会告诉你“怎么做”——当然同样也会告诉你为什么。基本上这三本小于等于200页的小册子陪伴了我半个多月来的上下班,上厕所已经睡觉前的时间,也带给了我不少体会和思考。 阅读全文

到底博客园首页的标准是什么?

2009-10-25 14:51 by Jeffrey Zhao, 18198 阅读, 收藏, 编辑
摘要:博客园首页的标准是什么?它是有客观依据的,有案例可查的标准,还是仅仅是靠每个人心里自己的主观感觉来衡量的?现在的主要矛盾似乎就在于首页是个聚集区,大家靠自己的对自己文章的评价标准发上首页,用自己对别人文章的评价作为标准认为某某文章应该撤下首页,博客园管理团队也是使用自己的标准来操作——博客园团队也是人,我不知道有几个人,但肯定不会多,所以窃以为同样不能算是“集体智慧”。 阅读全文

对Action方法的参数进行双向转化

2009-10-23 09:47 by Jeffrey Zhao, 18864 阅读, 收藏, 编辑
摘要:昨天有朋友忽然告诉我,在G点中国上搜索URL Routing时,我的《请别埋没了URL Routing》一文排在首位。这不禁让我汗颜,这是因为从现在的角度看起来,这篇文章的内容虽不能算错,但的确也不算是一种非常合适的做法。那篇文章的目的是展示如何利用URL Routing的扩展能力,将URL和Route Values通过Formatter进行双向的转化。这样便可以在Action方法中使用复杂参数的同时,也可以使用复杂参数得到正确的URL。这个目标是好的,可惜当时的思路有些偏差。现在我总结出了更合适的做法,并已经在项目中大量使用,效果不错。 阅读全文

趣味编程:从字符串中提取信息(参考答案 - 下)

2009-10-22 01:04 by Jeffrey Zhao, 18453 阅读, 收藏, 编辑
摘要:昨天我们观察了如何使用基于状态机的顺序解析方式来提取字符串中的信息,不过由于winter-cn的做法和我原始的想法不谋而合,但实现的更为清晰,因此我在不献丑的同时,又设法使用另外一种方式来解决这个问题。后来又看到许多朋友给出了各种各样的做法,有普通拆分的方式,有利用正则表达式的做法。于是最后,我“不得不”使用一种特别的方式:F#来编写这么一段解析逻辑。从中我们也可以看到F#在做一些解析工作时的方便之处,在今后我还会谈一下它对我编写C#代码时的启发。 阅读全文

趣味编程:从字符串中提取信息(参考答案 - 上)

2009-10-21 01:13 by Jeffrey Zhao, 20444 阅读, 收藏, 编辑
摘要:这次“趣味编程”的目的是解析字符串,从一个指定模式的字符串中提取信息。对于目前这个问题,解决方案有很多种,例如直接拆分,使用正则表达式,或是如现在本文这般按照顺序解析。总结果上来说,这些做法都是可取的,不过现在我打算举出的做法是我认为最为“典型”也最有“学习”和“展现”价值的解决方案:基于状态机的顺序字符解析。也欢迎您对此其他的做法进行深入分析。 阅读全文

浅谈线程池(下):相关试验及注意事项

2009-10-20 00:06 by Jeffrey Zhao, 27371 阅读, 收藏, 编辑
摘要:三个月,整整三个月了,我忽然发现我还有三个月前的一个小系列的文章没有结束,我还欠一个试验!线程池是.NET中的重要组件,几乎所有的异步功能依赖于线程池。之前我们讨论了线程池的作用、独立线程池的存在意义,以及对CLR线程池和IO线程池进行了一定说明。不过这些说明可能有些“抽象”,于是我们还是要通过试验来“验证”这些说明。此外,我认为针对某个“猜想”来设计一些试验进行验证是非常重要的能力,如果您这方面的能力略有不足的话,还是尽量加以锻炼并提高吧。 阅读全文

我的TDD实践:可测试性驱动开发(下)

2009-10-19 08:48 by Jeffrey Zhao, 18986 阅读, 收藏, 编辑
摘要:在上一篇文章里,我谈到自己在采用传统TDD方式进行开发时感到有些尴尬,最后不得不放弃这种先写测试再写代码最后重构的方式。不过我还是非常注重单元测试的实践,慢慢发现自己的做法开始转向另一种TDD方式,也就是“可测试性驱动开发”。简单的说,我现在采取的做法是,先开发,再测试,一旦发现产品代码不太容易测试,则将其重构为容易测试的代码。我发现,这种时刻注重可测试性的开发方式,其最终也能够得到质量较高的代码。上次谈的比较理论,而这次我便通过一个简单功能的开发过程,来表现我的思维方式及常用做法。 阅读全文

谈吉日嘎拉的《白话反射技术》及其他(吵架篇)

2009-10-16 21:08 by Jeffrey Zhao, 26785 阅读, 收藏, 编辑
摘要:在技术社区还是以技术为先,在上一片文章里我谈了技术方面内容,那么这次就来谈谈非技术的。我反感这种社区氛围,火药味不是问题,但是谈技术不好好谈技术,总是扯上这人如何那人如何,我实在心烦的慌。您觉得吉日的文章误导初学者吗?写文章反驳吧!您觉得吉日的文章充满铜臭味吗?写文章反驳吧!我已经写了一篇文章,接下来就要靠大家了。挑出你最不满的吉日的文章,逐条反驳吧。 阅读全文

谈吉日嘎拉的《白话反射技术》及其他(技术篇)

2009-10-16 19:16 by Jeffrey Zhao, 25276 阅读, 收藏, 编辑
摘要:社区又掀起了腥风血雨,这次又是吉日嘎拉这一博客园的众矢之的所引发的惨案。他的一篇《白话反射技术》发表之后,被包同学一篇文章狠狠地踩在脚底下,言辞之激烈令人罕见。从两片文章的内容与评论来看,大家的眼光似乎都没有集中在技术本身,而是针对个人在你来我往。有评论称这是“门派之争”,虽然看不出到底哪门哪派,但看上去也还真像那么一回事情。不过这真是技术社区该有的讨论氛围和方式?如果觉得吉日嘎拉在技术上有问题,难道不应该条条指出吗?既然没有人做这件事情,那么就还是我来吧,反正我写博客也成习惯了。 阅读全文

博客二三事

2009-10-16 01:03 by Jeffrey Zhao, 18605 阅读, 收藏, 编辑
摘要:其实我一直想写篇文章来谈谈博客这些方面的事情。我虽然在博客上投入了很多,它也是我工作和生活中非常重要的一部分,也自认为写的不少亦不差,但是一直缺少对这方面的总结,以及系统的思考。即便是看着一轮又一轮地“年度总结”过去,我也没有针对我的博客讨论过什么内容。之前也有过朋友问过我博客方面的事情,也有一些讨论引起我的思考,但都没有下决心写点文章。而这次就趁着一些冲动,细细谈一下博客方面的事情吧。 阅读全文

我的TDD实践:可测试性驱动开发(上)

2009-10-15 13:34 by Jeffrey Zhao, 20628 阅读, 收藏, 编辑
摘要:TDD(测试驱动开发,Test Driven Development)是重要的敏捷实践之一,它的基本原理是用测试来带动开发,先写测试代码,再写开发代码,最后重构。许多TDD推广和实践者认为,这种方式易于带来高质量的代码。而如今,TDD也慢慢有了Test Driven Design,也就是测试驱动设计的意味。也就是说,它更像是一种设计方式了。这些理论我很愿意相信,也很支持,但是从实际角度来说,我还是较难接受正统的TDD行为。不过,我也在实际开发过程中总结出……怎么说呢,应该说是更适合我自己的实践方式,在此希望能和大家交流一下。 阅读全文

简化DomainRoute的配置

2009-10-15 09:57 by Jeffrey Zhao, 18573 阅读, 收藏, 编辑
摘要:昨天有朋友写邮件告诉我说,他正在项目中尝试着使用我提供的DomainRoute组件。我很高兴,这说明我的努力不是在自娱自乐,是对别人有实际帮助的,也有一些朋友会尝试着自行对项目进行扩展,而不总是靠微软提供的食物来过活。不过他说,他发现DomainRoute的配置非常繁琐,需要为每个Route使用WithDomain,提供了大量重复的信息。他说他也在构建了辅助API,不过似乎效果不够好,问我有没有更好的解决方法。其实是有的,因为我在使用DomainRoute的初期也遇到了这个问题,不过现在已经在MvcPatch中提供了个人认为比较令人满意解决方案。 阅读全文

关于排错:专注思考,细心观察,步步为营

2009-10-14 14:27 by Jeffrey Zhao, 18449 阅读, 收藏, 编辑
摘要:时常有朋友发邮件给我,说遇到了一个什么什么奇怪的问题,不知道是怎么回事,希望我帮忙看看。我基本上每天都会抽出或长或短的时间来回复这些邮件,不过也经常发现,其实许许多多的问题都完全是有能力自行解决的。在很多时候,我发现许多朋友还缺乏最基本的解决问题,分析问题的方式。其实我在平时工作中也会遇到各种各样的问题,有时候甚至异常古怪,但是在仔细分析之下,往往都能解决。于是我现在打算谈点解决问题的基本方式,希望可以帮到一些朋友。 阅读全文

浅谈Route组件的设计思考与模式

2009-10-14 09:46 by Jeffrey Zhao, 17916 阅读, 收藏, 编辑
摘要:Route组件虽然可以说是ASP.NET的“门户”,不过至今为止似乎都被微软当作是二等公民。可能是由于自带的Route类功能已经太强,微软官方或社区内都不太关注RouteBase的扩展。不过有一点是正确的,那就是在大部分情况下的确没有必要去扩展RouteBase。事实上,我构建过不少RouteBase类,不过除了DomainRoute之外,其余的都被我放弃了,例如在大半年前写的《请别埋没了URL Routing》中所提供的FormatRoute,在MvcPatch中也已经有了更好的替代品(过几天便会谈到这一点)。 阅读全文

我对NHibernate的感受(4):令人欣喜的Interceptor机制

2009-10-13 13:45 by Jeffrey Zhao, 22423 阅读, 收藏, 编辑
摘要:之前谈了NHibernate的几个方面,似乎抱怨的居多,不过这次我想谈一下我对Interceptor的感受,则基本上都是好话了。这并不一定是说Interceptor设计的又多么好(事实上它使用起来还是挺麻烦的),但是这的确也是我认为NHibernate超越LINQ to SQL,尤其是Entity Framework的又一个重要方面——因为Entity Framework本身也已经不差了。更重要的是,Interceptor机制让我得以实现我“理想中的”数据访问功能。当然现在只是浅尝辄止一番,我打算以后再慢慢地,详细地谈谈我所满意的“数据访问层”设计。 阅读全文

浅谈Route规则名称的作用,及MvcPatch的处理方式

2009-10-13 10:00 by Jeffrey Zhao, 17625 阅读, 收藏, 编辑
摘要:国庆前的最后一天,我写了《关于ASP.NET Routing的几点内容》,其中谈论了ASP.NET Routing作用,设计目的,工作流程等等。不过我还有一个比较重要的东西一笔带过了,不知道您注意到了没有,在向ASP.NET Routing的RouteTable.Routes属性(一个RouteCollection对象)中添加Route规则的时候,我们会同时指定一个“名称”。在微软给出的官方“广告”中,似乎看不出这个名称有什么用。但事实上,它的功能非常关键。 阅读全文

趣味编程:从字符串中提取信息

2009-10-12 14:20 by Jeffrey Zhao, 21530 阅读, 收藏, 编辑
摘要:字符串解析是程序员工作中非常重要的一部分,也是非常考验编程能力的工作。基本上我在面试程序员的时候,一定会出一道编程题目作为考察的一方面,而这道题目有很大的可能性是做字符串的解析。例如,给出一个模式规则,要求写程序判断某个字符串是否符合特定格式。例如,要求将BB Code转化为HTML。而现在这个趣味编程题,来自于我目前正在进行的项目。因此从实用角度来说,也有一定现实意义。 阅读全文

NHibernate自定义集合类型(下):自动维护双向关系

2009-10-12 00:49 by Jeffrey Zhao, 17525 阅读, 收藏, 编辑
摘要:如果使用NHibernate自带的集合类型,其中一个问题就在于需要在代码中手动维护双向关系,迫使开发人员编写额外的代码。其实这就是集合自定义逻辑的一个应用方面。现在,既然我们已经得到了一个方便的自定义集合的解决方案,那么现在便把“自动维护双向关系”作为目标来实现一番,也算是一个非常典型的示例了。 阅读全文

NHibernate自定义集合类型(中):通用实现方式

2009-10-11 11:27 by Jeffrey Zhao, 17676 阅读, 收藏, 编辑
摘要:上一片文章中我们观察了在代码中自定义一个基于Set的集合类型该怎么做,以及简单了解了一下NHibernate的这些自定义支持大致是如何工作的。不过文章最后还是留了两个问题,一是认为这种扩展方式不够通用,二是其中会出现的“重复”或是“反向依赖”。现在我们就需要在上文的基础上进行总结,提出一个通用的实现,可以方便我们构建自定义的集合类型。 阅读全文

NHibernate自定义集合类型(上):基本实现方式

2009-10-10 10:54 by Jeffrey Zhao, 26294 阅读, 收藏, 编辑
摘要:前天一篇文章中我说NHibernate的集合类型实现有些“尴尬”,它无法使用自定义集合类型,设计也有些古怪——不过在许多朋友的指点下,我意识到NHibernate是可以使用自定义集合类型的。至于它的设计是否合理(或者说是用是否方便?)……这就是这几篇文章中想要探讨的内容了。不少朋友给出了一些自定义集合类型的示例链接,我参考之余也自己找了一些资料,慢慢尝试,也终于有了一些体会。 阅读全文

最受欢迎中国技术博客评选(PB50)结果公布

2009-10-09 18:36 by Jeffrey Zhao, 20467 阅读, 收藏, 编辑
摘要:国外有博客评选榜单,记得之前也有人提议国内也做一下类似的评选。这不,ZDNET搞了一个。现在结果终于揭晓了,看看有几位是您已经知道并订阅了呢?不过,我还是感觉大部分的博客更新的实在不够频繁,这和人家世界级的榜单差太远了啊,兄弟们还得努力才是。 阅读全文

尝试使用IKVM运行Lucene 2.9.0版

2009-10-09 15:26 by Jeffrey Zhao, 13437 阅读, 收藏, 编辑
摘要:上月末Lucene发布了2.9.0版,这个版本的改进比较明显,主要是各方面性能的增强,以及对数字字段范围查询的直接支持。这个版本还有个重要的意义,就是它标记了Lucene 3在API上的改变,及早跟进的话对Lucene 3的未来接受程度会比较好。Lucene的更新很慢,而移植到.NET平台上的Lucene.NET的二进制发布则更是一直停留在07年三月的2.0版本。虽然我们可以通过svn获取到Lucene.Net 2.3.2的源代码自行编译,但这次我还是想直接使用最新的2.9.0版本。最终我决定趁这个机会尝试一下IKVM.NET。 阅读全文

我对NHibernate的感受(3):有些尴尬的集合支持

2009-10-08 21:59 by Jeffrey Zhao, 14740 阅读, 收藏, 编辑
摘要:既然是一个ORM框架,那么自然是将O这一端映射R上。至于集合,是O这方面最常见,也是R这一边非常容易表示的关系。例如,一个问题(Question)可以包含多个回答(Answer)。不过,NHibernate需要“一锅端”地设置集合属性,它没有保留自定义集合的逻辑。此外,在更新集合数据的时候,它也会出现多余的数据加载。 阅读全文

关于ASP.NET Routing的几点内容

2009-09-30 10:44 by Jeffrey Zhao, 14792 阅读, 收藏, 编辑
摘要:在之前的文章中,有一些朋友会问我一些关于ASP.NET Routing的内容。这个组件的重要性越来越大,ASP.NET MVC,ASP.NET Dynamic Data都用到了ASP.NET Routing。事实上,在ASP.NET 4.0中还会出现对ASP.NET WebForms的支持。可惜的是,目前对于ASP.NET Routing的文档和描述内容都很少。因此,有的时候一些朋友可能无法理解我一些扩展的设计思路。现在我打算详细解释一下有关ASP.NET Routing中最常见的几个问题。 阅读全文

ASP.NET Routing对请求的处理方式

2009-09-29 15:09 by Jeffrey Zhao, 12938 阅读, 收藏, 编辑
摘要:原本这是《关于ASP.NET Routing的几点内容》一文中的一节,不过等写完这节之后发现这块内容已经比较完整了,而且它本身也是独立和最为常见的部分,因此我把它提取出来单独成文。至于那片文章的其他部分我会再修改一下,明天发布。希望这些内容会对您理解ASP.NET Routing工作方式,以及阅读ASP.NET Routing的代码有所帮助。 阅读全文

趣味编程:C#中Specification模式的实现(参考答案 - 下)

2009-09-29 10:35 by Jeffrey Zhao, 12019 阅读, 收藏, 编辑
摘要:上一篇文章中我们利用C#语言的特性实现了一种轻量级的Specification模式,它的关键在于抛弃了具体的Specification类型,而是使用一个委托对象代替唯一关键的IsSatisfiedBy方法逻辑。据我们分析,其优势之一在于使用简单,其劣势之一在于无法静态表示。但是它们还都是在处理“业务逻辑”,如果涉及到一个用于LINQ查询或其他地方的表达式树,则问题就不那么简单了——但也没有我们想象的那么复杂。 阅读全文

使用Model Binder绑定Action参数字段时的取舍问题

2009-09-28 13:57 by Jeffrey Zhao, 12452 阅读, 收藏, 编辑
摘要:刚才在看代码的时候忽然发现了一件可能会成为问题的情况,而这个情况还挺隐蔽的。因此,我原本写到一半的东西就暂时停下,顺延至明天,而现在先来谈谈这个问题。这个问题就是在使用DefaultModelBinder在绑定字段时的取舍问题。而您在使用ASP.NET MVC的时候不妨也检查一下,看看有没有这方面的情况。 阅读全文

趣味编程:C#中Specification模式的实现(参考答案 - 上)

2009-09-28 10:34 by Jeffrey Zhao, 13193 阅读, 收藏, 编辑
摘要:Specification模式的作用是构建可以自由组装的业务逻辑元素。不过就上篇文章的示例来看,“标准”的Specification模式的实现还是比较麻烦的,简单的功能也需要较复杂的代码。不过,既然说是“标准”的方式,自然就是指可以在任意面向对象语言中使用的实现方式,不过我们使用的是C#,在实际开发过程中,我们可以利用C#如今的强大特性来实现出更容易使用,更轻量级的Specification模式。 阅读全文

在视图中使用递归生成树状结构

2009-09-27 13:45 by Jeffrey Zhao, 15880 阅读, 收藏, 编辑
摘要:在开发过程中往往会有一个需求,就是将一个树状的数据结构在视图中表示出来。例如最传统的多级分类,系统中有一系列根分类,每个分类中又带有一些子分类,而我们的目标便是在页面上生成一个由ul和li嵌套组成的HTML结构。这个问题看似简单,但是如何让实现变的轻松、易于使用也是一个值得讨论的问题。这次就来谈谈这部分的情况。 阅读全文
共 16 页: 上一页 1 2 3 4 5 6 7 8 下一页 末页