总结:回顾《软件架构设计》提出的"三维思维"
2015-01-04 11:12
211 查看
13.1.4 总结:回顾《软件架构设计》提出的"三维思维"
至此,我们讨论了划分子系统的3种手段:分层的细化、分区的引入、机制的提取。通过这3种手段的综合运用,就可更理性、更专业地展开逻辑架构的设计,如图13-7所示。
笔者曾在《软件架构设计》一书中阐述:
如何通过关注点分离来达到"系统中的一部分发生了改变,不会影响其他部分"的目标呢?
首先,可以通过职责划分来分离关注点。面向对象设计的关键所在,就是职责的识别和分配。每个功能的完成,都是通过一系列职责组成的"协作链条"完成的;当不同职责被合理分离之后,为了实现新的功能只须构造新的"协作链条",而需求变更也往往只会影响到少数职责的定义和实现……
其次,可以利用软件系统各部分的通用性不同进行关注点分离。不同的通用程度意味着变化的可能性不同,将通用性不同的部分分离有利于通用部分的重用,也便于对专用部分修改……
另外,还可以先考虑大粒度的子系统,而暂时忽略子系统是如何通过更小粒度的模块和类组成的……
架构设计关注点分离原理如图13-8所示。
图13-8总结了上述的架构设计关注点分离原理。可以说,根据职责分离关注点、根据通用性分离关注点、根据不同粒度级别分离关注点是三种位于不同"维度"的思维方式,所以在实际工作中必须综合运用这些手段。
于是,不难理解分层的细化、分区的引入、机制的提取这3种划分子系统手段之间的关系:它们处在思维的3个维度上。
首先,分层和机制位于不同的维度:职责维及通用维(如图13-9所示)。
另外,是否引入分区,设计所"覆盖"的Scope是完全相同的。原因是层的粒度较大,而层内部引入的分区的粒度更小,便于组合出一个个功能(支持迭代开发)。这是第三维:粒度(如图13-10所示)。
看来,分层的细化、分区的引入、机制的提取这3个手段不是相互替代的关系,而是相辅相成的关系。实践中,架构师应三管齐下,综合运用。
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
13.3.2 过程串联:给初学者
第1步,根据当前理解切分(如图13-14所示)。质疑驱动的逻辑架构设计整体思路,是从运用分层的细化、分区的引入、机制的提取进行子系统划分开始的。
第2步,找到某功能的参与单元(如图13-15所示)。若找不到或明显缺单元,就可以直接返回第1步了,以补充遗漏的职责单元。
第3步,让它们协作完成功能(如图13-16所示)。研究第2步找到的参与单元之间的协作关系,看看能否完成预期功能,完成得怎么样?
第4步,质疑并推进设计的深入(如图13-17所示)。通过质疑"对不对"和"好不好",可以发现新职责,或者调整协作方式。这意味着,第1步的子系统切分方案被调整、被优化……如此循环。
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------
至此,我们讨论了划分子系统的3种手段:分层的细化、分区的引入、机制的提取。通过这3种手段的综合运用,就可更理性、更专业地展开逻辑架构的设计,如图13-7所示。
如何通过关注点分离来达到"系统中的一部分发生了改变,不会影响其他部分"的目标呢?
首先,可以通过职责划分来分离关注点。面向对象设计的关键所在,就是职责的识别和分配。每个功能的完成,都是通过一系列职责组成的"协作链条"完成的;当不同职责被合理分离之后,为了实现新的功能只须构造新的"协作链条",而需求变更也往往只会影响到少数职责的定义和实现……
其次,可以利用软件系统各部分的通用性不同进行关注点分离。不同的通用程度意味着变化的可能性不同,将通用性不同的部分分离有利于通用部分的重用,也便于对专用部分修改……
另外,还可以先考虑大粒度的子系统,而暂时忽略子系统是如何通过更小粒度的模块和类组成的……
架构设计关注点分离原理如图13-8所示。
于是,不难理解分层的细化、分区的引入、机制的提取这3种划分子系统手段之间的关系:它们处在思维的3个维度上。
首先,分层和机制位于不同的维度:职责维及通用维(如图13-9所示)。
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
13.3.2 过程串联:给初学者
第1步,根据当前理解切分(如图13-14所示)。质疑驱动的逻辑架构设计整体思路,是从运用分层的细化、分区的引入、机制的提取进行子系统划分开始的。
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------
相关文章推荐
- 我曾经的"愤青"思维
- "ORA-01460: 转换请求无法实现或不合理"及C#操作Blob总结
- 对于php.ini中常会触及到的"限制"总结
- "Unable to retrieve CarrierName."CTError引发的对iOS系统权限的总结
- "Service"-安卓面试必问技能点大总结"
- "Activity"-安卓面试必问技能点大总结"
- 经理人必须抛弃的十个"不正确"习惯思维方式
- "淘宝推荐系统简介"分享总结
- 关于正则表达式 g,m 参数的总结,为了回答“正则表达式(/[^0-9]/g,'')中的"/g"是什么意思?”
- Java 中的"=="和equals()方法比较总结。
- 谈运营商对"全程全网"的提出与公司产品的发展
- 关于正则表达式 g,m 参数的总结,为了回答“正则表达式(/[^0-9]/g,'')中的"/g"是什么意思?”
- Primefaces 3.4.2 "文件上传"的总结
- "新生代程序员"回顾及推荐Leo新作《程序员职场第一课》
- 从"按层次输出二叉树"到"求解二叉树深度"的总结
- "成功WEB商务"的7步走(5)——建立结构的思维方式和方法
- 总结C++中三种关于"new"的使用方法
- (转帖)总结C++中三种关于"new"的使用方法
- "Entity Framework数据插入性能追踪"读后总结
- "The connection to adb is down, and a severe error has occured."错误总结