第9章 · 播客 第13集

软件架构设计 · 构件、产品线、DSSA、演化与视图类型收官

🎙️ 本集播客第13集·全章压轴:构件三定义与 CORBA/J2EE/DNA 三大商用标准、基于复用开发的三类部门;产品线与核心资产库、DSSA 的特征与活动阶段、架构演化七步;模块/C&C/分配三种视图类型与各风格;末附全章必背总清单并引出第 10 章设计模式——练习题第十四题原产地。 语音由微软 Edge 神经网络语音预生成(女声·晓伊,男声·云希)。点击下方任意对话可直接从该句开始播,当前句朗读时下一句已预先加载,无缝衔接。
🎙️ 第9章播客 第13集
⬇ 下载本集 点击播放
阿明
师姐,最后一集了,内容还剩几大块?
小雅
三块加收尾:构件与商用标准、产品线与 DSSA 和演化、视图类型,然后全章总背。先构件。业界对构件还没有公认的定义,原文给三个:定义 1,构件是指软件系统中可以明确辨识的构成成分,而可复用构件是指具有相对独立的功能和可复用价值的构件;定义 2,构件是一个组装单元,它具有约定式规范的接口及明确的依赖环境;定义 3,构件是软件系统中具有相对独立功能、可以明确辨识、接口由契约指定、和语境有明显依赖关系、可独立部署的可组装软件实体。对构件更广义的理解是把所有种类的工作成品,例如各类文档、方案、计划、测试案例、代码,都看成是可复用的构件。
小雅
主流的商用构件标准规范包括三个:OMG 对象管理组织的 CORBA、SUN 的 J2EE 和 Microsoft 的 DNA。CORBA 即公共对象请求代理架构,主要分为 3 个层次:最底层的对象请求代理 ORB,规定了分布对象的定义即接口和语言映射,实现对象间的通信和互操作,是分布对象系统中的「软总线」;ORB 之上定义了很多公共服务,可以提供并发服务、名字服务、事务(交易)服务、安全服务等;最上层的公共设施则定义了构件框架,提供可直接为业务对象使用的服务。这个三层「软总线」的比喻要记。
阿明
CORBA 三层是对象请求代理、公共对象服务、公共设施,ORB 是软总线。J2EE 呢?
小雅
J2EE 里 SUN 给出了完整的基于 Java 语言开发面向企业分布的应用规范,分布式互操作协议上同时支持 RMI 远程方法调用和 IIOP 互联网内部对象请求代理协议,服务器端分布式应用的构造形式包括 Java Servlet、JSP、EJB 等。EJB 给出了系统的服务器端分布构件规范,EJB 是业务逻辑层的中间件技术,与 JavaBeans 不同,它提供了事务处理的能力;EJB 中的 Bean 可以分为会话 Bean 和实体 Bean,前者维护会话,后者处理事务。
小雅
DNA 2000 是 Microsoft 在 Windows 2000 系列操作系统平台基础上发布的分布计算架构和规范,服务器端提供 ASP、COM、Cluster 等应用支持;DCOM/COM/COM+ 的构件仍然采用普通的 COM 模型,COM 最初作为 Microsoft 桌面系统的构件技术,主要为本地 OLE 应用服务,DCOM 即分布式构件对象模型发布后,构件技术延伸到了分布应用领域。
小雅
构件复用方面记三个概念。应用系统簇:通常在应用系统簇中进行软件构件复用,先按复用的要求界定一组应用系统的共同「特性」,建立模型并分解成恰当规模和结构的构件,形成可复用构件。构件系统:软件企业将相关的构件有机地组织在一起形成构件系统,较构件库层次更高,构件系统具有通用性、可复用性,只在开发单位内部使用,而应用系统提供给外部客户。
小雅
基于复用开发的组织结构有三类职能部门:构件系统开发部门,开发可复用资产;应用系统项目开发部即多个,复用资产;支持部门,是可选的,对可复用资产进行确认、对构件库分类编目、发通告分发资产、提供文档、收集反馈,相当于企业内的推广部。三个平行部门之上有一个高层经理即复用经理,关注总目标、协调相互关系、在构件开发和应用项目开发利益之间权衡。
小雅
然后产品线。软件产品线是指一组软件密集型系统,它们共享一个公共的、可管理的特性集,满足某个特定市场或任务的具体需要,是以规定的方式用公共的核心资产集成开发出来的。核心资产库包括软件架构及其可剪裁的元素,更广泛地还包括设计方案及其文档、用户手册、项目管理的历史记录如预算和进度、软件测试计划和测试用例。可复用的资产原文列了十种,我点名:需求、架构设计、元素、建模与分析、测试、项目规划、过程方法和工具、人员、样本系统、缺陷消除。
小雅
产品线架构较之单个产品架构有三点特别之处:必须考虑一系列明确许可的变化;一定要文档化;必须提供「产品创建者指南」即开发指南,描述架构的实例化过程。开发或确定产品线的方法有两种模型:前瞻性产品线,利用在应用领域的经验、对市场和技术发展趋势的了解及商业判断力等进行产品线设计,反映企业的战略决策,通常自上而下;反应性模型,企业根据以前的产品构建产品家族并随着新产品的开发扩展架构和方案,核心资产库是根据「已经证明」为共有、而非「预先计划」为共有的元素构建的,通常自下而上。
小雅
接着 DSSA,特定领域软件架构,Domain Specific Software Architecture,练习题第十四题在这里。架构的本质在于其抽象性,包括业务抽象和技术抽象,业务抽象面向特定的应用领域。DSSA 可以看做开发产品线的一个方法或理论,目标就是支持在一个特定领域中有多个应用的生成。必备特征四条:一个严格定义的问题域或解决域;具有普遍性,使其可以用于领域中某个特定应用的开发;对整个领域的合适程度的抽象;具备该领域固定的、典型的在开发过程中的可复用元素。
小雅
领域的含义从功能覆盖范围角度有两种方法:垂直域,定义了一个特定的系统族,导出在该领域中可作为系统的可行解决方案的一个通用软件架构;水平域,定义了在多个系统和多个系统族中功能区域的共有部分,在子系统级上涵盖多个系统族的特定部分功能。DSSA 的活动阶段三个:领域分析,主要目标是获得领域模型,通过分析领域中系统的需求,确定哪些需求被领域中的系统广泛共享;领域设计,目标是获得 DSSA,它是能够适应领域多个系统需求的一个高层次的设计,通过表示多选一的、可选的解决方案等来做到变化性;领域实现,依据领域模型和 DSSA 开发与组织可复用信息,可以看作复用基础设施的实现阶段。练习题第十四题问「不包括」,答案是领域测试——三个阶段里没有测试。
阿明
领域分析得领域模型、领域设计得 DSSA、领域实现得可复用信息,没有领域测试。还有个数字细节呢?
小雅
有:获得领域模型是基础也是关键,通常领域模型可用 UML 的类图和状态图表示;对于中等复杂度的项目,应该在系统的领域模型中找到大约 50 到 100 个类。领域模型的主要作用六条我点三条高频的:为需求定义了领域知识和领域词汇;领域模型的合理性将严重影响软件系统的可扩展性;是团队交流的基础,规定了重要的领域词汇表。
小雅
然后架构及系统演化,定义先记:架构虽然为系统的变化提供了一定的自由度,但系统的较大变化必然导致架构的改变;架构(系统)演化是指向既定的方向、可控地改变;架构(系统)演化可以形成产品线,反过来也可以在规划的产品线中进行演化。演化过程包含 7 个步骤:需求变动归类,对用户需求的变化进行归类,使变化的需求与已有构件对应;制订架构演化计划;
小雅
修改、增加或删除构件,并对修改和增加的构件进行功能性测试;更新构件的相互作用,构件之间的控制流必须得到更新;构件组装与测试,通过组装支持工具把构件组装起来形成新的架构,对整体功能和性能进行测试;技术评审,确认组装后的架构是否反映需求变动,如果不符合则在第二步到第六步之间迭代;产生演化后的架构,把所有修改集成到原来的架构中完成一次演化。
小雅
最后一块,9.11 软件架构视图。先分两个词:结构是元素本身的集合,视图则是捕获和表达结构即文档描述,实际使用时不严格区分。软件视图通常分为三种类型:模块视图类型,为系统的主要模块实现单元编档,完整架构文档必须包含模块视图,它为源代码提供蓝图,风格有分解、使用、分层、泛化四种——分层风格能帮助实现可移植性和可修改性,泛化风格广泛应用于面向对象系统、能展示继承性;
小雅
构件和连接件视图类型即 C&C 视图类型,为系统的构件和连接件执行单元编档,元素包括进程、对象、客户机、服务器及数据存储器等,风格有管道和过滤器、共享数据、发布-订阅、客户机-服务器、对等连接、通信-进程六种——注意发布-订阅风格可以在不修改生产者的情况下添加新的接受者,对等连接系统是一种调用/返回风格;分配视图类型,为软件的开发和执行环境之间的关系编档,三种风格为部署风格即构件连接件对硬件的映射、实现风格即模块对文件系统的映射、工作任务风格即模块对人员团队小组的映射。
阿明
三种视图类型的映射关系也说一下吧。
小雅
三条:模块视图类型的视图通常会映射到构件和连接件视图类型的视图,模块实现单元将映射到运行时构件;系统 C&C 视图和模块视图之间的关系可能会非常复杂,同样的代码模块可由 C&C 视图的许多元素执行,C&C 视图的单一构件也可执行由许多模块定义的代码;分配视图类型是辅助性视图,将其他视图类型中的软件元素映射到软件环境中。
阿明
第 9 章到这就全讲完了。师姐,全章必背总清单,你来压轴吧。
小雅
好,分六条主线背。第一,概念与模型:演化史五段配对;三定义,IEEE1471-2000 出定义 3;架构重要性四方面;六个子过程是需求、设计、文档化、评审、实现、演化;五种模型最常用结构模型和动态模型;4+1 是 Kruchten 1995,逻辑加开发静态、进程加物理动态、场景是纽带,没有数据视图。
小雅
第二,质量属性与战术:GB/T16260 六特性全套子特性;运行期七项、开发期六项;架构关注点六属性;场景六元组刺激源、刺激、环境、制品、响应、响应度量;战术是实现质量属性的基本设计决策、集合叫架构策略;六大属性战术分类名——可用性检测恢复预防、可修改性局部化防连锁推迟绑定、性能需求管理仲裁、安全性抵抗检测恢复、可测试性输入输出和内部监控、易用性运行时设计时支持主动操作;心跳属错误检测。
小雅
第三,架构风格:Garlan 和 Shaw 五大类十子风格——数据流是批处理序列和管道过滤器、调用返回是主程序子程序面向对象层次结构、独立构件是进程通信和事件系统、虚拟机是解释器和基于规则的系统、仓库是数据库超文本黑板;管道过滤器属数据流、例子 UNIX 和编译器;层次结构最多影响相邻上下层;黑板三组成知识源、黑板数据结构、控制,出自 HEARSAY-II。
小雅
第四,实战风格:二层 C/S 四大局限;三层是表示层功能层数据层;B/S 零客户端加三不足;MVC 是 Reenskau 1979,Model 封装应用状态和业务功能、状态改变通知 View;MVP 中 View 不直接使用 Model、通信通过 Presenter、Presenter 依赖 IView。
小雅
第五,SOA 与微服务:三定义、五原则、服务构件与传统构件四区别;UDDI 管发布查找定位、WSDL 管描述、SOAP 消息必须 Envelope 加 Body、REST 五准则只用 HTTP 和 XML;实现三主流 Web Service、服务注册表、ESB;微服务核心四特点,要避免统一的集中式服务管理。第六,方法与评估:ADD 输入三件、步骤三步;编档七规则、视图编档七部分;架构重构四活动,SEI 的 Dali;
小雅
评估三方式;ATAM 由 Kazman 2000 提出、九步、效用树不超过 50 个场景、优先级对 H/M/L;CBAM 在 ATAM 上构建、八步、按 ROI 选策略;构件标准 CORBA、J2EE、DNA;产品线前瞻性自上而下、反应性自下而上;DSSA 活动阶段是领域分析、领域设计、领域实现,没有领域测试,领域模型约 50 到 100 个类;演化七步;视图三类型模块、构件连接件、分配。
阿明
六条主线全齐了。这十七章……不对,十七集听下来,第 9 章从概念到评估整个闭环我都过了一遍,练习题十五道每一道的落点我都能指出来了。
小雅
那就去做题验收,错哪道回哪集重听。下一章是第 10 章设计模式——你在 MVC、MVP 里已经见过「模式」这个词了,那边把模式的三大类二十三个 GoF 模式一个一个过,跟本章的风格一脉相承,架构管大楼、模式管房间,我们下一章见。