来源:赛迪网 作者:kit
近日,Wintellect’s 在CodePlex上发布了最新版本的Power Collections。虽然.NET Framework似乎已经提供了很丰富的集合类型,但在开发中总会碰到定制集合类型的需要,其中原因在于集合类型的适用场景太过丰富:
用于层间的数据传递;
用于和数据层(无论是DAL还是DSL之类各种概念命名的逻辑数据和数据访问部分)的信息提取;
用于算法中对象的聚合(或组合);
用于UI部分的数据绑定;
用于缓冲必要的参数信息、配置信息、应用上下文信息;
用于集中调用的DTO(Data Transfer Object)对象;
... ...
由于集合类型的适用情景非常丰富,而且往往对性能和集合容量有很多不可预期的处理需求,因此System.Collections及其子命名空间提供的类型往往在开发中的一些关键技术环节显得捉襟见肘了,例如下列情形:
需要存在冗余数据项的集合类型(Dirty Set);
需要多键值依赖的字典类型;
为了迭代和遍历方便,需要具有排序能力的集合类型(Ordered Set);
访问上,需要只读特性的集合类型;
为了迎合联合索引的特点,应用需要3 键值、甚至更多数量键值的KeyValuePair来保存数据集;
此外,开发中除了需要集合类型抛出必要的异常外,往往还希望可以抛出委托或者事件,用于运行时数据检查或内容校验;
需要在内存中保存特别大数量的集合;
... ...
Power Collections对上述需要给了一个很精彩的答案,而且都是泛型的。它从“根”上实现了自己的集合类型,排序、只读属性、克隆、序列化、取并集(Union)、求交集(Intesection)等都是从自己实现的集合基类中完成的。相对System.Colletions而言,Power Collections的类型基本上不仅仅是“一堆”数据,还包括了非常多的计算方法,而且很多计算支持对一组对象的批量的处理,因此从性能上也有了不小的提升。
随着各种可视化建模工具、开发工具的出现,很多时候,应用的开发人员生疏了对数据结构的使用,.NET Framework虽然丰富但仅仅是个框架,各种流行的.NET 开源框架也几乎都是服务于功能性扩展部分的。但每个应用,尤其对企业而言的关键性大型应用而言,总要有那么几个技术的“坎”,算法处理上的集合类型也经常算一个。Power Collections虽然解决的仅仅是一个“比较小”的问题,但较之其他框架而言,他更基础、更普适一些。即便它的功能覆盖也不可能满足所有应用的需要,不过它的“底子”好,起码定制更复杂集合类型的时候,Power Collections不失为一个很好的范本。
不仅如此,对于.NET开发人员而言,反射、多线程、进程间远程访问、Networking、异步调用、动态代码生成等开发技术领域其实也一直在期待“挺好用”的开源框架。