代码改变世界

随笔档案-2011年08月

NHibernate Tips

2011-08-28 23:15 by 小郝(Kaibo Hao), 337 阅读, 收藏,
摘要: This article is about the tips of NHibernate which includes: 1. Nhibernate mapping config file build action 2. Avoid redundant mappings 3. Use natural key to present the identification in real world 4. Use surrogate key for Identification of the physical record in the database. 5. Lazy Loading requirements 阅读全文

Effective C# 学习笔记(四十九)创建符合CLS标准的程序集

2011-08-20 22:38 by 小郝(Kaibo Hao), 620 阅读, 收藏,
摘要: 符合CLS(Common Language Subsystem)标准的程序集可以被其他跑在CLR的语言公用,这是.NET的一个引以为傲的特性,这样你用一种语言编写的程序集就可以被其他在CLR同样支持的程序调用了。要实现这个效果,要求更多的时间来设计构建你的程序集。主要要求两点:1. 所有public和protected的成员方法的参数和返回值必须是符合CLS标准的。2. 所有不符合CLS标准的public和protected成员方法,都应有符合CLS标准的方法来代替。实现CLS标准的程序集可以被其他运行在CLR平台的语言调用,但是要付出一点设计和构建的努力。当然,也不是说你所有的程序集都要为了这个目标去构建,你只需在需要多语言交互的接口使用符合CLS标准来构建就可以了,把转换封装到接口中,这样产出比还是很可以接受的。 :) 阅读全文

关于Parallel & MultiThread Programming的一些总结

2011-08-17 22:41 by 小郝(Kaibo Hao), 403 阅读, 收藏,
摘要: 本文收录了关于多线程和并行编程在.NET 4.0中的新特性介绍,都出自MSDN,以后还会更新,希望对大家有所帮助 :) 阅读全文

Effective C# 学习笔记(四十八)使用安全代码

2011-08-07 10:04 by 小郝(Kaibo Hao), 511 阅读, 收藏,
摘要: .NET 运行时保证了恶意代码不可在远程设备上(即跨Internet、Intranet)执行,但一些分布式部署的应用需要执行远程操作。若CLR不信任某个程序集,它就不会执行程序集的某个操作,这种行为叫做CAS(Code access security)。CLR执行基于角色的权限控制。这种控制是在运行时校验的,编译时无法强制检验,而且在你的开发机上也很难发现这些权限控制的约束,因为你硬盘上的代码拥有较高的执行权限。在处理此类非安全代码时,原则是首先看能否通过其他方式不去访问这些受保护的资源;若必须使用,则将这些代码放到一个独立的程序集中。 阅读全文

Effective C# 学习笔记(四十七)对异常进行strong guarantee 策略处理

2011-08-06 22:13 by 小郝(Kaibo Hao), 502 阅读, 收藏,
摘要: 异常处理的三种策略:Basic guarantee:在抛出异常前,保证所有资源没有溢出,而且各个对象属性状态是合法状态; Strong guarantee:基于Basic guarantee,其强调对象的属性状态还原为失败修改前的状态。(该策略确保了从异常中修复和简化异常处理操作); No throw Exception guarantee:在方法中不抛出异常,所有的错误都在该方法中处理。 阅读全文

Effective C# 学习笔记(四十六)对异常进行分类并逐类处理

2011-08-06 22:05 by 小郝(Kaibo Hao), 385 阅读, 收藏,
摘要: 对于异常的认识 1. 异常并不是包括所有错误条件 2. 抛出的异常最好是有定义的针对特殊类别的异常类型,不要总是使用System.Exception来处理异常,这样你可以针对不同的异常进行不同的Catch操作。可以从以下方面定义(这里只是抛砖引玉): a. 找不到文件或目录 b. 执行权限不足 c. 丢失网络资源 阅读全文

Effective C# 学习笔记(四十五)减少装箱拆箱行为

2011-08-06 10:35 by 小郝(Kaibo Hao), 631 阅读, 收藏,
摘要: 值类型用来存储数据,引用类型用来表现多态,而所有.net framework中的类型都继承自System.Object。这看起来有些冲突。.NET framework 用装箱和拆箱来解决两类类型间的转换。但是这种操作是十分消耗资源且影响性能的。 装箱:把一个值类型放入一个未命名的引用类型中,以使得该类型可被当作引用类型使用。 拆箱:从一个引用类型中将值类型的值Copy取出。 阅读全文

Effective C# 学习笔记(四十四)合理地在C#中使用Dynamic特性

2011-08-05 20:13 by 小郝(Kaibo Hao), 468 阅读, 收藏,
摘要: 尽管C# 4.0中添加了 Dynamic特性,但是本质上说C#还是一个静态语言。而过多的使用动态特性会是你的程序难于维护,易于出错,所以我们要讲一个“度”字。 原则是:在必须使用Dynamic的时候使用之,但将使用Dynamic的逻辑的地方用静态类型的方式封装起来供外界调用。(如使用范型转换Dynamic类型) 阅读全文

Effective C# 学习笔记(四十三)使用Expression处理绑定(属性值更改)事件

2011-08-04 21:59 by 小郝(Kaibo Hao), 803 阅读, 收藏,
摘要: DataBinding的实现原理是当其绑定的属性的值发生变化时将触发属性值改变事件,以调用数据绑定值改变后应触发的逻辑(如更新GridView列表中的数据展现)。其每个属性更改的区分是通过属性的名称来唯一标识的。这样的方法不利于代码的重构,也容易引起书写错误导致不易排查的运行时错误。使用Expression API和反射原理可以帮你解决属性变更触发事件的通用逻辑与属性名称之间的耦合。其实,LINQ TO SQL及 Entity Framework就是构建在System.Linq.Expression的API上的。 阅读全文

Effective C# 学习笔记(四十二)理解Expression API的使用方式

2011-08-03 22:49 by 小郝(Kaibo Hao), 704 阅读, 收藏,
摘要: .NET原来就拥有反射的机制来处理运行时的代码动态构建与使用。但这种代码的构建比较复杂,难以维护。而C#的LINQ和Dynamic支持使这个特性更加简单和容易使用。那就是使用Expression 表达式来为运行时提供动态业务逻辑。 阅读全文

Effective C# 学习笔记(四十一)使利用DynamicObject或IDynamicMetaObjectProvider接口实现数据驱动的动态类型

2011-08-02 17:18 by 小郝(Kaibo Hao), 2430 阅读, 收藏,
摘要: 实现动态行为可以帮助解决你编程实践中遇到的各种挑战。当要创建动态类型时,首先判断是否可以通过集成System.Dynamic.DynamicObject来实现。若不能通过继承的方式实现,就要实现IDynamicMetaObjectProvider接口,通过创建继承自DynamicMetaObject类型的嵌套类并重载其对应方法来实现对你要创建的动态类型的属性访问、方法调用等各种动态行为。其中用到了较为复杂的Expression定义,这层抽象较难理解,也较容易出错,请注意这部分逻辑的覆写。另外,用你自己的动态逻辑也要考虑的性能损失的问题,因为动态编程本来就要比静态编程消耗更多的资源,有得必有失么:) 阅读全文