Hello World
Spiga

归档:2009年09月

适合ASP.NET MVC的视图片断缓存方式(上):起步

2009-09-17 17:19 by 老赵, 15815 visits
摘要:说到网站性能优化,没有什么比“缓存”更重要了。即便是某些朋友口中念念不忘的“静态页”,说到底也只是缓存了整张页面内容而已。但是,显然这样大粒度的缓存策略,在如今“牵一发而动全身”的Web 2.0站点中几乎是无法使用的。视图片断缓存,缓存的也是页面内容,它比更低级别的缓存更有效率,也比静态页等整页内容缓存的适用面要大得多。在Rails或Django中都有类似的功能,但ASP.NET MVC甚至在2.0的Road Map中还没有包含这一功能,我们只能自己动手丰衣足食了。不过有了ASP.NET WebForm作为强大的视图引擎,加这样的功能简直是举手之劳。 阅读全文

趣味编程:将事件视为对象(参考答案)

2009-09-17 09:48 by 老赵, 12923 visits
摘要:这次我们是要编写一个DelegateEvent对象,提供它AddHandler和RemoveHandler的实现。事实上,在之前还有一篇文章中,我们搞了一个人模狗样的构造方式,但是它往往不适合用于实际使用过程中。因此,其实DelegateEvent最关键的地方还是各种不同的“构造方式”,使它可以用于各种情况。 阅读全文

ASP.NET WebForm页面内容输出方式

2009-09-16 14:41 by 老赵, 15818 visits
摘要:这次我们谈的话题是“Web Form页面上输出内容的方式”。这其实是一个非常旧的话题了,因为本文的内容甚至可以运用于ASP.NET 1.1之上。不过这个话题的适用范围很广,因为即使是目前最新的ASP.NET MVC框架,它的默认视图引擎依旧是基于ASP.NET WebForm的(如Page,Control,MasterPage)。甚至说,由于ASP.NET MVC框架的特性,我们会遇到更多在页面上“直接输出”内容的情况。因此,这个话题在ASP.NET MVC应用中可能由为重要。 阅读全文

Get Ready for Real World ASP.NET MVC

2009-09-16 13:37 by 老赵, 12999 visits
摘要:2009年的TechED大会即将在北京举行(11/5 - 11/7),其中有我的一个Session。我将其命名为“Real World ASP.NET MVC”,希望可以分享一下自己在ASP.NET MVC方面的使用体会。现在,希望大家可以给我一点帮助。例如,您在使用ASP.NET MVC开发Web应用程序时有没有遇到什么困难?您认为ASP.NET MVC哪方面还无法让人满意?各个方面都可以。 阅读全文

趣味编程:C#中Specification模式的实现

2009-09-15 20:15 by 老赵, 14494 visits
摘要:Specification模式的作用是构建可以自由组装的业务逻辑元素。多个Specification对象可以组装起来,并生成新Specification对象,这便可以形成高度可定制的业务逻辑。例如,我们可以使用依赖注入(控制反转)的方式来配置这个业务逻辑,以此保证系统的灵活性。但是Wikipedia上提供了非常旧的内容,很可能是在C#只是1.0版本的时候编写的代码(或者说它为了“兼容”Java那种语言的实现方式)。那么在实际开发过程中,我们又该如何利用C#如今的强大特性来实现出更容易使用,甚至是更为“轻量级”的Specification模式呢? 阅读全文

WebFormView的标准修改办法及MvcPatch项目

2009-09-15 12:11 by 老赵, 12554 visits
摘要:上一篇文章中我提到WebFormView的实现破坏了IView对象设计思路,它会把视图内容直接生成至HttpContext.Current而不是Render方法指定的TextWriter中。之前我提出了一种非常临时,非常山寨,非常简陋,绕弯,但是可行,或者说是可以“表现出解决问题的方法”的代码,而这次我们来做一次“标准”的修改。此外,我还创建了一个MvcPatch项目来保存这些内容。 阅读全文

应该算是WebFormView的一个Bug

2009-09-14 15:33 by 老赵, 12881 visits
摘要:最近需要搞一些重要的功能,结果又遇到了意料外的障碍。于是又仔细地看了看ASP.NET和ASP.NET MVC的源代码,又发现了以前不曾知道的一些细节。其实ASP.NET为我们留下了不少切入点,但几乎没什么书会提到这些切入点,我们只能从微软自己的框架中一探究竟。不过这次我想谈的是ASP.NET MVC框架中的一个Bug,这个Bug在一般情况下不会出现问题,但是这的确违反了ASP.NET MVC自身的设计。这个问题就出在WebFormView对象的实现上。 阅读全文

MIT 6.00 Introduction to Computer Science and Programming, Fall 2008

2009-09-14 10:02 by 老赵, 15042 visits
摘要:SICP的替代品,终于有了进一步完整的消息。看着教授用苹果在明亮的教室里讲课的感觉,的确比看之前的视频要舒畅很多。很憧憬MIT的这类顶级学府的学术氛围,虽然这个梦想似乎越来越遥远了。 阅读全文

检查几个程序集中的internal成员

2009-09-13 23:17 by 老赵, 12474 visits
摘要:两个星期前我写了一篇文章谈到一个现象(或是感觉):我发现“类中的internal成员可能是一种坏味道”,原因在于违反了“单一职责”原则。然后谈了一般情况下遇到这种情况时一种可用的重构方式之一。结果自然是有人同意有人反对。不过刚才我忽然想到,不如检查一下微软的框架中internal成员的情况吧。微软最近几个框架都公开的源代码,社区反响不错,应该较为值得参考。 阅读全文

基于DelegateEvent创建第一个IEvent对象

