文章目录

  • 软件架构风格描述
  • 数据流风格
    • 批处理风格
    • 管道过滤器风格
  • 调用返回风格
    • 主子程序风格
    • 面向对象(显式调用风格)
    • `层次结构`风格
  • 独立构件风格
    • 调用返回风格(隐式调用)
  • 虚拟机风格
    • 基于规则风格
    • 解释器风格
  • 仓库风格
    • 数据库风格
    • 黑板系统
  • 浏览器风格
    • 两层CS架构
    • 三层CS架构
    • 三层BS架构
    • `混合架构`
  • 其他风格
    • C2风格

软件架构风格描述

软件架构风格是描述某一特定领域内系统组织方式的惯用模式,它包括一个词汇表和一组约束.词汇表包扩一些构件和连接件的类型.而约束描述了系统是如何将这些构件和连接件组合到一起的.软件架构风格反映了特定领域内的系统共有的结构和语义,并指导系统如果将子系统和构件有效的连接在一起.
以下红色只为个人备忘,不代表知识点重要程度

数据流风格

批处理风格

由一组固定顺序的构件连接在一起组成
每个构件的开始必须在上一个构件的结束后开始。构件间交互的数据必须时完整的。

管道过滤器风格

构件有一个输入流、一个输出流。构件根据输入流进行内部处理,产生输出流,构件即过滤器。构件的连接件即为管道,负责把一个过滤器的输出传给另一个过滤器的输入
优点:
构件间具有良好的隐蔽性和低耦合性;
支持软件重用只需要确定构件间交互的数据格式,即可将任何两个构件连接在一起;
可扩展性强,添加新的构件,可修改性强,更换构件不会对其他构件和整体架构造成影响;
支持并行处理,每个过滤器可作为单独任务完成;
缺点:
难以定义过滤器间数据通信的统一标准;

调用返回风格

主子程序风格

单线程控制,把问题分成若干处理步骤主程序根据自身需要,选择子程序进行调用。

面向对象(显式调用风格)

将构件间交互的数据的表示形式及其操作封装成对象,即构件。构件间的过程调用或函数即连接件。
优点:
对象具有的封装性,修改一个对象不会对其他对象照成影响;
一个构件如果想要调用另一个构件,只需要知道另一个构件的标识即可。
缺点:
一但一个构件的标识发生变化,那么所有调用这个对象的构件都要发生变化;
如果A调用了C,B也调用了C,那么A对C的影响对B是不可预计的;

层次结构风格

每一层即为构件,层与层间的通讯即为连接件。每一层负责调用下一层的功能,并向上一层提供功能。每一层只可见其相邻的两个层次;
优点:
把一个复杂的问题分成增量步骤去解决,降低问题复杂度,逐个击破
具有良好的低耦合特性,每一层的变动仅对其相邻的层次照成影响;扩展性,添加新的层次简单;
缺点:过多的层次调用影响响应效率

独立构件风格

调用返回风格(隐式调用)

构件不直接调用构件的过程,而是触发一个事件或触发多个事件.系统中其他构件的过程在一个或多个构件中注册,当一个事件触发时,所有在该事件中进行注册的构件的过程都将被调用;
优点:
低耦合性,每个构件不直接关联到一起,二十通过注册的方式关联;
可复用性强,一个构件的过程可以被多个事件调用,只需要在事件中进行注册;
可扩展性强,新增一个构件时只需要把它注册在相关的事件中,替换一个构件时不会对其他构件或整体系统照成影响;
缺点:
一个事件触发后,其无法知晓其中注册的构件的过程是否成功执行;
即使知道一个事件中注册了哪些构件的过程,但其调用过程的顺序不可保证

虚拟机风格

基于规则风格

用于专家系统

解释器风格

完成解释工作的解释引擎,待解释代码的储存区,记录当前解释器解释状态的数据结构,记录源代码被解释进度的数据结构来屏蔽来自操作系统,数据等外部环境的差异,建立解释规则
优点:
缺点:
效率低

仓库风格

数据库风格

说明当前系统数据状态的中央数据结构,在中央数据结构上执行的构件
输入流中的某个事件触发进程的选择

黑板系统

说明系统数据状态的中央数据结构,在中央数据结构上运行的构件
中央数据结构的当前状态触发进程选择

浏览器风格

两层CS架构

胖客户端. 表示层- 数据层
缺点:
开发成本高,要开发客户端,客户端设计复杂;
软件移植困难;
客户端冗余业务,不利于维护,修改扩展时很麻烦;
优点:
响应效率会比BC略高,因为客户端负责了部分的运算;
网络负载小,一般都在内部局域网;
安全性高,不涉及互联网传输;

三层CS架构

瘦客户端. 表示层 - 功能层 - 数据层
对两层CS架构中,客户端和服务器端的均存在的功能层进行了提取

三层BS架构

0客户端. 浏览器 - web服务器
使用通用的浏览器和www访问Web服务器的方式进行交互.
优点:可扩展性强,浏览器不冗余业务.
缺点:
安全性不如CS(通过信息安全策略弥补);
对动态页面的支持不足(通过jsp css等弥补);
以页面为提交单位(通过ajax弥补)

混合架构

内外有别:
内部管理体系健全,客户端可维护且客户端数量校验,可采用CS;
外部分布区域广,免去客户端维护,可扩展性号;
查改有别:

其他风格

C2风格

每个构件都一个顶部和底部.每个构件可以和任何其他构件连接. 每个构件的顶部只能连接在另一个构件的底部.

