1. 系统设计概述

系统设计的目标是根据系统分析的结果,完成系统的构建过程。其主要目的是绘制系统的蓝图,权衡和比较各种技术和实施方法的利弊,合理分配各种资源,构建新系统的详细设计方案和相关模型,指导系统实施工作的顺利开展。

系统设计的主要内容包括概要设计和详细设计。概要设计又称为系统总体结构设计,主要任务是将系统的功能需求分配给软件模块,确定每个模块的功能和调用关系,形成软件的模块结构图,即系统结构图。

在概要设计中,将系统开发的总任务分解成许多个基本的、具体的任务,为每个具体任务选择适当的技术手段和处理方法的过程称为详细设计。详细设计又可分为多种,包括:

  • 网络设计
  • 代码设计
  • 输入/输出设计
  • 处理流程设计
  • 数据存储设计
  • 用户界面设计
  • 安全性和可靠胜设计

2. 结构化设计

2.1. 概述

结构化设计(Structured Design , SD)是一种面向数据流的方法,它以软件需求规格说明书(SRS)和结构化分析(SA)阶段所产生的数据流图和数据字典等文档为基础,是一个自顶向下、逐步求精和模块化的过程。

SD方法的基本思想是将软件设计成由相对独立且具有单一功能的模块组成的结构,分为概要设计和详细设计两个阶段,其中概要设计的主要任务是确定软件系统的结构,对系统进行模块划分,确定每个模块的功能、接口和模块之间的调用关系;详细设计的主要任务是为每个模块设计实现的细节。

2.2. 模块结构

系统是一个整体,它具有整体性的目标和功能,但这些目标和功能的实现又是由相互联系的各个组成部分共同工作的结果。人们在解决复杂问题时使用的一个很重要的原则,就是将它分解成多个小问题分别处理,在处理过程中,需要根据系统总体要求,协调各业务部门的关系。在SD中,这种功能分解就是将系统划分为模块,模块是组成系统的基本单位,它的特点是可以自由组合、分解和变换,系统中任何一个处理功能都可以看成一个模块。模块如下:

(1)信息隐蔽与抽象

信息隐蔽原则要求采用封装技术,将程序模块的实现细节(过程或数据)隐藏起来,对于不需要这些信息的其他模块来说是不能访问的,使模块接口尽量简单。

(2)模块化

在 SD方法中,系统由多个逻辑上相对独立的模块组成,在模块划分时需要遵循如下原则:

  • 模块的大小要适中
  • 模块的扇入和扇出要合理
  • 深度和宽度适当

(3)耦合

耦合表示模块之间联系的程度。紧密稠合表示模块之间联系非常强,松散稠合表示模块之间联系比较弱,非稠合则表示模块之间无任何联系,是完全独立的。模块的稠合类型通常分为七种,根据藕合度从低到高排序如下表所示。

(4)内聚

内聚表示模块内部各成分之间的联系程度,是从功能角度来度量模块内的联系,一个好的内聚模块应当恰好做目标单一的一件事情。模块的内聚类型通常也可以分为七种,根据内聚度从高到低的排序如下表所示。

(5)模块类型

在系统结构图中不能再分解的底层模块称为原子模块。如果一个系统的全部实际加工(数据计算或处理)都由底层的原子模块来完成,而其他所有非原子模块仅仅执行控制或协调功能,这样的系统就是完全因子分解的系统。如果SC是完全因子分解的,就是最好的系统。一般而言,在系统结构图(SC)中存在四种类型的模块如下图所示。

  • 传入模块:传入模块从下属模块中获取数据,经过某些处理,再将其传送给上级模块。
  • 传出模块:传出模块从上级模块中获取数据,进行某些处理,再将其传送给下属模块。
  • 变换模块:也称为加工模块,它从上级模块获取数据,进行特定的处理,然后转换成其他形式,再传送回上级模块。大多数计算模块(原子模块)都属于这一类。
  • 协调模块:协调模块是对所有下属模块进行协调和管理的模块。在系统的I/O部分或数据加工部分可以找到这样的模块,在一个好的系统结构图中,协调模块应在较高层出现。

