在《程序员修炼之道——从小工到专家》中提到了软件系统设计中的正交性原则,“正交性”对我而言是一个新鲜词汇,原来是来自几何学中的术语。
正交性
如果两条直线相交成直角,它们就是正交的,用向量术语说,这两条直线互不依赖,沿着某一条直线移动,投影到另一条直线上的位置不变。
那切换到软件系统领域,正交性就是互不依赖、解藕,即各个子系统、模块之间相互独立,互不影响,或者尽量减少耦合性。
在实际过程中,很多情况下很难做到模块的正交性,或多或少地需要与其他模块、子系统打交道。比如在维护旧版本的同时开发新功能时,尤其是项目工期紧张、代码版本管理混乱的时候,没人顾得上这些了。
正交性应该适用于软件系统的设计、开发、测试的各个环节,初始的设计决定了功能/业务/系统/模块的位置,处在中间层的子系统承上启下成为了关键点,与上下关联系统的耦合性最大;开发过程中也需要留意,统一好接口后尽量保持不变,这样减少了开发人员之间的沟通成本,也方便自己做单元测试和每次单元测试的累积以及最后的自动化测试;而最终的测试环节,需要验证每个功能的独立性,方便确认问题的来源。