集合设计

 

什么叫集合

集合是指可以在运行时添加、修改和删除数据的数据结构,在.NET中最常见的就是CollectionListDictionary。关于集合的基本概念我就不在此谈论,大家可以看看MSND,或参考:

.NET 2.0泛型集合类与.NET 1.1集合类的区别(一)

.NET 2.0泛型集合类与.NET 1.1集合类的区别(二)

.NET 2.0泛型集合类与.NET 1.1集合类的区别(三)

这篇文章中我将重点说明如何设计良好的集合。

设计良好的集合

l         可达的

所谓可达的,就是指你的集合实例必须能够被访问到,例如在Word中你可以通过下面的句子访问到所有的文档:

Application.Documents

l         可控制的

如果需要,你的集合类还应该包含必要的访问方法,例如Add、索引和Remove方法,这些使外界可以控制集合。

l         强健的

你的集合对外界的访问必须是强健的,这不仅仅包括集合的强类型,还包括诸如没有中间状态,例如最好不要这样设计:

Windows.Add(new Window());

Windows.EndAdd();

上面的例子中如果没有及时调用EndAdd就可能造成中间状态,如果你为了提高性能,你可以不使用Begion/End的设计方式,而是允许传入一个数组的方式批量加入。

通常你不应该公开不需要的变量。

l         可跟踪的(增强)

这一点不是必须的,实现IBindingList可以让外界跟踪集合的变化,但你必须在性能上作出牺牲(当然牺牲并不大)。

l         延迟填充(增强)

并不是所有的集合实例总是在内存中一直存在,有些集合可能生命周期很短,例如环境菜单,他需要在点击右键时才能决定如何构建菜单,点击后集合也不再需要。另外一种需要预先填充数据的集合,例如包含所有实体类型定义的集合,包含所有数据库连接的集合,他们也适合使用延迟加载技术。

通常你可以在集合中设计一个Reset方法,并包含Reseting事件,在事件参数中包含集合本身。这样外界就可以拦截此事件以便填充必要的默认数据。

原文地址:https://www.cnblogs.com/tansm/p/538554.html