|
2005年9月4日
摘要:
最近大家在园子可能看到了不少有关Aop的文章, 也许尚有很多人不知AOP为何物, 或许有人认为AOP就是方法拦截. 不管你现在对AOP的认识如何, 希望在本系列的文章中和我共同加深对AOP的理解. 渐渐地你会发现编程的思想已经开始有了新的变化...如果你不知道什么是AOP, 那么你听说过Design Pattern吗? 如果你觉得DP很神奇, 那么我告诉你AOP将改变DP的样子.如果你不知道什么是... 阅读全文
2005年8月18日
摘要:
在很多场合下, 你需要在主(UI)线程中运行一些比较耗时间的任务,比如以下的任务 l Image downloadsl Web service invocationsl File downloads and uploads (including for peer-to-peer applications)l Complex local computationsl Database transact... 阅读全文
摘要:
通过和吕震宇和wayfarer对Visitor模式的讨论,加深了对Visitor模式的理解. 整个学习过程如下, 希望对想了解Visitor模式的朋友有所帮助.同时感谢博客园提供的良好学习环境. 介绍 存在的问题 不可爱的Visitor 如何让Visitor变的可爱1 如何让Visitor变的可爱2 关于双重分派 Double-Dispatch and Visitor Pattern 阅读全文
2005年8月15日
摘要:
在谈具体实现前 先介绍一下三种事务:1. 单对象单资源2. 多对象单资源3. 多对象多资源(分布式事务, 使用两段提交协议)在ADO.Net1.0下有两种使用Transaction的方法. 一种是在需要事务的对象中显式的调用事务处理, 还有一种是使用Enterprise Service的声明式的方法.第一种方法的示例代码如下: publicvoidTransactionTest(){stringc... 阅读全文
2005年8月8日
摘要:
让我们从一个计算工资的老例子说起. 不同的员工有各种不同的工资计算方法, 这种情况下如何为全公司的员工计算呢? 想想现实中的情况, 在公司可能有一个会计部,每到发薪的日子. 会计部就会把全公司的员工资料集中到一起, 看看张三是什么类型的员工, 如果是小时工就按小时工来计算,如果是办公室主任就按主任的方法来计算. 基于这样的考虑, 我们在建模的时候也会相应的建立一个类似于会计部的类, 其中定义了一个... 阅读全文
2005年8月6日
摘要:
Include Only the Primary Key Columns, last in winInclude All Columns in the WHERE ClauseInclude the Primary Key and Timestamp Columns(Recommended)4. Include the Primary Key Columns and Modified Column... 阅读全文
2005年8月2日
摘要:
Martin Fowler昨天发布了一篇有关Collection Closure的文章, 文中以Ruby为例展示了Collection Closure的强大,方便. 对照着他的例子, Demo了一下在C#中如何实现类似的功能.Example 1employees.each do |e| e.doSomething end31 employees.ForEach(delegate(Employee ... 阅读全文
2005年7月29日
摘要:
当单元测试需要对数据库执行CRUD(Create,Retrieve,Update,Delete)操作时,测试过后会在我们的数据库中留下大量重复的垃圾数据,这些垃圾很碍眼不是吗?而且我们的下一个测试有可能因为这些垃圾产生一些错误。那么我们要如何处理这些垃圾数据和保证测试的稳定的呢?显然,我们需要在每次测试之前和测试完成之后让数据库都保持相同的状态。换句话说,就是我们需要"undo"这些在测试中对数据... 阅读全文
2005年7月25日
摘要:
如果你想为一个线程传入变量你怎么办? ThreadStart可不支持带参数的方法.所以你无法使用Thread来启动一个带参数的方法.. ThreadStartmyThreadDelegate=newThreadStart(ThreadMethod);//publicdelegatevoidThreadStart();ucan'tpassaParameterThreadmyThread=newThr... 阅读全文
2005年7月20日
摘要:
任何事情如果有先行之人对你加以指引, 那么对你无疑将起到巨大的作用,而且这种作用往往不是以+的方式,而是*的方式推动你的前进. 在学习面向对象,模式以及设计的路上, 如果你有兴趣,希望我能给你一点指引. 我不知道大家上班以后是否还读书,又或者每个月读几本书. 不管怎样, 我还是强烈建议你每个月去读一本书(不一定要读完). 在有了项目经验的情况下, 读书会让你有更快的提高速度. 下面是我的推荐书目:... 阅读全文
2005年7月15日
摘要:
在cnblogs已经住了很久了, 窃以为这里是国内最好的.Net社区(博客堂由于某些原因排除在外,如果你还知道更好的请告知一二). 不过经过观察发现这里最受欢迎,最受关注的是关于控件以及象本文这样和技术关系不是太大而在非技术上很有争议的随笔.(理由是该随笔的阅读量和评论量,尤其是评论量) 在alphatom阅读量评论量最高的文章也是一篇关于asp.net视频聊天控件的. 这个结论既让人想不到,也在... 阅读全文
2005年7月8日
摘要:
面向对象技术已经达到它的顶峰, 在新的技术到来之前, 对已有技术的反思无可避免.最近正在阅读<<Software Factory>>,其中不乏一些精彩的观点, 结合自己的体会写了下文.在此希望大家也发表一些个人观点, 一起思考一下.http://idior.cnblogs.com/articles/188936.html 阅读全文
2005年7月4日
摘要:
近日 有关o/r m的讨论突然多了起来. 在这里觉得有必要澄清一些概念, 免的大家讨论来讨论去, 才发现最根本的理解有问题.本文并不保证所有观点正确, 只是个人在某一特定时期的理解.1. 何谓Entity?实体(类似于j2ee中的Entity Bean)通常指一个承载数据的对象, 但是注意它也是可以有行为的! 只不过它的行为一般只操作自身的数据. 比如下面这个例子:classPerson{stri... 阅读全文
2005年5月22日
摘要:
前段时间写了一篇随笔介绍了一下AssertThat的用法. 今天突发奇想由此联想到了测试代码的复用. (哈,我也会突发奇想了)其实在编写测试案例的过程中有很多的测试方法仅仅是因为换了一个对象我们就要重写一次,当然你可以使用Ctrl+C,Ctrl+V.不过这显然是一个Bad Smell. 有没有什么改进的方法呢?看看AssertThat的结构. Assert.AssertThat(3, Betwee... 阅读全文
2005年5月15日
摘要:
厌烦了Assert.AreEqal();等等一堆的Assert类中的静态方法了吗?
偶然觅得下面这个奇思妙想.
AssertThat(something, Equal("Hello"));
阅读全文
2005年5月11日
摘要:
下面这段代码为什么无法编译? usingSystem; usingSystem.Collections.Generic; usingSystem.Drawing; namespaceGenicTest { classProgram { staticvoidMain(string[]args) { ... 阅读全文
2005年4月29日
摘要:
在网络通讯的编程中我们经常使用到Socket, 这种情况下我们往往需要长期的监听某个端口, 以获得相应的Socket, 然后再利用它进行相关操作. 但是这样的话, 主线程就会被阻塞.无法对其他时间做出相应. 其实在.Net的Socket类中提供了对异步操作的支持. 下面将介绍其基本原理, 以及利用它做的一个P2P的实现. 详见文章 阅读全文
2005年4月17日
摘要:
举一个NHibernate的例子 ISession session; ITransaction tx; try { session = factory.OpenSession(); tx = session.BeginTransaction(); // do database work tx.Commit(); session.Close(); } catch (Exception ex) { ... 阅读全文
2005年4月14日
摘要:
你了解创建者模式了吗? 我准备从How 和 Why 这两个角度来谈谈我对创建者模式的理解. How to implement Factory and Abstract Factory 对于创建者模式, 有一点很容易被大多数人所忽视所误解, 就是Factory模式和Abstract Factory模式的区别. 他们的最重要的区别不是在于Abstract Factory是用于... 阅读全文
2005年4月8日
摘要:
G#是一种基于.Net平台的一门新的语言, 它可以在编译期以及运行期为原有的代码注入新的代码. 并且新的代码同样能保证.net平台下的类型安全性. 和CodeSmith不同的是 它的代码生成技术是为已有的代码添加新的功能, 也就是目前AOP技术所要实现的目标. 如果你使用过Aspectj就会发现它语法的丑陋, 而G#的语法是C#2.0的一个子集,看上去非常的容易理解.并且G#是基于.Net的IL语... 阅读全文
摘要:
Cω是微软研究院对下一代语言的探索。它扩展了C#的功能,更好的支持数据访问(SQL和XML)和并发控制。 Cω的希望能方便的开发出更加可靠且维护性更好的软件,其中一个重要的概念就是"尽早的发现错误"。 在下面的一个数据库查询的例子中将很好的体现出这一点。 现在我想得到一个在某个城市的员工名字的列表。(就使用SQL-Server预装的Northwind数据库) 下面给出最简单的实现: ... 阅读全文
2005年3月29日
摘要:
1.Refactory away External Loops尽量将集合遍历的操作放在集合内 2. Reduce Private Method尽量减少私有方法 3. Open-Close Principle 封闭开放原则 4. Specif... 阅读全文
2005年3月26日
摘要:
在.net下实现Singleton,估计很多人都知道了.下面的代码可以说经典. classMySingleton { privatestaticMySingletoninstance=newMySingleton(); publicstaticMySingletonInstance{get{returninstance;}} ... 阅读全文
摘要:
效果如图: 1. 打开你的VS.Net安装目录(默认C:\Program Files\Microsoft Visual Studio .NET 2003) 2. 进一步打开\VC#\CSharpProjectItems\LocalProjectItems,然后编辑LocalProjectItems.vsdir文件,在文件的末尾加上 ..\CSharpAddInterface... 阅读全文
2005年3月17日
摘要:
本文继续系列一详细介绍了有关Lucene.net索引添加删除更新的详细内容.并给出了所有的TestCase供学习参考. http://www.cnblogs.com/idior/articles/120734.html 阅读全文
摘要:
本文介绍了什么是Lucene,Lucene能做什么. 如何从一个文件夹下的所有txt文件中查找特定的词? 本文将围绕该个实例介绍了lucene.net的索引的建立以及如何针对索引进行搜索.最后还将给出源代码供大家学习. http://www.cnblogs.com/idior/articles/120301.html Lucene系列文章 阅读全文
2005年3月10日
摘要:
产生随机数最重要的在于seed的选取. 通常情况下使用的是系统的时间,不过对于某些快的cpu,这种方法产生的随机数也会重复. 利用GUID的Hashcode作为seed,倒不失为一个简单有效的方法. 具体请见alphatom 阅读全文
2005年3月6日
摘要:
最近看了看 Contributing to Eclipse , 很好的一本书. 看的过程中联想到wayfarer以前写的《让僵冷的翅膀飞起来》 突然有很多新的想法,详见 http://www.cnblogs.com/idior/articles/113958.html 阅读全文
2005年3月4日
摘要:
看看你的基础如何,对vitual new override关键字了解吗? http://www.cnblogs.com/idior/archive/2005/03/04/113143.html 阅读全文
摘要:
还记得里面的那只蝴蝶吗? 这是一个很简单很丑陋的画图程序,你将亲眼看着它从毛毛虫变成蝴蝶。涉及内容: GDI+, 重构,State 模式 GDI+重构(2) 模式(3) 阅读全文
2005年3月2日
摘要:
C#和VB.net的语法相差还是比较大的. 可能你会C#,可能你会VB. 将它们俩放在一起对比一下你就会很快读懂,并掌握另一门语言. 相信下面这张图会对你帮助很大. 阅读全文
2005年2月28日
摘要:
Adrian Colyer在他的一篇随笔用最简单的话阐述了AOP的思想,其中concept:implment的概念让人眼前一亮. 在设计中捕获的概念和需求,在这个软件进化的过程中,往往也是发生变化的最小单元。一个设计到实现的1-1的映射是可以很容易的添加、删除、维护的,而一个1-n的映射相对来说就难得多,因为一个概念发生变化,你必须去更新很多地方——而且你必须保证一个不漏的改到,而且必... 阅读全文
2005年2月26日
摘要:
在.net 1.1下一个比较好的方法是(经寒枫提示) usingSystem; namespaceidior { publicclassTested { #if(DEBUG) public #else private #endif stringPrivateMe... 阅读全文
2005年2月23日
摘要:
You should use Hibernate if you have a nontrivial application (definition of nontrivial varies, but I usually think of Hibernate being less applicable to applications with only ten tables or so) that ... 阅读全文
摘要:
ORm 不是全为了实现 domain model 将数据和行为分离也是一种思想,这时会使用manage/service model 而manager model也需要object,在object中可以做一些和数据相关的事,比如验证.这样也需要一个ORm的工具. 所以ORm 并不是和domain model绑在一起的. 阅读全文
2005年2月5日
摘要:
O/R Mapper 是什么?能为我们带来什么? O/R Mapper 和Code Generator的区别是什么? 使用O/R Mapper 的动态SQL语言和使用Store Procedure的利弊. O/R Mapper使用Attribute还是Mapping file?各自的利弊. 阅读全文
摘要:
推荐一款小工具http://www.sellsbrothers.com/news/showTopic.aspx?ixTopic=1646 阅读全文
2005年2月3日
摘要:
前天写了一篇有关Delegate的随笔,随后又看了看吕震宇的一篇相关随笔.发现Delegate有些问题. Delegate就是接口,我是这样理解它的. 后来发现Delegate比起接口可以"乱用".因为它只要方法的签名一样就可以替换.比如下面这个例子. publicclassClient { publicdalegateintAddHandle(int... 阅读全文
摘要:
最近在玩TDD,发现要构造一个有很多值域的对象供测试使用,如果每个值域都提供设置函数,显然不太好(破坏了它的封装性) 但是如果为它写一个构造函数,就会有另一个问题,该构造函数只会在测试中使用.(因为实际构造这个对象是通过数据库的). 就有了题目上所写的问题,专门为测试写构造一个构造函数,是否合适? 大家发表一下意见. 阅读全文
|