幻灯片:LINQ Inside, Part 1
整理电脑时整理发现一个幻灯片,修改日期是去年年底,当时不知道为了什么,现在也忘了对方是谁讲一次LINQ。这次讲座是入门型的,主要讲了讲什么是LINQ,什么是表达式,表达式树等等。不过这第一部分似乎……还没有提到LINQ,更那个什么的是,我已经找不到第二部分了……因此,大家可以随意看看。目前脑袋写了几...
语言特性与API设计
我平时的主要工作之一,便是编写一些基础及通用的类库,能够在项目中大量复用。换句话说,我的工作目的,是让其他开发人员可以更好地完成工作。因此,如何设计更容易使用的API是我经常要考虑的东西,偶尔也会有一些体会。而现在这些内容,是我在为Functional Reactive Programing写“参考...
我对NHibernate的感受(2):何必到处都virtual
上一篇文章主要是在夸NHibernate实现的好,而这篇就完全是来抱怨的了。NHiberante有个毛病,就是如果是和数据库产生映射的类,就要求所有的public成员和protected成员必须是virtual的。请注意这里的要求有两个细节: 即使是方法,也必须标记为virtual 即时是不和数...
我对NHibernate的感受(1):对延迟加载方式的误解
NHibernate是.NET平台上最著名的ORM框架,虽说出身于Java平台上的Hibernate,但是从外部看来这几乎就是一个.NET平台上的原生产品:有自己的社区,有自己的用户,有自己的商业支持,有利用C#特性的独立扩展。它不像Lucene.NET那样,一眼就能看出浓重的Java气息,Java...
趣味编程:Functional Reactive Programming(参考答案)
原题在此。初见Functinal Reactive Programming时,它的编程方式让我大开了眼界,居然可以用这种方式来操作和控制事件。虽然从技术角度来说,要实现这种方式并不是非常困难,甚至颇为有趣。因此我把它当作一次“趣味编程”。不过,这次的结果似乎让我对API设计有了一些新的体会,我打算明...
片段缓存的实际应用、延迟加载及Eazy类库
片段缓存(二,三)已经实现完整了,但好像还没有提到如何在项目中进行实际应用,那么现在就来谈一谈这方面。之前也有朋友提出,这个片段缓存到底省下的是什么啊?好像数据都是在Controller中获取的,视图的生成不会带来多少开销啊,难道节省的只是拼接HTML字符串的时间吗?这其实就涉及到片段缓存在实际项目...
适合ASP.NET MVC的视图片断缓存方式(下):页面输出原则
上一篇文章里已经把Html.Cache打造成了非常具有可用性的API,需要缓存时我们只需在页面上做一个标记即可:<% Html.Cache("cache_key", DateTime.Now.AddSeconds(10), () => { %> <% foreach (var...
适合ASP.NET MVC的视图片断缓存方式(中):更实用的API
上一篇文章中我们提出了了片断缓存的基本方式,也就是构建HtmlHelper的扩展方法Cache,接受一个用于生成字符串的委托对象。在缓存命中时,则直接返回缓存中的字符串片断,否则则使用委托生成的内容。因此,缓存命中时委托的开销便节省了下来。不过这个方法并不实用,如果您要缓存大片的HTML,还需要准备...
幻灯片:Web开发中的缓存
这是我昨天在博文视点Open Party上海站上关于Web开发中缓存的简单讲座。原本博文视点的朋友们希望我讲一下ASP.NET MVC方面的话题(估计看我最近一直在搞这个),但是我觉得其他平台一直用的是MVC框架,而ASP.NET MVC作为“后来者”也没有什么出彩的地方,所以最终选择这个稍微“通用...
从ASP.NET的PHP执行速度比较谈起
上星期我在InfoQ发表了一篇新闻,对Joe Stagner在博客上发表的三篇关于ASP.NET与PHP性能对比的文章进行了总结。写新闻其实挺不爽的,因为不能夹杂个人的看法,只能平铺直叙陈述事实。当然,如果像某些新闻那样“换一种说法”是可以骗过一些“不明真相的群众”,但是这就有违道德了。因此,在客观...
适合ASP.NET MVC的视图片断缓存方式(上):起步
说到网站性能优化,没有什么比“缓存”更重要了。即便是某些朋友口中念念不忘的“静态页”,说到底也只是缓存了整张页面内容而已。但是,显然这样大粒度的缓存策略,在如今“牵一发而动全身”的Web 2.0站点中几乎是无法使用的。试想,在Twitter中的某个名人被数十万人订阅,那么他发一条消息,难道此时网站要...
趣味编程:将事件视为对象(参考答案)
题目在此。这次我们是要编写一个DelegateEvent<TDelegate>对象,提供它AddHandler和RemoveHandler的实现。事实上,在之前还有一篇文章中,我们搞了一个人模狗样的构造方式,但是它往往不适合用于实际使用过程中。因此,其实DelegateEvent<...
趣味编程:C#中Specification模式的实现
今天有朋友在问了我这么一个问题:怎么实现OrWhere的功能?我猜测,他的意思是要实现这样的功能:static IEnumerable<int> MorePredicate(IEnumerable<int> source){ return source.OrWhere(i =...
应该算是WebFormView的一个Bug
最近需要搞一些重要的功能,结果又遇到了意料外的障碍。于是又仔细地看了看ASP.NET和ASP.NET MVC的源代码,又发现了以前不曾知道的一些细节。您最多说ASP.NET WebForms模型不一定适合某些Web应用程序的开发,但是我想没有人可以否认ASP.NET中设计的巧妙——以及复杂程度。其实...
MIT 6.00 Introduction to Computer Science and Programming, Fall 2008
两个月前我在推荐SICP这本书时,我提到MIT已经使用Python代替经典的SICP这本书进行编程基础课的教学——但是不知道用的是哪本教材。不过现在已经有了更进一步的消息,那就是:似乎没有一本如SICP这样的教材。如果说有什么统一参考,那么可能就是《Python Programming》这本wiki...
游戏人生Silverlight(6) - 贪吃蛇[Silverlight 3.0(c#)]
[索引页][源码下载]游戏人生Silverlight(6) - 贪吃蛇[Silverlight 3.0(c#)]作者:webabcd介绍使用 Silverlight 3.0(c#)开发一个贪吃蛇游戏玩法W/S/A/D 或 ↑/↓/←/→ 控制蛇的移动在线DEMO思路1、贪吃蛇的每一段为 16...
检查几个程序集中的internal成员
两个星期前我写了一篇文章谈到一个现象(或是感觉):我发现“类中的internal成员可能是一种坏味道”,原因在于违反了“单一职责”原则。然后谈了一般情况下遇到这种情况时一种可用的重构方式之一。结果自然是有人同意有人反对。不过刚才我忽然想到,不如检查一下微软的框架中internal成员的情况吧。微软最...
基于DelegateEvent创建第一个IEvent对象
继续和“事件即对象”打交道。我们之前提到过两个“趣味编程”:DelegateEvent与Functional Reactive Programming,现在我们在它们两者之间架起一座桥梁。也就是说,我们要从一个DelegateEvent<TDelegate>对象创建一个IEvent<...
如何创建TextWriter的子类
如果您需要继承TextWriter实现自己的类型,您会怎么做?继承TextWriter不难,不过接下来,您打算覆盖(override)掉哪些方法?今天我就遇到了这样的问题。还是先来看看TextWriter的成员吧:[Serializable][ComVisible(true)]public abst...