2009-09-11 13:47 by 老赵, 12561 visits
摘要:继续和“事件即对象”打交道。我们之前提到过两个“趣味编程”:DelegateEvent与Functional Reactive Programming,现在我们在它们两者之间架起一座桥梁。也就是说,我们要从一个DelegateEvent对象创建一个IEvent对象出来。这样,您就可以把它作为第一个IEvent对象,继续尝试Functional Reactive Programming了。 阅读全文

如何创建TextWriter的子类

2009-09-11 00:42 by 老赵, 12813 visits
摘要:如果您需要继承TextWriter实现自己的类型,您会怎么做?继承TextWriter不难,不过接下来,您打算覆盖(override)掉哪些方法?从Reflector的观察结果发现,其中所有的方法最终都会委托给Write(char)方法。但是只覆盖Write(char)方法只能保证最终成果“可以运行”,却无法保证是最优秀的结果。但是又有谁可以告诉我,究竟该怎么做呢? 阅读全文

趣味编程:Functional Reactive Programming

2009-09-10 12:26 by 老赵, 15532 visits
摘要:基于事件的编程再常见不过了,尤其是在和UI相关的WinForm,WPF,Silverlight开发方面。把事件作为一等公民看待之后,我们可以实现一些较为“特别”的编程模型,例如Functional Reactive Programming。这是一种较为优雅的基于事件的处理方式,适合一些如交互式动画,自动控制方面的工作。即使平时不太常见,我想作为一个“尝试”或“练习”也是非常合适的。那么我们就学习F#的类库,为C#也设计一套这样的功能吧。 阅读全文

监视程序中的死锁及其他

2009-09-10 00:08 by 老赵, 12960 visits
摘要:每天回家路上总有一段比较长的路一片漆黑无法看书。这种时候,如果我有兴致则会用手机上上网,但是大部分情况下还是用来想问题的。今天我回忆起今天园子首页的一篇文章谈到死锁,想到了一种可行的解决方案,只可惜到家一搜索……别人已经实现过了。于是,又没我什么事情了…… 阅读全文

趣味编程:将事件视为对象

2009-09-09 13:11 by 老赵, 14001 visits
摘要:如果一个语言(平台)把事件视为对象,则表明它把“事件”作为了语言的一等公民来对待。这可以有效地提高语言的抽象能力,由于.NET本身无法将事件作为单个对象处理,因此在某些时候就会束手束脚,也难以引入一些特别的编程模型。前一篇文章中我们提出了一个糊弄人的解决方案。而这次,不妨由您来试试看如何给出一个更好的实现。 阅读全文

我犯了一个错误,您能指出吗?(结论)

2009-09-08 15:55 by 老赵, 14747 visits
摘要:其实许多朋友已经在回复中发现问题所在了。泛型类中的静态变量会因为T的不同而产生不同的值,也就是说每个T所访问的静态变量都是独立的。因此,看似共享的静态ConnectionKey实际上是两个不同的Guid。 阅读全文

我犯了一个错误,您能指出吗?

2009-09-08 10:01 by 老赵, 16628 visits
摘要:这是我最近在项目中犯的一个错误,您能指出吗? 阅读全文

把事件当作对象进行传递

2009-09-07 17:20 by 老赵, 7392 visits
摘要:最近在琢磨一些事情,和API设计有关。API设计在很多时候是和语言特性有关的,因此如Java这样的语言,在API设计时会处处受到压抑。而C#就能够出现如Moq或Fluent NHIbernate这样的项目。同样,F#能够开发出FsTest,Scala号称Scalable Language,都是依靠着丰富的语言特性。不过,最近在使用C#的时候鼻子上也碰了一点灰,这是因为我发现“事件”这个东西没法作为对象进行传递。 阅读全文

较为理想的延迟代理的编写方式

2009-09-07 11:15 by 老赵, 7375 visits
摘要:之前我谈到,在普通情况下我们可以很轻松地写出过一个代理类,用来处理延迟加载的情况。当时给出了一个很简单的做法,也就是指创建基类,覆盖它的一些属性实现。不过我当时也提到,这么做可能够用,但是也有一些缺点。例如,它破坏了SomeID属性中包含的业务逻辑。这也是我认为NHibernate的延迟加载方法欠妥的原因。因此我又想了想,理想中的延迟加载方式应该是什么样的呢? 阅读全文

如果是能简单解决的问题,就不用想得太复杂了

2009-09-05 17:41 by 老赵, 7001 visits
摘要:有个朋友在MSN问我说,有没有关于Emit的资料,它想生成一个类的动态代理。他抱怨Emit还是很麻烦,不过交谈过后知道他是想要做什么。他希望为一个对象的某个属性作延迟加载,这样可以避免一些无谓的消耗。不过我提出,这个方法是不是太重了,因为动态代理不是那么孤立存在的,它往往需要考虑很多其他东西。有时候我们可以使用最简单的代码,在一定程度上也可以达到目的。 阅读全文

一份值得阅读的幻灯片:微软对PHP支持的改进,及其它一些胡言乱语

2009-09-04 02:17 by 老赵, 9633 visits
摘要:这里有一份我觉得值得推荐给大家的幻灯片。这个幻灯片是不久前举办的WordCamp China 2009上微软王超群的演讲,演讲主题是《熟悉的陌生人:微软对PHP的新支持使WordPress在IIS7上雄起》。WordCamp是业界著名的PHP大会,不过我这里推荐这个幻灯片不是为了为了推广PHP,而是为了说明一些其他问题——当然也有关于技术的有价值的内容,这些您看了幻灯片和我的文章之后就会明白了。 阅读全文
使用Live Messenger联系我