Java组件设计
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

2.5 组件设计实现:对使用环境无假设

组件的内部实现,是否可以对将来组件被使用的环境做些假设?比如,是在Servlet容器中运行,或仅使用一个组件的实例,或仅处理一个目录…….

如果组件设计者对组件将来被使用的环境做了一些假设,认为这些条件必然被满足,那么组件的代码实现就会和这些假设条件相关。如果这些条件不成立,则组件无法被使用。比如,组件设计者认为,将来应用中一个组件实例就能满足其需要,因此组件就设计成了单实例。当一个特殊的应用出现,需要使用两个组件实例来处理不同的场景时,发现组件已经被设计成单实例,无法满足应用的这种“特殊”需求。

这种需求,真的很特殊吗?

客观上讲,需求来自于具体的应用,来自客户的使用场景和要解决的问题。需求,是独立于设计和实现的,尤其与组件的设计实现无关。组件设计者之所以认为这种需求很“特殊”,是因为这个需求超出了组件设计者原来所做的假设。根本上讲,组件设计者不应该对组件将来的使用环境做任何假设,这样组件的使用场合仅受限于组件的能力集,只要应用需要的功能在组件的能力集范围内,各种环境下的不同应用都可以使用这个组件。

这样,组件才可以被广泛重用。