1、软件架构设计(一)从案例看两类软件架构概念 “软件业的人乐于做这样的事找一些词汇,并将它们引申到大量微妙而又互相矛盾的含义中。一个最大受害者就是架构这个词。很多人都试图给架构下定义,而这些定义本身却很难统一。”Martin Flower 一、组成派 架构=组件+交互两类软件架构概念二、决策派架构=重要决策集组成派关注架构实践中的客体软件。决策派关注架构实践中的主体人。组成派概念举例ViewControllerModel读取-通知MVC模式组成派概念结论组件交互软件架构关注分割与交互决策派概念举例设备调试系统职责:1、设备状态的实时显示2、支持用户发送调试命令3、易测试性4、高性能协作者:1、调
2、试设备2、数据采集器桌面应用职责:1、负责设备状态的显示2、提供模拟控制台供用户发送调试命令3、通过串口和嵌入式应用通讯协作者:1、嵌入式应用嵌入式应用职责:1、负责对调试设备的具体控制2、高频度地从数据采集器读取设备状态数据3、通过串口和桌面应用通讯协作者:1、桌面应用2、被调试设备3、数据采集器决策派概念举例桌面应用职责:1、负责设备状态的显示2、提供模拟控制台供用户发送调试命令3、通过串口和嵌入式应用通讯协作者:1、嵌入式应用应用层:桌面应用职责:1、负责设备状态的显示2、提供模拟控制台供用户发送调试命令3、使用通讯层和嵌入式应用进行交互协作者:1、通讯层通讯层:桌面应用职责:1、负责在
3、RS232协议之上实现一套专用的应用协议2、当收到应用层发送来包含调试命令的协议包,按RS232协议传入嵌入式应用3、当收到嵌入式应用的原始数据,将其解析成应用协议包发送给应用层协作者:1、应用层2、嵌入式应用决策派概念举例设备调试系统桌面应用嵌入式应用嵌入式应用桌面应用应用层通讯层决策派概念结论l 软件架构是一系列有层次性的决策l 架构决策是分层次依次展开的l 决策制定的顺序往往是先制定技术无关的决策,后制定技术相关的决策 案例背景:有一个项目管理系统,提供项目计划、任务管理和资源管理等功能。软件架构设计案例分析案例需求:用户能够以甘特图方式查看任务的起始时间、结束时间、任务承担者等信息。需
4、求分析:信息来源:系统业务数据。甘特图:用户呈现。需求分析结论:软件架构设计案例分析展现层业务层读取数据l 此时,软件架构设计已经开始!MVCViewModell 此处,仍然处于“与具体技术无关”的层面。技术层面的问题:“甘特图绘制包”是自行开发,还是采用第三方SDK?软件架构设计案例分析 问题分析:用户不关心甘特图绘制包如何实现,只关心需求是否被实现项目工期很紧如果采用第三方SDK,并不希望系统绑死在该SDK上 问题结论:采用第三方SDK自定义甘特图绘制接口将SDK隔离 引入设计模式:适配器模式(Adapter)软件架构设计案例分析ClientAdaptee+SpecificRequest()AdapterTarget+Request()+adaptee 与技术相关的架构方案:软件架构设计案例分析展现层业务层ClientGanttChartGanttChartImpl第三方的甘特图绘制包PrgMgtModel 组成派和决策派软件架构概念并不矛盾,它们只不过是所站的角度不同罢了。在具体的软件架构设计实践中,总是同时体现着这两派的架构概念。总结谢 谢!