2.3. 系统结构图(Structure Chart,SC)

系统结构图(Structure Chart,SC)又称为模块结构图,它是软件概要设计阶段的工具,反映系统的功能实现和模块之间的联系与通信,包括各模块之间的层次结构,即反映了系统的总体结构。

在系统分析阶段,系统分析师可以采用SA方法获取由DFD、数据字典和加工说明等组成的系统的逻辑模型;

在系统设计阶段,系统设计师可根据一些规则,从DFD中导出系统初始的SC。

2.3.1. SC的组成

SC包括以下四个部分:

  • 模块
  • 模块之间的调用关系
  • 模块之间的通信
  • 辅助控制符号

2.3.2. SC的类型

常用的SC主要有以下三种:

  • 变换型
  • 事务型
  • 混合型

3. 面向对象设计

面向对象设计(OOD)是面向对象分析(OOA)方法的延续,其基本思想包括抽象、封装和可扩展性,其中可扩展性主要通过继承和多态来实现。在OOD中,数据结构和在数据结构上定义的操作算法封装在一个对象之中。由于现实世界中的事物都可以抽象出对象的集合,所以OOD方法是一种更接近现实世界、更自然的系统设计方法。

3.1. 设计软件类

类封装了信息和行为,是面向对象的重要组成部分,它是具有相同属性、方法和关系的对象集合的总称。在系统中,每个类都具有一定的职责,职责是指类所担任的任务。一个类可以有多种职责,设计得好的类一般至少有一种职责,在定义类时,将类的职责分解为类的属性和方法,其中属性用于封装数据,方法用于封装行为。设计类是OOD中最重要的组成部分,也是最复杂和最耗时的部分。

在系统设计过程中,类可以分为三种类型,分别是实体类、控制类和边界类。

  • 实体类:实体类映射需求中的每个实体,实体类保存需要存储在永久存储体中的信息,例如,在线教育平台系统可以提取出学员类和课程类,它们都属于实体类。
  • 控制类:控制类是用于控制用例工作的类,一般是由动宾结构的短语(“动词+名词”或“名词+动词”)转化来的名词,例如,用例“身份验证”可以对应于一个控制类“身份验证器”,它提供了与身份验证相关的所有操作。
  • 边界类:边界类用于封装在用例内、外流动的信息或数据流。边界类位于系统与外界的交接处,包括所有窗体、报表、打印机和扫描仪等硬件的接口以及与其他系统的接口

3.2. 对象持久化与数据库

在面向对象开发方法中,对象只能存在于内存中,而内存不能永久保存数据,如果要永久保存对象的状态需要进行对象的持久化(persistence),对象持久化是把内存中的对象保存到数据库或可永久保存的存储设备中。

目前关系数据库仍旧是使用最为广泛的数据库如DB2,Oracle,SQL Servr等关系数据库。

随着对象持久化技术的发展,诞生了越来越多的持久化框架,目前,主流的持久化技术框架包括CMP, Hibernate, iBatis和JDO等。

3.3. 面向对象设计的基本过程

面向对象设计的基本过程如下图所示。

3.4. 面向对象设计的原则

  • 单一职责原则:设计目的单一的类
  • 开放-封闭原则:对扩展开放,对修改封闭
  • 李氏(Liskov)替换原则:子类可以替换父类
  • 依赖倒置原则:要依赖于抽象,而不是具体实现;针对接口编程,不要针对实现编程
  • 接口隔离原则:使用多个专门的接口比使用单一的总接口要好
  • 组合重用原则:要尽量使用组合,而不是继承关系达到重用目的
  • 迪米特(Demeter)原则(最少知识法则):一个对象应当对其他对象有尽可能少的了解

4. 设计模式

4.1. 设计模式概述

