摘要:Decorator Pattern(装饰模式)
装饰模式可「动态」地给一个对象添加一些额外的职责,提供有别于「继承」的另一种选择。就扩展功能而言,Decorator Pattern 透过 Aggregation (聚合) 的特殊应用,降低了类与类之间的耦合度,会比单独使用「继承」生成子类更为灵活。
一般用「继承」来设计子类的做法,会让程序变得较僵硬,其对象的行为,是在「编译」时期就已经「静态」决定的,而且所有的子类,都会继承到相同的行为;然而,若用「装饰模式」以及 UML 的 Aggregation 的设计,来扩展对象的行为,就能弹性地 (flexible) 将多个「装饰者」混合着搭配使用,而 阅读全文
艾伟_转载:Regex.Replace 方法的性能!
2011-08-29 00:22 by 狼人:-), 174 阅读, 0 推荐, 收藏,
摘要:园子里有很多关于去除Html标签的文章。一个常用的经验是使用 Regex.Replace 方法利用正则去替换。这里有一篇使用该方法的文章C#中如何去除HTML标记。下面我贴出该方法的代码,见代码清单1-1
代码清单1-1引用http://www.cnblogs.com/zoupeiyang/archive/2009/06/22/1508039.html ///
///去除HTML标记
///
///包括HTML的源码
///已经去除后的文字
publicstaticstringReplaceHtmlTag(stringHtmlstring)
{
//删除脚本
Htmlstring=Htm... 阅读全文
艾伟_转载:编写自文档化的代码
2011-08-29 00:22 by 狼人:-), 124 阅读, 0 推荐, 收藏,
摘要:文所以载道也。 —— 宋·周敦颐《通书·文辞》
对于我们程序员来说,我们的工作也是写作——几乎每天都要写代码;而且还要载“道”,不仅仅要满足客户的需求,还要让代码具有高度的可读性,这样其他的程序员可以更容易地对代码进行修改和扩展。
按这样的要求,我们需要为代码编写足够的文档,也就是将代码“文档化”。常见的做法有两种,外部文档和注释。
外部文档 外部文档指的是在代码文件之外编写的附加文档,比如在Word文档中采用大量的篇幅(如UML图、表格)来设计或记录相关的包、类型、类型成员、成员参数之类的信息。这看起来很规范,但如果你用过这种方式,一定会讨厌它。这种方式的主要问题在于:
阅读全文
艾伟_转载:一次挂死(hang)的处理过程及经验
2011-08-29 00:22 by 狼人:-), 690 阅读, 0 推荐, 收藏,
摘要:前言:
CPU占用率低,内存还有许多空余,但网站无法响应,这就是网站挂死,通常也叫做hang。这种情况对于我这样既是CEO,又是CTO,还兼职扫地洗碗的个人站长来说根本就是家常便饭。以下是一次处理hang的经验及总结,前后用了一个月,不仅涉及程序排查,数据库优化,还有硬件升级的苦恼。其中辛酸苦辣只有经历过的站长才能体会,希望此文能对各位有所帮助! 首先介绍一下网站基本情况,是一个在线小说阅读网站,每天有一定页面访问量,在优化开始前由两台服务器运行,均为Dell PowerEdge 2950,配置为一台Intel xeon E5410 2.33G*2 ,4GB ECC内存,另一台Intel xe 阅读全文
艾伟_转载:[原创]再谈IIS与ASP.NET管道
2011-08-29 00:22 by 狼人:-), 166 阅读, 0 推荐, 收藏,
摘要:在2007年9月份,我曾经写了三篇详细介绍IIS架构和ASP.NET运行时管道的文章,深入介绍了IIS 5.x与IIS 6.0HTTP请求的监听与分发机制,以及ASP.NET运行时管道对HTTP请求的处理流程:
[原创]ASP.NET Process Model之一:IIS 和 ASP.NET ISAPI[原创]ASP.NET Process Model之二:ASP.NET Http Runtime Pipeline - Part I[原创]ASP.NET Process Model之二:ASP.NET Http Runtime Pipeline - Part II 很多人留言为何没有IIS. 阅读全文
艾伟_转载:C#中的委托和事件-抛砖引玉
2011-08-29 00:21 by 狼人:-), 247 阅读, 0 推荐, 收藏,
摘要:最近在学习委托和事件,在书店里面看了好多书,但是都是迷迷的…… 今天在博客园里面看到了 张子阳 所写的博客C#中的委托和事件:http://www.tracefact.net/CSharp-Programming/Delegates-and-Events-in-CSharp.aspx 看后对委托和事件有了一个新的认识,可以是没有用到实际项目中去吧,感觉还是有点不知…… 下面我起一个抛砖引玉作用让这两天在书中看到的,及看张子阳博客和写的一个和他类似的程序…… 当第一次听到委托、事件时感觉比较抽象、很好奇,当看到老师在课堂上利用委托和事件实现两个窗体调用时、感觉委托太神奇了,呵、... 阅读全文
艾伟_转载:如何开发绚丽、高效率的界面(Windows嵌入式系统)
2011-08-29 00:21 by 狼人:-), 199 阅读, 0 推荐, 收藏,
摘要:上篇文章中提到用户体验(UE),并且说到国内有专门去做UE的团队也很少。据我了解Microsoft、Nokia、Google等,还有国内的Baidu是有比较专业的UE团队。对于我们这样的普通团队、普通开发者来说,这样的经验实在太少了。而且普遍更认为UE是UI Designer的事情,与我们这样的Developer没有太多关系。
当然不是,UE远超过UI。很多因素造成了UE差,比如一份不正确的数据表明17%的用户认为手机运行速度慢,Windows Mobile手机开机漫长的等待就十分的让我受不了。我们开发的应用是否有过优化?运行效率是否已经很让用户满意了?等等这些问题留在开发中思考吧。
在使用优 阅读全文
艾伟_转载:使用Lambda表达式编写递归函数
2011-08-29 00:21 by 狼人:-), 194 阅读, 0 推荐, 收藏,
摘要:前言 著名的牛顿同学曾经说过:如果说我比别人看得更远些,那是因为我站在了巨人的肩上.
原文:If I have been able to see further, it was only because I stood on the shoulders of giants. What's Lambda表达式?
请参考msdn:Lambda 表达式(C# 编程指南)
Lambda表达式编写递归函数? How?
建议没有看过老赵的《使用Lambda表达式编写递归函数》这篇文章的朋友,请先前往围观,你会受益匪浅。
原文实现如下的递归效果:
var fac = Fix<int, int& 阅读全文
艾伟_转载:扩展方法 之 基本数据篇
2011-08-29 00:21 by 狼人:-), 137 阅读, 0 推荐, 收藏,
摘要:前一篇我列举了几个最常用到的基于Asp.Net的扩展方法,而这一篇基于基本数据的扩展方法理应不会逊一筹,因为它不局限于Asp.Net。何谓基本数据,这里直接摆定义: C# 中有两种基本数据类型:值类型和引用类型。 值类型包括:简单类型、结构类型、枚举类型;引用类型包括:Object 类型、类类型、接口、代表元、字符串类型、数组。 说白了这篇就是扩展 int, string, double, DateTime...等基本类型。这么多数据类型,如果int来个扩展,double也来个扩展,肯定会是一个造金字塔工程。幸好有泛型帮我们,但是有时泛型也不是万能的,这个以后有机会再说。 ... 阅读全文
艾伟_转载:扩展方法 之 Asp.Net篇
2011-08-29 00:21 by 狼人:-), 182 阅读, 0 推荐, 收藏,
摘要:说起扩展方法,不得不提博客园的鹤冲天,其关于扩展方法的文章基本上占了总文章的一半,其中不乏优秀之作。 我在Asp.Net开发期间也总结了不少扩展方法,与大家分享一下。 1. 获取GridView的主键值: Code highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/-->public static T GetKey<T>(this GridView grid, int rowIndex){ T key = (T)grid.DataKeys[ro.. 阅读全文
艾伟_转载:扩展方法 之 Redirect 篇
2011-08-29 00:21 by 狼人:-), 202 阅读, 0 推荐, 收藏,
摘要:前言: 单看标题,可能很多朋友不知道我到底想写什么。在写这篇文章前,我自己跟自己斗争了很久,到底该不该写这篇文章?毕竟从现实主义来看,这篇文章可能落入“瞎扯淡”的行列,因为对大多数朋友来说,以下的所有扩展方法可能都不会用到。 如果真是这样,就当作一个“漫无边际”的想法来看好了。如果你根本不想浪费你的宝贵时间,就点这里 Redirect 回博客园主页,呵呵
一个 Redirect 为什么也可以耗费一篇文章的笔墨? 就 Redirect 一词成文的先例估计不会是我,但如果 扩展方法 + Redirect 这个话题,我可能就是第一人了。
葫芦里卖的是什么药? 这个“漫无边际”的想法实... 阅读全文
艾伟_转载:把Array说透
2011-08-29 00:21 by 狼人:-), 147 阅读, 0 推荐, 收藏,
摘要:1. 数组大局观 数组是一个引用类型,也就是意味着数组的内存分配在托管堆上,并且我们在栈上维护的是他的指针而并非真正的数组。接下来我们分析下数组的元素,其中的元素无外乎是引用类型和值类型。当数组中的元素是值类型时,不同于int i;这样的代码。数组会根据数组的大小自动把元素的值初始化为他的默认值。例如:
static void Main(string[] args)
{ int[] intArray = new int[3]; foreach(int i in intArray) { Console.WriteLine(i); ... 阅读全文
艾伟_转载:打造优雅的Linq To SQL动态查询
2011-08-29 00:21 by 狼人:-), 208 阅读, 0 推荐, 收藏,
摘要:首先我们来看看日常比较典型的一种查询Form 这个场景很简单:就是根据客户名、订单日期、负责人来作筛选条件,然后找出符合要求的订单。 在那遥远的时代,可能避免不了要写这样的简单接口:
public interface IOrderService{ IList<Order> Search(string customer, DateTime dateFrom, DateTime dateTo, int employeeID);} 具体爱怎么实现就怎么实现啦,存储过程,ORM框架。这里假定是用了孩童时代就开始有的存储过程吧: Code highlightin... 阅读全文
艾伟_转载:我对NHibernate的感受(2):何必到处都virtual
2011-08-29 00:21 by 狼人:-), 124 阅读, 0 推荐, 收藏,
摘要:上一篇文章主要是在夸NHibernate实现的好,而这篇就完全是来抱怨的了。NHiberante有个毛病,就是如果是和数据库产生映射的类,就要求所有的public成员和protected成员必须是virtual的。请注意这里的要求有两个细节: 即使是方法,也必须标记为virtual 即时是不和数据库有映射关系的属性,也必须标记为virtual 这就让我觉得无厘头了,为什么没有任何关系的东西也要受到限制?我知道NHiberante要求将属性标记为virtual是为了延迟加载,因为只有这样它才能生成如上一篇文章中那样的延迟代理类,这样就可以实现只在第一次访问属性的时候才进行“加载”... 阅读全文
艾伟_转载:话说并发
2011-08-29 00:21 by 狼人:-), 122 阅读, 0 推荐, 收藏,
摘要:对于很多人来说,并发是一个离不开的话题。那么我们平常对并发的理解可能局限于某个方面。去很好的理解并发,对于软件开发很有帮助。怎样去更好的理解并发? 苹果下落,在我们认识牛顿定律之前。如果问苹果是下落的,我们都会说大家都知道,很清楚,很明白——了解但没引起关注。如果问为什么苹果下落。我们会举出很多相关的概念来说明苹果为什么下落——相似性,但却没有一个很清晰的概念。在万有引力之后,我们的认识已经有一定的高度,甚至对以后很多科技都很有帮助。 所以怎样去理解并发,我们不缺乏经验。那么我们缺乏的就是那么一个高度,可以理解为深度的认识。 可能有人会讲并发作为一种缺陷,一个问题。此时,我将他... 阅读全文
浙公网安备 33010602011771号