10 2010 档案
摘要:
在一个基于ASP.NET应用中,我们通常使用Session保存基于某个客户端的状态信息。但是这种单纯使用Session的编程方式具有很多局限。为了实现对客户端状态的有效管理,并提高应用开发效率,在很多年前我们的开发框架体系中就具有相关的编程框架。最近我开始对其进行升级和重新设计,将大体上实现原理写出来与大家分享。阅读全文
在一个基于ASP.NET应用中,我们通常使用Session保存基于某个客户端的状态信息。但是这种单纯使用Session的编程方式具有很多局限。为了实现对客户端状态的有效管理,并提高应用开发效率,在很多年前我们的开发框架体系中就具有相关的编程框架。最近我开始对其进行升级和重新设计,将大体上实现原理写出来与大家分享。阅读全文摘要:
转自天涯论坛]香港9月24日消息(记者邵丽丽)国际反贪污组织“透明国际”(总部位于德国柏林的“透明国际”(Transparen-cyInternational,简称TI,是全球著名非营利性反腐败组织),最新公布2008年全球国家或地区清廉指数排名调查,香港在全球一百八十个国家或地区中排名第十二,较去年上升两级。由于陈水扁家族洗钱曝光,台湾清廉排名由去年34骤降至今年39,中国的全球排名与去年相同,排名第七十二。其他排名如下:
阅读全文
转自天涯论坛]香港9月24日消息(记者邵丽丽)国际反贪污组织“透明国际”(总部位于德国柏林的“透明国际”(Transparen-cyInternational,简称TI,是全球著名非营利性反腐败组织),最新公布2008年全球国家或地区清廉指数排名调查,香港在全球一百八十个国家或地区中排名第十二,较去年上升两级。由于陈水扁家族洗钱曝光,台湾清廉排名由去年34骤降至今年39,中国的全球排名与去年相同,排名第七十二。其他排名如下:
阅读全文摘要:
C#的yield关键字由来以久,如果我没有记错的话,应该是在C# 2.0中被引入的。相信大家此关键字的用法已经了然于胸,很多人也了解yield背后的“延迟赋值”机制。但是即使你知道这个机制,你也很容易在不经意间掉入它制造的陷阱。阅读全文
摘要:
在《上篇》中我们通过T4模板为我们指定的数据表成功生成了我们需要的用于添加、修改和删除操作的存储过程。但是这是一种基于单个文件的解决方案,即我们必须为每一个生成的存储过程建立一个模板。如果我们提供一种基于多文件的代码生成方式,将会为编程人员带来极大的便利,本篇文章将为你解决这个问题。阅读全文
在《上篇》中我们通过T4模板为我们指定的数据表成功生成了我们需要的用于添加、修改和删除操作的存储过程。但是这是一种基于单个文件的解决方案,即我们必须为每一个生成的存储过程建立一个模板。如果我们提供一种基于多文件的代码生成方式,将会为编程人员带来极大的便利,本篇文章将为你解决这个问题。阅读全文摘要:
在《基于T4的代码生成方式》中,我对T4模板的组成结构、语法,以及T4引擎的工作原理进行了大体的介绍,并且编写了一个T4模板实现了如何将一个XML转变成C#代码。为了让由此需求的读者对T4有更深的了解,我们通过T4来做一些更加实际的事情——为某个数据表自动生成进行插入、修改和删除的存储过程。阅读全文
在《基于T4的代码生成方式》中,我对T4模板的组成结构、语法,以及T4引擎的工作原理进行了大体的介绍,并且编写了一个T4模板实现了如何将一个XML转变成C#代码。为了让由此需求的读者对T4有更深的了解,我们通过T4来做一些更加实际的事情——为某个数据表自动生成进行插入、修改和删除的存储过程。阅读全文摘要:
在之前写一篇文章《从数据到代码》(上篇、下篇)中,我通过基于CodeDOM+Custom Tool的代码生成方式实现了将一个XML表示的消息列表转换成了相应的C#代码,从而达到了强类型编程的目的。实际上,我们最常用的代码生成当时不是CodeDOM,而是T4,这是一个更为强大,并且适用范围更广的代码生成技术。今天,我将相同的例子通过T4的方式再实现一次阅读全文
在之前写一篇文章《从数据到代码》(上篇、下篇)中,我通过基于CodeDOM+Custom Tool的代码生成方式实现了将一个XML表示的消息列表转换成了相应的C#代码,从而达到了强类型编程的目的。实际上,我们最常用的代码生成当时不是CodeDOM,而是T4,这是一个更为强大,并且适用范围更广的代码生成技术。今天,我将相同的例子通过T4的方式再实现一次阅读全文摘要:
《上篇》中我们主要讨论的是程序集和应用程序域的话题,着重介绍了两个不同的程序集加载方式:独占方式和共享方式("中立域"方式);以及基于"进程范围内"的字符串驻留。这篇将关注点放在托管对象创建时"内存的分配"和对"大对象的回收"上。阅读全文
《上篇》中我们主要讨论的是程序集和应用程序域的话题,着重介绍了两个不同的程序集加载方式:独占方式和共享方式("中立域"方式);以及基于"进程范围内"的字符串驻留。这篇将关注点放在托管对象创建时"内存的分配"和对"大对象的回收"上。阅读全文摘要:
半年之前,PM让我在部门内部进行一次关于“内存泄露”的专题分享,我为此准备了一份PPT。今天无意中将其翻出来,觉得里面提到的关于CLR下关于内存管理部分的内存还有点意思。为此,今天按照PPT的内容写了一篇文章。本篇文章不会在讨论那些我们熟悉的话题,比如“值类型引用类型具有怎样的区别?”、“垃圾回收分为几个步骤?”,而是讨论一些不"不一样"的东西。阅读全文
半年之前,PM让我在部门内部进行一次关于“内存泄露”的专题分享,我为此准备了一份PPT。今天无意中将其翻出来,觉得里面提到的关于CLR下关于内存管理部分的内存还有点意思。为此,今天按照PPT的内容写了一篇文章。本篇文章不会在讨论那些我们熟悉的话题,比如“值类型引用类型具有怎样的区别?”、“垃圾回收分为几个步骤?”,而是讨论一些不"不一样"的东西。阅读全文摘要:
Rob beat me to it. Blogging about T4 (the Text Template Transformation Toolkit) had been on my list literally for a year. He and I were singing its praises last night. Hopefully I can add something small to the conversation.
What's the story? Well, T4 is a code generator built right into Visual Studio. To be clear, you HAVE THIS NOW on your system…go play. Now's the time to introduce code generation to y阅读全文
Rob beat me to it. Blogging about T4 (the Text Template Transformation Toolkit) had been on my list literally for a year. He and I were singing its praises last night. Hopefully I can add something small to the conversation.
What's the story? Well, T4 is a code generator built right into Visual Studio. To be clear, you HAVE THIS NOW on your system…go play. Now's the time to introduce code generation to y阅读全文摘要:
关于“验证框架”,先后推出了《编程篇》、《设计篇》和《改进篇》,本不打算再写《XXX篇》的。但是今天收到两个园友的短消息,想了解一下如何定义自己的验证规则,同时为了让本系列看起来完整,额外写了《扩展篇》收尾。本篇我们写一个简单的验证器,用于验证字符串类型属性成员的长度。阅读全文
关于“验证框架”,先后推出了《编程篇》、《设计篇》和《改进篇》,本不打算再写《XXX篇》的。但是今天收到两个园友的短消息,想了解一下如何定义自己的验证规则,同时为了让本系列看起来完整,额外写了《扩展篇》收尾。本篇我们写一个简单的验证器,用于验证字符串类型属性成员的长度。阅读全文摘要:
自《编程篇》和《设计篇》发布以来,收到了一些反馈,给了很大的启发。为此,我对这个“验证框架”进行了相应的改进,让CompositeValidator具有了解析“验证表达式”的能力。阅读全文
自《编程篇》和《设计篇》发布以来,收到了一些反馈,给了很大的启发。为此,我对这个“验证框架”进行了相应的改进,让CompositeValidator具有了解析“验证表达式”的能力。阅读全文摘要:
没有想到自己头脑发热写了一个简陋版本的所谓“验证框架”能够得到众多网友的推荐。个人觉得这个验证框架有两个主要的特点是:提供复杂逻辑判断和多验证规则的支持。《编程篇》中,我主要介绍了如何通过自定义特性的方式进行验证规则的定义,在本篇中我主要来介绍该验证框架的设计原理和实现。阅读全文
没有想到自己头脑发热写了一个简陋版本的所谓“验证框架”能够得到众多网友的推荐。个人觉得这个验证框架有两个主要的特点是:提供复杂逻辑判断和多验证规则的支持。《编程篇》中,我主要介绍了如何通过自定义特性的方式进行验证规则的定义,在本篇中我主要来介绍该验证框架的设计原理和实现。阅读全文摘要:
昨天晚上突发奇想,弄了一个简易版的验证框架,用于进行数据实体的验证。目前仅仅实现基于属性的声明式的验证,即通过自定义特性的方式将相应的Validator应用到对应的属性上,并设置相应的验证规则。在这里我们模拟一个有趣的场景来介绍这个迷你验证框架的使用:找对象,不论是找男朋友还是女朋友,还是不男不女的朋友,都具有一定的标准,在这里我们把这些标准表示成“验证规则”...阅读全文
昨天晚上突发奇想,弄了一个简易版的验证框架,用于进行数据实体的验证。目前仅仅实现基于属性的声明式的验证,即通过自定义特性的方式将相应的Validator应用到对应的属性上,并设置相应的验证规则。在这里我们模拟一个有趣的场景来介绍这个迷你验证框架的使用:找对象,不论是找男朋友还是女朋友,还是不男不女的朋友,都具有一定的标准,在这里我们把这些标准表示成“验证规则”...阅读全文摘要:
我们知道Modifier为Internal的类型成员仅限于当前程序集能够访问,但是在某些情况下,我们希望将它们暴露给另一个程序集。比较典型的应用场景包括如下两种:将一个组件或者模块定义成两个或者两个以上程序集,一个程序集需要访问另一个程序集的Internal成员;对一个组件或者模块进行单元测试时候,单元测试用例需要调用定义在被测试组件或者模块的Internal成员。
阅读全文
我们知道Modifier为Internal的类型成员仅限于当前程序集能够访问,但是在某些情况下,我们希望将它们暴露给另一个程序集。比较典型的应用场景包括如下两种:将一个组件或者模块定义成两个或者两个以上程序集,一个程序集需要访问另一个程序集的Internal成员;对一个组件或者模块进行单元测试时候,单元测试用例需要调用定义在被测试组件或者模块的Internal成员。
阅读全文