设计模式包含模式名称、问题、目的、解决方案、效果、实例代码和相关设计模式等基本要素,其中的关键元素包括以下四个方面:

(1)模式名称。给模式取一个助记名,用一两个词语来描述模式待解决的问题、解决方案和使用效果,以便更好地理解模式并方便开发人员之间的交流。

(2)问题。描述应该在何时使用模式,即在解决何种问题时可使用该模式。

(3)解决方案。描述设计的组成成分、它们之间的相互关系及各自的职责和楠刁乍方式。模式就像一个模板,可应用于多种不同场合,所以解决方案并不描述一个特定而具体的设计或实现,而是提供一个问题的抽象描述和具有一般意义的元素组合(类或对象组合)。

(4)效果。描述模式应用的效果以及使用模式时应权衡的问题,即模式的优缺点。

设计模式相关的概念:

架构模式:软件设计中的高层决策。例如C/S结构就属于架构模式,架构模式反映了开发软件系统过程中所作的基本设计决策。

设计模式:主要关注软件系统的设计,与具体的实现语言无关

惯用法:是最低层的模式,关注软件系统的设计与实现,实现时通过某种特定的程序设计语言来描述构件与构件之间的关系。每种编程语言都有它自己特定的模式,即语言的惯用法。例如引用-计数就是C++语言中的一种惯用法。

4.2. 设计模式的分类

根据目的和用途不同,设计模式可分为创建型(creational)模式、结构型(structural)模式和行为型(behavioral)模式三种。创建型模式主要用于创建对象,结构型模式主要用于处理类或对象的组合,行为型模式主要用于描述类或对象的交互以及职责的分配。

具体内容如下图所示:

(1)创建型模式

(2)结构型模式

(3)行为型模式

5. 人机界面设计

人机界面设计的内容如下图所示。

6. Web开发

Web开发相关技术如下:

从架构来看:MVC,MVP,MWM,REST,Webservice,微服务。

从缓存来看:MemCache, Redis, Squid。

从并发分流来看:集群(负载均衡)、CDN。

从数据库来看:主从库(主从复制),内存数据库,反规范化技术,NoSQL,分区(分表)技术,视图与物化视图。

从持久化来看:Hibernate,Mybatis。

从分布存储来看:Hadoop, FastDFS,区块链。

从数据编码看:XML,JSON。

从Web应用服务器来看:Apache,WebSphere,WebLogic,Tomcat,

JBOSS,IIS。

其它:静态化,有状态与无状态。响应式Web设计。

6.1. 负载均衡技术

  • 基于特定软件的负载均衡(HTTP重定向)(应用层)
  • 反向代理负载均衡(应用层)
  • 基于DNS的负载均衡(传输层)
  • 基于NAT的负载均衡(传输层)
  • 混合型负载均衡
  • 静态算法:轮转算法、加权轮转算法、源地址哈希散列算法、目标地址哈希散列算法、随机算法
  • 动态算法:最小连接数算法、加权最小连接数算法、加权百分比算法
  • 硬件负载均衡:F5
  • 软件负载均衡:LVS、Nginx、HAproxy

6.1.1. 应用层负载均衡

1、HTTP重定向。HTTP重定向就是应用层的请求转发。用户的请求其实已经到了HTTP重定向负载均衡服务器,服务器根据算法要求用户重定向,用户收到重定向请求后,再次请求真正的集群。

特点:实现简单,但性能较差。

2、反向代理服务器。在用户的请求到达反向代理服务器时(已经到达网站机房),由反向代理服务器根据算法转发到具体的服务器。常用的apache, nginx都可以充当反向代理服务器。

特点:部署简单,但代理服务器可能成为性能的瓶颈。

6.1.2. 传输层负载均衡

1、DNS域名解析负载均衡。DNS域名解析负载均衡就是在用户请求DNS服务器,获取域名对应的IP地址时,DNS服务器直接给出负载均衡后的服务器IP。

