13.1.4  总结:回顾《软件架构设计》提出的"三维思维"

至此,我们讨论了划分子系统的3种手段:分层的细化、分区的引入、机制的提取。通过这3种手段的综合运用,就可更理性、更专业地展开逻辑架构的设计,如图13-7所示。

总结:回顾《软件架构设计》提出的"三维思维"_面向对象设计

  


笔者曾在《软件架构设计》一书中阐述:

如何通过关注点分离来达到"系统中的一部分发生了改变,不会影响其他部分"的目标呢?

首先,可以通过职责划分来分离关注点。面向对象设计的关键所在,就是职责的识别和分配。每个功能的完成,都是通过一系列职责组成的"协作链条"完成的;当不同职责被合理分离之后,为了实现新的功能只须构造新的"协作链条",而需求变更也往往只会影响到少数职责的定义和实现……

其次,可以利用软件系统各部分的通用性不同进行关注点分离。不同的通用程度意味着变化的可能性不同,将通用性不同的部分分离有利于通用部分的重用,也便于对专用部分修改……

另外,还可以先考虑大粒度的子系统,而暂时忽略子系统是如何通过更小粒度的模块和类组成的……

架构设计关注点分离原理如图13-8所示。

总结:回顾《软件架构设计》提出的"三维思维"_软件架构设计_02

   


图13-8总结了上述的架构设计关注点分离原理。可以说,根据职责分离关注点、根据通用性分离关注点、根据不同粒度级别分离关注点是三种位于不同"维度"的思维方式,所以在实际工作中必须综合运用这些手段。

于是,不难理解分层的细化、分区的引入、机制的提取这3种划分子系统手段之间的关系:它们处在思维的3个维度上。

首先,分层和机制位于不同的维度:职责维及通用维(如图13-9所示)。

总结:回顾《软件架构设计》提出的"三维思维"_面向对象设计_03

   


另外,是否引入分区,设计所"覆盖"的Scope是完全相同的。原因是层的粒度较大,而层内部引入的分区的粒度更小,便于组合出一个个功能(支持迭代开发)。这是第三维:粒度(如图13-10所示)。

总结:回顾《软件架构设计》提出的"三维思维"_架构设计_04

   


看来,分层的细化、分区的引入、机制的提取这3个手段不是相互替代的关系,而是相辅相成的关系。实践中,架构师应三管齐下,综合运用。

 

----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

13.3.2  过程串联:给初学者

第1步,根据当前理解切分(如图13-14所示)。质疑驱动的逻辑架构设计整体思路,是从运用分层的细化、分区的引入、机制的提取进行子系统划分开始的。

总结:回顾《软件架构设计》提出的"三维思维"_面向对象设计_05

  

第2步,找到某功能的参与单元(如图13-15所示)。若找不到或明显缺单元,就可以直接返回第1步了,以补充遗漏的职责单元。

总结:回顾《软件架构设计》提出的"三维思维"_面向对象设计_06

  

第3步,让它们协作完成功能(如图13-16所示)。研究第2步找到的参与单元之间的协作关系,看看能否完成预期功能,完成得怎么样?

总结:回顾《软件架构设计》提出的"三维思维"_架构设计_07

  

第4步,质疑并推进设计的深入(如图13-17所示)。通过质疑"对不对"和"好不好",可以发现新职责,或者调整协作方式。这意味着,第1步的子系统切分方案被调整、被优化……如此循环。

总结:回顾《软件架构设计》提出的"三维思维"_软件架构设计_08

  


 

-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------