资源管理设计——资源查找
软件系统中常见的资源有内存、文件句柄、数据库会话、线程、服务等,资源管理是资源使用者对资源进行有效控制的过程。资源管理的设计往往影响软件的非功能性需求:
性能:软件系统中操作往往涉及很多资源,如何保证资源可用、避免浪费、高效获取。
可扩展:如何设计资源管理架构保证向上、向下兼容。
可预测:如何保证资源操作的时间是可以预期的。
灵活性:如何设计保证系统易于定制和配置。
稳定性:如何设计保证资源的频繁操作不会导致系统的不稳定。
一致性:如何设计保证系统处于一致的状态。
软件系统的设计往往需要考虑以上多个方面,而某些方面本身是互相矛盾的,比如灵活性和性能本身可能冲突(分层架构设计),针对实际的问题在不同的影响之间找到一个合适的平衡是设计的目标。
资源查找:
要使用资源可能首先要找到资源,如何查找到资源并且系统灵活、高效是设计的主要目标。
如http://www.cnblogs.com/chencheng/p/3290370.html所示的一个组件系统。平台为上层应用提供组件服务,组件本身可能增加、删除,上层应用需要高效的查找到组件资源并且使用。我们可能有下面几种设计方式:
1:由组件提供者自身通知上层应用其相关信息,如下图所示:
- 每个组件资源的改变都需要通知所有上层应用,效率低下。
- 每个上层应用都需要存储所有组件信息并且自己管理,增加应用层的负担。
- 相对稳定的底层平台依赖相对变化的上层应用,导致上层难以扩展。
2:平台提供应用管理模块供上层应用注册,如下图所示:
- 应用管理模块提供注册接口供上层应用注册,将相关的上层应用信息注册到平台中作为组件资源的观察者。
- 组件资源作为通知者,组件的任何修改通过应用管理模块通知已经注册的应用。
- 每个上层应用还是需要存储了所有组件信息并且自己管理。
- 组件资源的改变都需要通知所有应用,效率低下。
- 相对变化的上层应用依赖相对稳定的底层平台,上层应用可以自由扩展。
3:平台提供组件资源管理模块,如下图所示:
- 组件资源管理模块向组件提供注册、去注册服务。
- 组件资源管理模块向上层应用提供资源查找、查看资源信息、获取资源服务等相关服务。
- 组件资源管理模块管理资源信息,不再需要应用层管理。
- 组件资源管理模块可以通过适当的数据结构和算法提供高效的组件访问服务。
- 组件资源的任何变化只和组件资源管理模块交互,上层应用在需要使用组件的时候才向组件资源管理模块查询,提升效率。
- 组件资源管理模块相对稳定,组件和上层应用都可以自由扩展。
我们可以看到设计三类似一个中介者模式,在现实生活中就类型一个房屋中介结构,房主在中介登记,有人需要租房直接到中介那里去查询房屋信息。如果没有中介机构挨家挨户的去询问将是多么痛苦的事情。