在进行系统设计时,采取的通常都是逐级分解的策略,无论是分层、分模块都是典型的分而治之的策略,而系统在通过逐步分解形成架构、详细设计时,输入、输出以及扩展都是考虑的重点。
在进行架构设计时,首先是需要根据项目的需求、技术限制以及性能要求等决定项目采用的架构体系,这个架构体系停留在技术阶段,之后通过对架构体系中的各种层次做出框架的选择或解决方案的提供形成技术架构,在技术架构的基础上根据业务需求形成系统的业务架构,进而形成系统的整体架构。
在形成系统的整体架构后对系统进行子系统、模块的划分,在划分子系统、模块时输入、输出以及扩展的考虑就构成了子系统、模块的基本而重要的设计原则,根据输入来判断子系统或模块的耦合性,根据输出来判断子系统或模块对外提供的功能,根据扩展来判断子系统或模块中变化的可能性,以应对需求上的变化。
通过划分形成了系统的模块后,就可以开始对模块进行详细的设计了,这个时候输入、输出以及扩展的重要性同样表现的非常明显,模块通常由各种各样的组件或对象组成,对于这些组件和对象,输入决定了其依赖性,而输出决定了其对外提供的功能,扩展决定了在将来需求变化时这些组件和对象能否简单的实现。
输入不仅仅由输入的参数构成,它还包括了所依赖的服务、环境或其他方面的要求,从输入可以判断耦合度。输出代表了对外提供的服务。
扩展代表了可被扩展的功能点,类如Eclipse中的扩展点、js中的事件,如onClick等等。
对于输入、输出以及扩展的慎重考虑决定了从黑盒层面考虑的系统设计对于需求的满足度,这些在系统设计时都应有充足的体现。