WEB开发网
开发学院软件开发C语言 Effective C# 原则24:选择申明式编程而不是命令式... 阅读

Effective C# 原则24:选择申明式编程而不是命令式编程

 2009-02-19 08:16:28 来源:WEB开发网   
核心提示: 这个通用的比较对任何Customers 集合可以进行排序,而这个Customers是用DefaultSort特性申明了的:CustomerList.Sort( new GenericComparer(typeof( Customer )));实现GenericComparer的代码利用了一

这个通用的比较对任何Customers 集合可以进行排序,而这个Customers是用DefaultSort特性申明了的:

CustomerList.Sort( new GenericComparer(
 typeof( Customer )));

实现GenericComparer的代码利用了一些高级的技术,使用反射(参见原则43)。但你必须写一遍这样的代码。从这个观点上看,你所要做的就是添加空上属性到其它任何类上,然而你就可以对这些对象的集合进行能用的排序了。如果你修改了DefaultSort特性的参数,你就要修改类的行为。而不用修改所有的算法。

这种申明式习惯是很有用的,当一个简单的申明可以说明你的意图时,它可以帮助你避免重复的代码。再参考GenericComparer类,你应该可以为你创建的任何类型,写一个不同的(而且是是直接了当的)排序算法。这种申明式编程的好处就是你只用写一次能用的类型,然后就可以用一个简单的申明为每个类型创建行为。关键是行为的改变是基于单个申明的,不是基于任何算法的。GenericComparer可以在任何用DefaultSort特性修饰了的类型上工作,如果你只须要在程序里使用一两次排序功能,就按常规简单的方法写吧。然而,如果你的程序对于同样的行为,可能须要在几十个类型上实现,那么能用的算法以及申明式的解决方案会省下很多时间,而且在长时间的运行中也是很有力的。你不应该为WebMethod特性写代全部的代码,你应该把这一技术展开在你自己的算法上。原则42里讨论了一个例子:如何使用特性来建立一个附加命令句柄。其它的例子可能还包括一些在定义附加包建立动态的web UI面页时的其它内容。

申明式编程是一个很有力的工具,当你可以使用特性来表明你的意图时,你可以通过使用特性,来减少在大量类似的手写算法中出现逻辑错误的可能。申明式编程创建了更易于阅读,清晰的代码。这也就意味着不管是现在还是将来,都会少出现错误。如果你可以使用.Net框架里定义的特性,那就直接使用。如果不能,考虑选择创建你自己的特性,这样你可以在将来使用它来创建同样的行为。

上一页  1 2 3 4 

Tags:Effective 原则 选择

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接