特点:效率比HTTP重定向高,减少维护负载均衡服务器成本。但一个应用服务器故障,不能及时通知DNS,而且DNS负载均衡的控制权在域名服务商那里,网站无法做更多的改善和更强大的管理。

2、基于NAT的负载均衡。基于NAT的负载均衡将一个外部IP地址映射为多个IP地址,对每次连接请求动态地转换为一个内部节点的地址。

特点:技术较为成熟,一般在网关位置,可以通过硬件实现。像四层交换机一般就采用了这种技术。

6.2. 有状态与无状态

无状态服务(stateless service)对单次请求的处理,不依赖其他请求,也就是说,处理一次请求所需的全部信息,要么都包含在这个请求里,要么可以从外部获取到(比如说数据库),服务器本身不存储任伺信息。

有状态服务(statefulservice)则相反,它会在自身保存一些数据,先后的请求是有关联的。

6.3. 缓存技术

MemCache:Memcache是一个高性能的分布式的内存对象缓存系统,用于动态Web应用以减轻数据库负载。Memcache通过在内存里维护一个统一的巨大的hash表,它能够用来存储各种格式的数据,包括图像、视频、文件以及数据库检索的结果等。

Redis:Redis是一个开源的使用ANSIC语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。

Squid:Squid是一个高性能的代理缓存服务器,Squid支持FTP、gopher、HTTPS和HTTP 协议。和一般的代理缓存软件不同,Squid用一个单独的、非模块化的、I/0驱动的进程来处理所有的客户端请求。

Redis与Memcache的差异如下:

1、Redis和Memcache都是将数据存放在内存中,都是内存数据库。他们都支持key-value数据类型。同时Memcache还可用于缓存其他东西,例如图片、视频等等,Redis还支持list、set、hash等数据结构的存储。

2、Redis支持数据的持久化,可以将内存中的数据保持在磁盘中,重启的时候可以再次加载进行使用。Memcache挂掉之后,数据就没了。

3、灾难恢复-Memcache挂掉后,数据不可恢复;Redis数据丢失后可以恢复。

4、在Redis中,并不是所有的数据都一直存储在内存中的。这是和Memcache相比一个最大的区别。当物理内存用完时,Redis可以将一些很久没用到的value交换到磁盘。

5、Redis在很多方面支持数据库的特性,可以这样说他就是一个数据库系统,而Memcache只是简单地K/V缓存。

所以在选择方面如果有持久方面的需求或对数据类型和处理有要求的应该选择Reddis。如果简单的key/value存储应该选择Memcache。

6.4. CDN(内容分发网络)

CDN的全称是Content Delivery Network,即内容分发网络。其基本思路是尽可能避开互联网上有可能影响数据传输速度和稳定性的瓶颈和环节,使内容传输的更快、更稳定。

6.5. XML与JSON

扩展标记语言(Extensible Markup Language,XML),用于标记电子文件使其具有结构性的标记语言,可以用来标记数据、定义数据类型,是一种允许用户对自己的标记语言进行定义的源语言。

XML的优点:

  • 格式统一,符合标准;
  • 容易与其他系统进行远程交互,数据共享比较方便。

XML的缺点:

  • XM L文件庞大,文件格式复杂,传输占带宽;
  • 服务器端和客户端都需要花费大量代码来解析XML,导致服务器端和客户端代码变得异常复杂且不易维护;
  • 客户端不同浏览器之间解析XML的方式不一致,需要重复编写很多代码;
  • 服务器端和客户端解析XML花费较多的资源和时间。

JSON(JavaScript Object Notation)一种轻量级的数据交换格式,具有良好的可读和便于快速编写的特性。可在不同平台之间进行数据交换。

JSON的优点:

  • 数据格式比较简单,易于读写,格式都是压缩的,占用带宽小;
  • 易于解析,客户端JavaScript可以简单的通过eval()进行JSON数据的读取;
  • 支持多种语言,包括ActionScript, C, C#, ColdFusion, Java, JavaScript, Perl, PHP,Python, Ruby等服务器端语言,便于服务器端的解析;
  • 因为JSON格式能直接为服务器端代码使用,大大简化了服务器端和客户端的代码开发量,且完成任务不变,并且易于维护。

