软件体系结构-11_SA_selection_and_case_study
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
体系结构风格的选择
体系结构风格的选择次序
绝大多数实际运行的系统都是几种体系结构的复合:
– 在系统的某些部分采用一种体系结构而在其他的部分采用另外的体系,故而 需要将复合几种基本体系结构组合起来形成复合体系结构。 – 在实际的系统分析和设计中,首先将整个系统作为一个功能体进行分析和权 衡,得到适宜的、最上层的体系结构;
Solution 1:主程序-子过程体系结构
主程序
子过程
共享数据结构
体系结构风格的选择
过程算法
首先调用input函数来读取和解析输入文件并将其写在chars_和 line_index_数组中 然后调用circularShift函数,产生移位结果并写入circular_shifts_数组中 然后调用alphabetize函数对其进行排序,结果写入alphabetized_数组中 最后调用output函数,输出结果
A third way for styles to be combined is to combined is to be elaborate one level of for styles to A third way is to be combined level of elaborate one of elaborate one level one level of elaborate styles to A third way for third way for styles to A to A third way for styles to be combined is way for styles to A third
– 如果每个阶段是递增的,从而后序可在前序完成之前开始,那么就要使用管 道-过滤器风格 – 如果问题涉及到连续数据流上的转换,考虑使用管道-过滤器风格
体系结构风格的选择
经验法则(2)
如果核心问题是应用程序中数据的理解、管理与表示,那么考虑使用 仓库或者ADT/OO风格
如果数据格式的表示可能发生变化,ADT/OO可限制这种变化所影响 的范围 如果数据是持久存在的,使用仓库结构
Input(输入)
Circular shifts(循环移位)
Output(输出)
体系结构风格的选择
KWIC use case
User
User
Provides Input 提供输入 <uses> <uses>
Views Output 产生输出 <uses>
Generate Circular Shift 产生循环移位
Solution 3: 隐式调用
体系结构风格的选择
–可修改性
• 算法的变化
• 数据表示方式的变化 • 系统功能的可扩展性
–性能: •时空复杂性
–可复用性
软件体系结构及应用
基于经验的SA风格选择原则
体系结构风格的选择
经验法则(1)
层次化的思想在任何系统中都可能得到应用;
如果问题可分解为连续的几个阶段,那么考虑使用顺序批处理风格或 管道-过滤器风格
– 如果使用仓库风格且输入数据是无序的、执行次序无法预先确定,使用黑板 结构 – 如果使用仓库风格且执行次序由请求来决定、数据是高度结构化的,适用数 据库风格
• 如果系统存在很多异构的数据源,考虑使用联邦数据库风格; • 如果追求数据存取的性能,考虑使用分布式数据库风格。
体系结构风格的选择
经验法则(3)
如果任务之间的控制流可预先设定、无须配置,那么考虑使用主程序子过程风格、OO风格 如果任务需要高度的灵活性与可配置性、松散耦合性,或者任务是被 动性的,那么考虑使用事件系统或C/S风格
– 如果任务的产生者与接收者之间不能预先绑定在一起,使用基于事件的风格 – 如果任务分为生产者与消费者,考虑C/S风格
体系结构风格的选择
Solution 1:主程序-子过程体系结构
Advantages:
–模块之间的数据共享 –不同的计算功能被隔离在不同的模块中
Disadvantages:
–对数据存储格式的变化将会影响几乎所有的模块 –对处理流程的改变与系统功能的增强也很难适应,依赖于控制模块内部的调用次序 –这种分解也难以支持有效的复用
软件体系结构及应用
Solution 2: 抽象数据类型
体系结构风格的选择
Solution 2:抽象数据类型
技术发展:
– 面向过程的结构化编程 面向对象的编程
采用OO的思想,数据和作用在数据上的读写操作被封装为对象,主 程序调用这些对象,形成控制流程;
–数据不再被构件直接共享,而是被封装在了对象中 –每个对象提供了一个接口,允许其他对象通过该接口调用对该对象内封装的数据的操作
Sort Output 排序
体系结构风格的选择
KWIC: 非功能性需求
可修改性
–处理算法的变化ຫໍສະໝຸດ Baidu
• 批处理 vs. 渐增式
–数据表示方式的变化
• 行存储, 显式 vs. 隐式变化
–系统功能的可扩展性
• e.g., 从数据库或从UI输入行 • e.g., 对初始行从删除,修改或增加操作
性能
–时空复杂性
体系结构风格的选择
A case for KWIC
A third way for styles to third way for styles to A way for styles to A third for styles to A third way styles to A third way for to A third way for styles A third way for styles to be combined is to elaborate one level of be combined is to combined is to be is to be combined to be combined is elaborate one level of one level of elaborate level of elaborate one of elaborate one level
体系结构风格的选择
Solution 2: Abstract Data Types
Advantages:
–某一构件的算法与数据结构的修改不会影响其他构件
–构件之间依赖性降低,提高了复用度
Disadvantages:
–不适合功能的扩展
–为了增加新功能,要么修改已有的模块,要么就加入新的模块
软件体系结构及应用
• • • • 如果追求客户端的计算效率,考虑胖客户端的C/S风格 如果客户端频繁发生变化,考虑瘦客户端的C/S风格(或B/S风格) 如果服务器端的计算压力过大,考虑使用服务器的集群风格 如果无须中央服务器,使用点对点(P2P)风格
体系结构风格的选择
基于经验的SA风格选择
经验很重要,没有不行; 经验的随意性很大,很难科学地评价各种经验的正确性; 没经过高度概括和总结的经验需要后来者花费很长的时间和精力才能 继承,甚至可能失传; 经验经常限制创新。
– 如果该体系结构中的元素较为复杂,可以继续进行分解,得到某一部分的局 部体系结构。
将焦点集中在系统的总体结构的考虑上,而避免较多的考虑使用的语 言、具体的技术等实现细节上。
体系结构风格的选择
风格选择的基本思想:由粗到细的分解
基本的分析方法:功能和复杂 性的分解
– 横向分解:分层次 – 纵向分解:子系统、模块 – 针对每一个分解后得到的模块, 根据该问题领域的特性,选择行 为模式 (具体的体系结构风格) – 构件、连接件设计 ——从大粒度风格入手,逐渐细化
2 纵向划分
1 横 向 分 层
3 体系结构风格 (行为模式)选择
4 构件-连接件划分
体系结构风格的选择
SA风格选择需考虑的因素
技术因素:
– (1) 何种构件、连接件 – (2) 在运行时,构件之间的控制机制是如何 被共享、分配和转移 – (3) 数据如何通讯 – (4) 数据与控制如何交互
性能因素:
系统构件的可复用性
–在何种程度上可以作为可重用的组件实体
体系结构风格的选择
KWIC 解决方案
Solution 1: 带有共享数据的主程序-子过程体系结构
Solution 2: 抽象数据类型风格
Solution 3: 隐式调用风格
Solution 4: 管道-过滤器风格
软件体系结构及应用
Solution 1:带有共享数据的主程序子过程体系结构
体系结构风格的选择
Sequence Diagram: System Dynamics
主控制 程序 ―输入” “输出” ―排序” ―循环 “行数据 对象 对象 对象 移位” 存储” 对象 对象
体系结构风格的选择
Class KWIC
//主对象KWIC构造五个对象实例 LineStorage lines = new LineStorage(); Input input = new Input(); CircularShifter shifter = new CircularShifter(); Alphabetizer alphabetizer = new Alphabetizer(); Output output = new Output(); //然后分别调用这五个对象实例的某些方法 input.parse(file, lines); shifter.setup(lines); alphabetizer.alpha(shifter); output.print(alphabetizer);
…发挥想象力,创造新的体系结构风格
软件体系结构及应用
案例分析 Key Word in Context (KWIC)
体系结构风格的选择
KWIC: Functional Requirements
The KWIC index system (KWIC索引系统)
–接受一些行
–每行有若干词
–每个词由若干字符组成 –每行都可以循环移位。重复地把第一个词删除,然后接到行末 – KWIC把所有行的各种移位情况按照字母表顺序输出
体系结构风格的选择
Solution 1:主程序-子过程体系结构
采用“主程序-子过程”风格、对系统进行功能分解,是最自然的想法, 也是“面向过程的编程” 的主要思路。
–分为四个基本功能:输入、移位、排序、输出
–主程序按次序调用这四个模块
–通过共享的数据存储和无约束的读-写协议在模块之间进行数据交换
体系结构风格的选择
软件体系结构及应用
体系结构风格选择方法
体系结构风格的选择
目前最常见的体系结构: 分层+OO
我们已经学习过了十余种体系结构风格; 简单的判断某一个具体的应用应该采取何种体系结构是非常困难的, 需要借助于丰富的经验。 从目前的趋势来看:
– 管道-过滤器风格、批处理风格已经非常少见; – 过程控制风格、黑板结构、虚拟机风格往往针对具体的应用领域; – OO的思想已经融合在几乎所有的体系结构之中,而事件风格、层次化的思 想同样也被广泛使用; – MVC、基于规则的系统、B/S、数据库风格也是经常使用的风格。
软件体系结构及应用
软件体系结构及应用 体系结构风格的选择
体系结构风格的选择
主要内容
体系结构风格选择方法 体系结构风格选择的案例分析:上下文关键词索引系统(KWIC)
– Solution 1: 带有共享数据的主程序-子过程体系结构 – Solution 2: 抽象数据类型风格 – Solution 3: 隐式调用风格 – Solution 4: 管道-过滤器风格
Output object (负责打印输出排序后的数据) Master control object (主控制对象:负责控制其他各对象中方法的 调用次序)
体系结构风格的选择
主控制程序
―输入”对象
―输出”对象
“排序”对象 “循环移位”对象
Class Diagram: System Statics
―行数据存储” 对象
体系结构风格的选择
Solution 2:抽象数据类型
体系结构风格的选择
Solution 2:抽象数据类型
LineStorage object (存储和处理字符、单词、行) Input object (负责从输入文件中读取数据并将其存储在LineStorage对 象中)
CircularShifter object (负责对LineStorage对象中存储的数据进行循 环移位) Alphabetizer object (负责对循环移位后得到的数据进行排序)