软件工程学习笔记第七节------软件系统设计

学习目的

首先我们要了解软件体系结构概念、发展历程、风格、模式和框架,并且理解软件设计原则中模块化、内聚和耦合的概念,最后在在了解MySQL、Mongodb、Redis等数据库的特点及适用场合后分析出选择数据库的考虑因素

学习内容

1. 选择数据库的相关因素,MySQL、Mongodb、Redis等数据库的特点及适用场合

2. 软件体系结构概念、发展历程

3. 软件体系结构风格、模式和框架

4. 软件设计原则中模块化、内聚和耦合的概念

学习产出

一、软件体系结构

1.概念:软件体系结构 = 构件 + 连接件 + 约束。软件体系结构包括了构成系统的设计元素的描述,设计元素之间的交互,设计元素的组合模式以及在这些模式之中的约束。

  • 构件:具有某种功能的可复用的软件结构单元,表示系统中主要的计算元素和数据存储
  • 连接:构件之间建立和维护行为关联与信息传递的途径。主要依靠连接机制和连接协议。
  • 连接件:表示构件之间的交互并实现构件之间的连接。负责完成构件之间信息交换和行为联系的专用构件。

2.重点

    1)如何将复杂的软件系统划分模块

    2)如何规范模块的构成

    3)如何将模块组织成为完整的系统

    4)如何保证系统的质量要求

3.软件体系结构的目标

  • 可重用性
  • 可扩展性/可改变性
  • 简单性
  • 有效性

4.软件体系结构的发展过程

5.体系结构风格、模式和框架

  • 体系结构风格:用于描述某一特定应用领域中系统组织的惯用模式,反映了领域中众多系统所共用的结构和语义特性
  • 设计模式:描述了软件系统设计过程中常见问题的一些解决方案,通常是从大量的成功实践中总结出来的且被广泛公认的实践和知识。
  • 软件框架:由开发人员定制的应用系统的骨架,是整个系统的可重用设计,由一组抽象构件和构件实例间的交互方式组成

6.软件设计原则

  • 抽象:关注事物中与问题相关部分,忽略其他无关部分的一种思考方法
  • 封装和信息隐藏:每个软件单元对其他所有单元都隐藏自己的设计决策,各单元的特性通过其外部可见的接口来描述(单元接口应该尽可能的简单)
  • 模块化:在物理和逻辑层面上将整个系统分解为多个更小的部分,分而治之。将复杂问题分解为若干个简单问题,然后逐个解决。

系统分解目标:高内聚,低耦合

  • 内聚性:一个模块或子系统内部的依赖程度
  • 耦合性:两个模块或者子系统之间依赖关系的强度

7.层次化

  • 分层:将各个划分好的模块按照靠近用户的距离划分层次,是封闭式结构,每一层只能访问与其相邻的下一层,或者是开放式结构,每一层还可以访问下面更低的层次
  • 划分:模块之间划分后依赖少,可以独立运行
  • 复用:利用某些已经开发的,对建立新系统有用的软件元素来生成新的软件系统,能提高生产效率,提高软件质量(分为源代码复用、软件体系结构复用、框架复用)

二、软件体系结构风格

1.概念:是描述特定系统组织方式的惯用范例,强调了软件系统中通用的组织结构。可以促进设计结构的重用和代码的重用。

2.五种常见的体系结构风格

  • 主程序-子程序:由主程序调用子程序的系统模块,来实现完整的系统功能,主程序与子程序,子程序与子程序之间通过调用和返回来完成。
  • 面向对象:由类和对象构成,对象之间通过函数调用和消息传递实现交互
  • 管道-过滤器:把系统认为分为若干连续处理的步骤,步骤由通过系统的数据流连接,一个步骤的输出是下一个步骤的输入。

  • 仓库体系结构:以数据为中心的体系结构,适合于数据由一个模块产生而其他模块使用的情形。所有的功能模块都访问和修改一个单一的数据存储,适合于经常发生改变且具有复杂数据处理的任务。问题是耦合度太高。

三、数据库选择策略

1.部分概念:

  • 事务:保证操作序列的完整执行
  • 一致性:分为实时一致性和最终一致性,最大区别是实时一致性是在同一时间,所有人都看到。

2.Mysql

  • 开源的关系型数据库
  • 支持快速的复杂查询操作
  • 支持完整的事务操作和较高的安全性

3.Mongodb

  • 模式自由
  • 支持海量数据的查询和插入,支持完全索引
  • 支持分片等分布式操作,支持故障恢复与备份,学习成本低
  • 但是需要占用很大的空间建立索引,不支持事务操作,最终一致性,较高的安全性无法保证

4.Redis

  • 内存数据库
  • 持久化存储
  • 但是数据在内存中不可靠,且不完整的事务实现,不适合安全性高的场景

5.数据库选择策略 

   1)MySQL:设计财务等信息,对事务要求高

    2)mongo:大量用户数据,且有大量查询,支持分布式,或者不确定模型

    3)Redis:需要超快的反应速度

四、总结反思

在本章中详细介绍了,软件的体系结构,为接下来我们着手开发软件奠定了部分基础,了解了软件UI设计之下的模块的相互关联模式,也促进我们思考,到底什么模式是适合我们的软件。促进我们探索与总结反思,如何将一个软件从无到有搭建起来。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值