体系结构设计风格

一、常用的软件体系结构风格

数据流风格:批处理和管道/过滤器
调用/返回风格:主程序/子程序、层次结构,客户机/服务器,面向对象风格
独立部件风格:进程通讯、事件驱动
虚拟机风格:解释器、基于规则的系统
数据共享风格:数据库系统、黑板系统

空间效率:存储库>管道-过滤器>隐式调用

二、管道-过滤器风格(Pipe-Filter Style)

风格项 描述
设计决策与约束 保证过滤器的独立性,不能共享任何状态、数据,运行
模块描述 每个过滤器部件实现为一个单独的模块, 简单的管道连接件建立通用模块 , 复杂的管道连接件建立一个单独的模块
优点 可复用性、内部可修改性、可扩展性、高性能、支持特定分析(吞吐量、死锁检测)
缺点 弱控制性、弱交互性;空间效率差;性能浪费、错误处理能力弱
应用 传统的编译器、Unix shell编程、信号处理、批处理 (ATM机、汽车牌照识别系统等流水线系统)
不适用于 不能容忍错误的系统,不允许重新启动的系统,交互式应用系统
变体 流水线

三、主程序/子程序风格(Main Program/Subroutine Style)

风格项 描述
设计决策与约束 不允许逆方向调用、单线程执行、从上层获得控制权,执行完成后控制权还给上层,执行中控制权可以下传
模块描述 每个子程序实现为一个模块,主程序为起始模块
优点 流程清晰,易于理解;强控制性
缺点 程序调用的强耦合使得系统难以修改和复用, 限制了部件之间的数据交互,可能会产生公共耦合
应用 功能分解多个顺序执行的系统, 编程语言没有模块化支持的系统, 结构化方法建立的系统

四、面向对象式风格

风格项 描述
设计决策与约束 用信息内聚标准建立对象部件、 基于方法调用建立连接件、不同对象之间平等,没有主从、从属、层次关系
模块描述 每个对象部件实现为一个模块
优点 内部实现的可修改性。易开发、易理解、易复用的结构组织
缺点 接口的耦合性、标识的耦合性、 面向对象的副作用
应用 能够基于数据信息分解和组织的软件系统,基于抽象数据类型建立的软件系统

五、分层

风格项 描述
设计决策与约束 基于程序调用建立连接件,禁止跨层次连接、禁止逆向连接
模块描述 每个层次部件表示为一个包,内部还有所有实现模块
优点 设计清晰、易于理解,支持并行开发,可复用性、内部可修改性
缺点 交互协议难以修改、性能损失(禁止跨层)、难以确定层次数量和粒度
应用 并行开发的系统,不同抽象层次上进行任务分解的系统,能够容许延迟的系统,网络通信、交互系统、硬件控制系统、系统平台
变体 松散分层系统(系统性能比可修改性更重要,例如:Unix操作系统)

六、隐式调用(发布-订阅,基于事件、选择性)

风格项 描述
设计决策与约束 使用事件路由建立连接件; 多个部件可以声明同一个事件类型,事件广播有相同调用效果;多个部件可以注册同一事件,事件发生后同时被调用;不能假设事件对部件的影响;部件不能假设对事件的处理顺序,也不能假设事件的处理结果
模块描述 部件实例实现为模块,事件路由借助程序运行环境提供的支撑模块
优点 可复用性、可修改性、高性能(多进程并发执行)
缺点 弱控制性,难以测试和验证(不知道调用程序的上下文)
应用 以松散耦合部件为基础建立的软件系统,编译环境中的工具集成,数据管理系统中的一致性检查,图形化用户界面
变体 使用程序调用机制作为补充

七、存储库(数据为中心、共享数据风格)

风格项 描述
设计决策与约束 对系统的功能处理为一系列的知识源部件;对存储区的直接访问建立为连接件; 所有知识源相互独立,活动没有预先确定顺序; 知识源依赖于共享数据;知识源实时检查共享数据的状态,并在必要时做出合理的反应
模块描述 共享数据部件建立一个存储区、访问机制模块;每个知识源建立一个实现模块
优点 很好的空间效率,具有潜能的性能优势(进程实现时可多进程并发),知识源的可修改性、容错性和健壮性
缺点 共享数据的难修改性、共享数据的瓶颈性、弱控制性
应用 以建立、增强和维护一个复杂信息中心为主要问题的应用系统;数据库系统、现代的编译器
变体 黑板风格:由共享数据监控状态变化、并在需要时通知知识源、由知识源决定下一步行动(部件类型:知识源、共享数据、控制,连接件类型:数据访问、监控、事件通知)
应用 专家系统、集成开发环境、聊天室

八、MVC

风格项 描述
设计决策与约束 以程序调用为连接件; 视图只能使用数据查询,只有控制部件可以调用可能修改模型状态的程序
模块描述 为模型、师徒、控制的每个部件建立模块实现
优点 易开发性、视图和控制的可修改性、适宜于网络系统开发的特征
缺点 复杂性、模型修改困难、
应用 网络系统

九、客户端/服务器(C/S)

风格项 描述
设计决策与约束 服务器端有更高的资源要求、客户端有更多的用户交互;服务器端固定、客户端动态增减,各个客户端之间相互独立
模块描述 server、client、连接件被实现为socket连接或tcp/ip连接
优点 易开发、客户端的动态性
缺点 服务器难以调整、服务器瓶颈、不易更新
应用 网络系统
变体 1.浏览器/服务器(B/S) 2.三层 3. 端到端(P2P)每个参与者既是客户端又是服务器,网络交互机制比较复杂

你可能感兴趣的:(体系结构)