系统架构设计师 - 软件架构设计 - 软件架构风格相关推荐

  1. 系统架构设计师的设计工作和需求

    系统架构设计师是产品经理的天花板,也是软考高级证书,系统架构设计师,并且还能够入选省专家人才库,成为副主任工程师,在实际落地项目中,要求就跟软考有些区别,但是需要落地,我就在这里介绍下架构师的能力和水 ...

  2. 【系统架构设计师】软考高级职称,一次通过,2017年下半年系统架构设计师考试论文真题(论软件架构风格)

    [系统架构设计师]软考高级职称,一次通过,倾尽所有,看完这篇就够了,学习方法和技巧这里全都有. 2017年下半年系统架构设计师考试论文真题(论软件架构风格) 论文:2017年第2题(论文题)论软件架构 ...

  3. 【系统架构设计师】软考高级职称,一次通过,倾尽所有,看完这篇就够了,论软件架构设计的重要性、本篇论文“未通过考试”,供分析参考

    [系统架构设计师]软考高级职称,一次通过,倾尽所有,看完这篇就够了,学习方法和技巧这里全都有. 论软件架构设计的重要性.本篇论文未通过考试(不合格),供分析参考. 目录 摘要 正文 结尾 摘要 201 ...

  4. 软考高级系统架构设计师:特定领域软件架构

    软考高级系统架构设计师:特定领域软件架构 一.4+1视图 二.软件系统在特定领域重用DSSA 三.特定领域软件架构创建步骤 1.定义领域范围 2.定义领域特定元素 3.定义领域特定的设计和实现需求约束 ...

  5. 软考高级系统架构设计师系列论文一:论软件架构的选择与应用

    软考高级系统架构设计师系列论文一:论软件架构的选择与应用 一.摘要 二.正文 1.项目概述 2.架构设计 三.总结 一.摘要 公司承担了某省社会保险管理信息系统的开发工作,我在该项目中担任系统架构设计 ...

  6. 系统架构设计师-软件水平考试(高级)-论文-架构风格

    系统架构设计师-论文-架构风格 前言: 这三个月由于工作等方面的事情,所以没有更新博客. 其实我是有做许多总结的.但是写博客,就需要整理格式,好麻烦啊.... 不过接下来,我会慢慢整理出来的,包括ja ...

  7. 系统架构师论文-论软件架构的选择与应用

    论软件架构的选择与应用 [摘要] 2006年5月,我所在的公司承担了某省社会保险管理信息系统的开发工作,我在该项目中担任系统架构设计师职务,主要负责设计应用系统架构和网络安全体系架构.该系统以IC卡为 ...

  8. 软考高级系统架构设计师:Web架构设计

    软考高级系统架构设计师:Web架构设计 一.Web架构设计 二.负载均衡技术 1.应用层负载均衡 2.传输层负载均衡 三.有状态与无状态 四.数据库读写分离化 五.缓存技术 六.CDN内容分发网络 七 ...

  9. 【软考系统架构设计师】复盘架构设计师真题知识点第八章---Web架构设计

    [软考系统架构设计师]复盘架构设计师真题知识点第八章-Web架构设计 复盘架构设计师真题知识点第八章---Web架构设计 [软考系统架构设计师]复盘架构设计师真题知识点第八章---Web架构设计 前言 ...

  10. 软考高级系统架构设计师:响应式Web设计和主从复制机制的好处

    软考高级系统架构设计师:响应式Web设计和主从复制机制的好处 一.响应式Web设计 二.主动复制机制的好处 一.响应式Web设计 响应式Web设计目的是让内容布局能随用户使用的显示器不同而变化. 两个 ...

最新文章

  1. 在Ubuntu 14.04 64bit上搭建单机本地节点Spark 1.3.0环境
  2. Collection集合的三种初始化方法
  3. 【Android 安全】DEX 加密 ( 代理 Application 开发 | 加载 dex 文件 | 将系统的 dexElements 与 应用的 dexElements 合并 | 替换操作 )
  4. mysqldump重叠备份带来的锁表问题
  5. python 检测exe是否未响应_第002篇:Python的安装
  6. 如何评审功能测试用例?
  7. zookeeper运维管理
  8. java steam 去重_Java中对List去重, Stream去重
  9. 小程序开发(2)-之app.js、app.wxss、project.config.json说明
  10. Sharepoint 2013默认dll部署位置
  11. layui弹窗自适应变大_layui弹窗宽度固定高度自适应界面
  12. 基于项目管理的软件产品研发管理研究
  13. php 批量修改表格数据,PHP批量修改数据库表前缀教程+代码
  14. 第 4 章 terminal
  15. python mongodb_python实现mongodb的增删改查
  16. PHP7实战开发简单CMS内容管理系统(3) 引入后台首页
  17. 【代码审计】代码安全测试的方法
  18. 网站性能优化的10种方法
  19. 如何安装perl模块
  20. 苹果电脑忘记开机密码怎么办?一段代码轻松解决

热门文章

  1. oc 画一个圆弧_用SolidWorks画的塑料衣架,要用到不少让人头疼的曲线
  2. javaWeb回忆思维导图
  3. 如何构建流量无损的在线应用架构 | 专题开篇
  4. 10问10答:你真的了解线程池吗?
  5. 中台,很多人理解的都不对
  6. 肖修鹏:十年磨一剑,成就靠谱职业经理人
  7. 使用NAT网关轻松为单台云服务器设置多个公网IP
  8. AliOS Things KV组件的写平衡特性 1
  9. 探索交通治理新思路,广州黄埔智能交通治“堵”
  10. 万字长文!Unix和Linux你不知道的那些历史(详解版)