JSON的缺点:

没有XML格式这么推广的深入人心和喜用广泛,没有XML那么通用性。

6.6. WEB应用服务器

WEB应用服务器可以理解为两层意思:

(1)WEB服务器:其职能较为单一,就是把浏览器发过来的Request请求,返回Html页面。

(2)应用服务器:进行业务逻辑的处理。

Apache:Web服务器,市场占有率达60%左右。它可以运行在几乎所有的Unix、Windows、Linux系统平台上。

IIS:早期Web服务器,目前小规模站点仍有应用。

Tomcat:开源、运行servlet和JSP Web应用软件的基于Java的Web应用软件容器。

JBOSS:JBOSS是基于J2EE的开放源代码的应用服务器。一般与Tomcat或Jetty绑定使用。

WebSphere:一种功能完善、开放的Web应用程序服务器,它是基于Java的应用环境,用于建立、部署和管理Internet和Intranet Web应用程序。

WebLogic:BEA WebLogic Server是一种多功能、基于标准的web应用服务器,为企业构建自己的应用提供了坚实的基础。

Jetty:Jetty是一个开源的servlet容器,它为基于Java的web容器。

6.7. REST(表达性状态传递)

REST (Representational State Transfer,表述性状态转移)是一种只使用HTTP和XML进行基于Web通信的技术,可以降低开发的复杂性,提高系统的可伸缩性。

REST的5个原则:

(1)网络上的所有事物都被抽象为资源。

(2)每个资源对应一个唯一的资源标识。

(3)通过通用的连接件接口对资源进行操作。

(4)对资源的各种操作不会改变资源标识。

(5)所有的操作都是无状态的。

6.8. 响应式Web设计

响应式WEB设计是一种网络页面设计布局,其理念是:集中创建页面的图片排版大小,可以智能地根据用户行为以及使用的设备环境进行相对应的布局。

方法与策略:

(1)采用流式布局和弹性化设计:使用相对单位,设定百分比而非具体值的方式设置页面元素的大小。

(2)响应式图片:不仅要同比的缩放图片,还要在小设备上降低图片自身的分辨率。

系统架构设计师与系统分析师历年实体分析与解答下载_【系统分析师】07-系统设计...相关推荐

  1. 系统架构设计师与系统分析师历年实体分析与解答下载_做Python数据分析5年了,复制粘贴是我最牛逼的技能,直到看到这些公众号,我学习了...

    上次跟一个学妹聊天,问她平时怎么学习,她反手甩给我这几个公众号,说很喜欢里面的技术文章,推荐给大家 深度学习这件小事 机器学习,深度学习,自然语言处理,计算机视觉--这些小事情,只要你主动,我们就有可 ...

  2. 系统架构设计师与系统分析师历年实体分析与解答下载_医疗知识图谱问答系统探究(一)...

    这是 阿拉灯神丁Vicky 的第 23 篇文章 1.项目背景 为通过项目实战增加对知识图谱的认识,几乎找了所有网上的开源项目及视频实战教程. 果然,功夫不负有心人,找到了中科院软件所刘焕勇老师在git ...

  3. 系统校验矩阵怎么求_软考高级架构师:计算机系统基础知识

    计算机系统基础 计算机组成 CPU的功能 •(1)程序控制功能.CPU通过执行指令来控制程序的执行顺序. •(2)操作控制. •(3)时间控制. •(4)数据处理.CPU最根本的任务. (1)运算器. ...

  4. 2023年软考系统架构师新版专栏导读

    目录 新的改变 软考是不是内卷? 老版教材删减章节 建议学习计划 专栏更文列表 新的改变 软考今年改版啦 高级系统架构师考试在2022年12月底出了第二版教材,比第二版多出来140页,虽然看起来好像更 ...

  5. 【软考系统架构设计师】2009年下系统架构师案例分析历年真题

    [软考系统架构设计师]2009年下系统架构师案例分析历年真题 2009年下系统架构师案例分析历年真题 [软考系统架构设计师]2009年下系统架构师案例分析历年真题 2009年系统架构师案例分析真题第一 ...

  6. 【软考系统架构设计师】2017下系统架构师案例分析历年真题

    [软考系统架构设计师]2017下系统架构师案例分析历年真题 2017下系统架构师案例分析历年真题 [软考系统架构设计师]2017下系统架构师案例分析历年真题 2017下系统架构师案例分析试题一(系统架 ...

  7. 【软考系统架构设计师】2022下案例分析历年真题

    [软考系统架构设计师]2022下案例分析历年真题 [软考系统架构设计师]2022下案例分析历年真题 [软考系统架构设计师]2022下案例分析历年真题 2022下案例分析历年真题第一题(25分) 202 ...

  8. 【软考系统架构设计师】2012年下系统架构师综合知识历年真题

    [软考系统架构设计师]2012年下系统架构师综合知识历年真题 2012年下系统架构师综合知识历年真题 [软考系统架构设计师]2012年下系统架构师综合知识历年真题 [2012下架构真题第01题:绿色] ...

  9. 【软考系统架构设计师】2011年下系统架构师综合知识历年真题

    [软考系统架构设计师]2011年下系统架构师综合知识历年真题 2011年下系统架构师综合知识历年真题 [软考系统架构设计师]2011年下系统架构师综合知识历年真题 [2011下架构真题第01题:绿色] ...

  10. 【软考系统架构设计师】2009年下系统架构师综合知识历年真题

    [软考系统架构设计师]2009年下系统架构师综合知识历年真题 2009年下系统架构师综合知识历年真题 [软考系统架构设计师]2009年下系统架构师综合知识历年真题 [2009下架构真题第01题:绿色] ...

最新文章

  1. PHP 神盾解密工具
  2. python在中小学教学中的应用-在python程序中的进程操作
  3. Java开发语句和代码块模板
  4. Android接收短信-createFromPdu
  5. 2018年11月份GitHub上最热门的开源项目
  6. 【学习笔记】Eureka服务治理代码实例、相关配置和原理机制详解
  7. 软件工程专业指导1(定义内涵)
  8. 美团自研无人机登场:15分钟配送到家
  9. (StreamReader.ReadLine()==null)还是(-1 != StreamReader.Peek())?
  10. 理解去中心化稳定币DAI
  11. mount远程驱动器
  12. 英文分词的算法和原理
  13. IE tab for chrome
  14. SU插件|TopoShaper生成地形 免费下载及介绍(SketchUp草图大师必备)!
  15. 七种方法绕过安卓手机锁屏
  16. PS如何制作炫酷的字体,有什么好的教程吗
  17. undefined symbol问题的查找、定位与解决方法
  18. 计统大作业Hello P2P
  19. 整理一下个人学习前端的网站
  20. 【leetcode】best time to buy and sell stocks(i, ii, iii, iv, v)

热门文章

  1. 微信小程序详细图文教程-10分钟完成微信小程序开发部署发布(3元获取腾讯云服务器带小程序支持系统)
  2. 甘肃人社生物识别认证系统服务器,甘肃人社生物识别认证系统
  3. 原子操作:CAS、TAS、TTAS、FAA浅析
  4. property_get和property_set使用方法
  5. 女朋友让我深夜十二点催她睡觉,我有Python我就不干
  6. 吃货在东京 -- 记那段吃不饱的日子 之一 牛头自助烤肉店
  7. 用original绘制重叠柱状图
  8. PDF文档翻译(英文翻译为中文)
  9. 用计算机怎么算异分母加减法,怎么正确算异分母分数加减法
  10. 台式计算机刚做完系统就蓝屏,做完系统蓝屏怎么办|刚做完系统重启电脑蓝屏解决方法...