软件工程项目之系统设计概述

合集下载

软件工程——总体设计报告简洁范本

软件工程——总体设计报告简洁范本

软件工程——总体设计报告软件工程——总体设计报告1. 引言本总体设计报告旨在详细说明软件工程项目的整体设计方案。

在此将对项目的业务需求、系统架构和模块设计进行说明,以确保项目能够成功完成。

2. 业务需求2.1. 项目背景软件工程项目旨在开发一款新的电商平台。

该平台将提供用户注册、商品购买、订单管理等功能,为用户提供便捷的购物体验。

2.2. 功能需求用户注册与登录:提供用户注册和登录功能,以便用户可以使用平台的各项功能。

商品浏览与搜索:允许用户浏览平台上的不同商品,并能通过关键字搜索目标商品。

购物车管理:为用户提供购物车功能,用户可以将自己感兴趣的商品加入购物车,并进行管理。

订单管理:用户可以在平台上提交订单、查看订单状态、取消订单等操作。

评价与反馈:用户可以对购买的商品进行评价和反馈,以供其他用户参考。

3. 系统架构本软件工程项目采用三层架构模式进行设计,分为表示层、业务逻辑层和数据访问层。

3.1. 表示层表示层负责与用户进行交互,接收用户的请求并展示相应的内容。

该层将接收用户注册、登录、商品浏览等请求,并将这些请求传递给业务逻辑层处理。

3.2. 业务逻辑层业务逻辑层负责处理业务逻辑和业务规则,处理来自表示层的请求,并返回处理结果。

该层将负责用户注册、登录、商品浏览、购物车管理、订单管理等功能的实现。

3.3. 数据访问层数据访问层负责访问数据库,并进行数据的查询、插入、更新和删除等操作。

该层将保存用户信息、商品信息、订单信息等相关数据。

4. 模块设计基于业务需求和系统架构,将系统分为以下几个模块:4.1. 用户模块用户模块负责用户注册、登录和个人信息管理等功能。

该模块将包含用户注册表单、登录页面、个人信息展示页面等。

4.2. 商品模块商品模块负责商品的浏览、搜索和详情展示等功能。

该模块将包含商品列表页面、商品搜索页面和商品详情页面等。

4.3. 购物车模块购物车模块负责用户的购物车管理功能。

用户可以将感兴趣的商品加入购物车,并在购物车中进行管理和结算。

软件工程中的系统设计

软件工程中的系统设计

软件工程中的系统设计软件工程是一门综合性的学科,其中系统设计是其中重要的一环。

在软件开发过程中,系统设计是一个关键步骤,它涉及到对软件系统进行整体架构的规划和设计。

一个好的系统设计能够保证软件系统具备良好的可扩展性、可维护性和可靠性。

本文将介绍软件工程中的系统设计的基本概念、原则和方法。

一、系统设计的基本概念系统设计是软件工程中的一个重要环节,其目的是根据需求分析的结果,将软件系统划分为不同的模块,并描述各个模块之间的关系和交互方式,最终形成一个完整的系统架构。

系统设计负责将问题领域的要求转化为计算机系统的结构和行为,使软件系统能够满足用户的需求。

系统设计的关键概念包括模块化、接口、抽象和层次化。

模块化是将软件系统划分为若干个相对独立的模块,每个模块负责特定的功能;接口定义了模块之间的交互方式和数据传递方式;抽象是将模块功能进行抽象化,隐藏内部实现细节,提供简化的接口;层次化是将系统划分为多个层次,每个层次负责不同的功能。

二、系统设计的原则在进行系统设计时,有一些原则需要遵循,以保证设计的质量和可靠性。

1. 单一职责原则:每个模块只负责一个明确的功能,避免耦合度过高。

2. 高内聚低耦合:模块内部的元素相互依存性高,模块之间的依赖性尽量低。

3. 开放封闭原则:模块应该对扩展开放,对修改封闭,以便于系统后续的升级和维护。

4. 可重用性:设计模块时应尽量使其具备可重用性,提高系统开发的效率。

5. 合适的抽象级别:合理的抽象可以提高系统的可读性和可维护性。

6. 合理分层:将系统划分为逻辑上独立的层次,便于管理和维护。

7. 模块化设计:将一个大的系统拆分为多个功能模块,有利于并行开发和提高软件的可扩展性。

三、系统设计的方法在进行系统设计时,有一些方法可以帮助工程师更好地完成设计任务。

1. 面向对象分析与设计(OOAD):OOAD是一种常用的系统设计方法,通过对现实世界建模,将系统划分为对象和类,定义对象之间的关系和行为,来设计软件系统。

软件工程概要设计和详细设计

软件工程概要设计和详细设计
•系统结构设计定义软件系统的整体结构,是软件开 发的核心步骤,在设计步骤中,建立软件主要成份之 间的关系。合理的模块划分可以降低软件开发的复杂 度,同时也能提高软件的可重用性。
•过程设计则是把结构成份转换成软件的过程性描述。
•界面设计是对系统边界的描述,用户界面是用户和 系统进行交互的工具,人机接口直接影响软件的寿命。
ClientA
ClientB
ClientC
ClientD
第三级

户 机
business logic node(商业逻辑结点)
Security
(安全)
Event
(事件)
Search
(搜索)



Database management node
(数据库管理结点)
第二级 第一级
软件工程概要设计和详细设计
现在越来越多的应用采用多层结构,以适应不断 变化的用户需求。
软件工程概要设计和详细设计
四、分布式对象结构(Distributed Objects Architecture)
在C/S模型中,客户和服务器在服务/请求上的差别, 在一定程度上限制了系统的灵活性和可扩展性。
采用分布式对象结构 :
“对象(Object)”——提供服务的系统组件(System Component)。
② 安全性:网络环境面临着各种威胁,如病毒、 木马、非法访问,安全问题十分突出
③ 可管理性:开放性造成异构性,造成管理困难 ④ 不可预知性:系统响应时间受网络负载等网络
环境的影响。
软件工程概要设计和详细设计
三、 客户机/服务器模型(Client/Server Architectural Model) C/S结构是一种分布式模型,采用发请求、得结

软件工程之系统设计概述

软件工程之系统设计概述

软件工程之系统设计概述第五章系统设计系统设计是把需求转化为软件系统的最重要的环节。

系统设计的优劣在根本上决定了软件系统的质量。

就象”一切帝国主义都是纸老虎”那样能够断定”差的系统设计必定产生差的软件系统。

”因此我们要努力保证系统设计”根正苗红”,把一切左倾、右倾的设计思潮消灭在萌芽状态。

Windows NT的一位系统设计师拥有8辆法拉利跑车,让Microsoft公司的一些程序员十分眼红。

但你只能羡慕而不能愤恨,因为并不是每个程序员都有本事成为复杂软件系统的设计师。

系统设计要比纯粹的编程困难得多。

即便你清楚客户的需求,却未必知道应该设计什么样的软件系统——既能挣最多的钱又能让客户满意。

”天下西湖三十六,最美是杭州”,千年前苏东坡大学士对西湖精采绝伦的系统设计,使杭州荣升为”天堂”,让后人只剩下赞叹和破坏的份了。

本章讲述系统设计的四方面内容:体系结构设计、模块设计、数据结构与算法设计、用户界面设计。

如果将软件系统比喻为人体,那么:(1)体系结构就如同人的骨架。

如果某个家伙的骨架是猴子,那么无论怎样喂养和美容,这家伙始终都是猴子,不会成为人。

(2)模块就如同人的器官,具有特定的功能。

人体中最出众的模块设计之一是手,手只有几种动作,却能做无限多的事情。

人体中最糟糕的模块设计之一是嘴巴,嘴巴将最有价值但毫无相干的几种功能如吃饭、说话、亲吻混为一体,使之无法并行处理,真乃人类之不幸。

(3)数据结构与算法就如同人的血脉和神经,它让器官具有生命并能发挥功能。

数据结构与算法分布在体系结构和模块中,它将协调系统的各个功能。

人的耳朵和嘴巴虽然是相对独立的器官,但如果耳朵失聪了,嘴巴就只能发出”啊””呜”的声音,等于丧失了说话的功能(因此聋子天生就是哑巴),可人们却又能用手势代替说话。

人体的数据结构与算法设计真是十分神奇而且十分可笑。

(4)用户界面就如同人的外表,最容易让人一见钟情或一见恶心。

象人类追求心灵美和外表美那样,软件系统也追求(内在的)功能强大和(外表的)界面友好。

软件工程之系统设计概述

软件工程之系统设计概述

软件工程之系统设计概述1. 引言系统设计是软件工程的重要阶段之一,它是在需求分析的基础上,对软件系统进行总体架构设计和详细设计的过程。

系统设计的目标是定义系统的功能、性能、安全性、可靠性、可维护性等方面的要求,确定系统的组成部分和模块间的接口,为软件的实现和测试提供指导。

2. 系统设计流程系统设计通常包括以下几个阶段:2.1 需求分析和需求规格说明书在系统设计开始之前,需要进行详细的需求分析工作。

需求分析的目标是理解用户的需求,并将其转化为可操作的需求规格说明书。

需求规格说明书包括功能需求、性能需求、界面需求等方面的要求。

2.2 总体架构设计总体架构设计是系统设计的第一步,它确定系统的整体结构和模块间的关系。

在总体架构设计阶段,需要定义系统的各个子系统和模块,并确定它们之间的接口和通信方式。

2.3 详细设计详细设计是系统设计的核心部分,它针对总体架构设计给出的模块和接口进行详细的设计。

在详细设计阶段,需要定义每个模块的功能、数据结构、算法、接口等细节,以及模块间的通信和数据流程。

2.4 用户界面设计用户界面设计是系统设计的重要组成部分,它关注用户与系统之间的交互方式。

在用户界面设计阶段,需要考虑用户的使用习惯和心理需求,设计出符合用户期望的界面布局、操作流程和交互方式。

2.5 数据库设计如果系统需要使用数据库来存储和管理数据,那么在系统设计阶段还需要进行数据库设计。

数据库设计包括确定数据模型、数据表结构、数据关系等方面的内容。

3. 系统设计原则和方法在进行系统设计时,需要遵循一些原则和方法,以确保设计的质量和可行性。

3.1 模块化设计模块化设计是将系统划分为相互独立、具有明确功能的模块的过程。

模块化设计可以降低系统的复杂性,提高系统的可维护性和扩展性。

在模块化设计中,需要考虑模块的耦合度和内聚度,使得模块之间的耦合度尽量低,模块内部的内聚度尽量高。

3.2 面向对象设计面向对象设计是一种以对象为中心的设计方法。

概要设计(软件工程文档模板)(2023范文免修改)

概要设计(软件工程文档模板)(2023范文免修改)

概要设计 (软件工程)1. 引言本文档旨在为软件开发团队提供一个概要设计,用于记录软件项目的概要设计信息。

概要设计是软件开发过程中的重要步骤之一,旨在定义系统的整体架构和关键设计要素,为详细设计和编码阶段提供依据。

2. 背景在软件开发过程中,概要设计是在需求分析和详细设计之间的一项关键任务。

在需求分析阶段,我们对系统需求进行了理解和分析,而在详细设计阶段,我们将关注系统内部的实现细节。

概要设计则是连接这两个阶段的纽带,旨在提供一个整体架构和设计准则。

3. 概要设计目标概要设计的目标是定义系统的整体架构和关键设计要素。

在此阶段,我们不仅需要确定系统的模块划分和关系,还需要考虑系统的稳定性、性能、安全性和可维护性等方面。

通过完成概要设计,我们可以为详细设计和编码阶段提供一个清晰的方向。

4. 概要设计内容是概要设计文档应包含的主要内容:4.1 系统架构在系统架构部分,我们需要定义系统的整体结构和主要模块。

我们应该描述每个模块的功能、接口和关系,并说明它们如何协同工作以实现系统的目标。

4.2 数据库设计如果系统需要使用数据库存储数据,我们需要在概要设计中对数据库进行设计。

我们应该确定数据库的结构、表和关系,并描述它们与系统的交互方式。

4.3 接口设计在接口设计部分,我们需要定义系统与外部系统或用户的接口。

我们应该描述接口的输入、输出以及各种操作和交互方式。

4.4 安全设计在安全设计部分,我们需要考虑系统的安全性需求,并设计相应的安全措施。

我们应该描述系统的身份验证、访问控制、数据加密等安全机制。

4.5 性能设计在性能设计部分,我们需要考虑系统的性能需求,并选择合适的算法和数据结构来改善系统的响应时间和吞吐量。

4.6 可维护性设计在可维护性设计部分,我们需要考虑系统的可维护性需求,并采取相应的设计措施。

我们应该描述系统的可测试性、可修改性、可重用性等。

5. 概要设计流程是概要设计的一般流程:1. 理解需求:在开始概要设计之前,我们需要对系统需求进行深入理解和分析。

软件工程——总体设计报告-无删减范文

软件工程——总体设计报告软件工程——总体设计报告1. 引言本文档是软件工程项目的总体设计报告,用于阐述项目的整体设计方案。

本项目旨在开发一款具有特定功能的软件,该软件既要满足用户的需求,又要保证系统的稳定性和可维护性。

本报告将介绍项目的总体设计思路、结构和主要功能模块。

2. 总体设计思路在总体设计中,我们将采用分层结构的设计思路。

将软件系统划分为多个功能模块,每个模块之间通过接口进行交互。

模块之间的解耦合使得系统具有良好的扩展性和可维护性。

3. 系统结构设计3.1 模块划分根据对用户需求的分析,我们将系统划分为以下几个模块:1. 用户管理模块:负责用户的注册、登录和权限管理。

2. 数据处理模块:用于处理用户输入的数据,并进行相应的计算和分析。

3. 数据存储模块:负责将处理后的结果存储到数据库中,并提供数据的读取和查询功能。

4. 数据展示模块:用于展示处理后的数据结果,支持图表展示和数据导出等功能。

3.2 模块之间的关系下图展示了各个模块之间的关系:```用户管理模块 --> 数据处理模块 --> 数据存储模块 --> 数据展示模块```3.3 接口设计为了确保模块之间的解耦合,我们需要定义清晰的接口规范。

以下是各个模块的接口设计:1. 用户管理模块:- 注册用户(registerUser): 用于用户注册,参数为用户名和密码。

- 用户登录(loginUser): 用于用户登录,参数为用户名和密码。

- 权限管理(managePermission): 用于管理用户的权限,参数为用户ID和权限类型。

2. 数据处理模块:- 数据处理(processData): 用于处理用户输入的数据,参数为原始数据。

- 数据计算(calculateData): 用于对处理后的数据进行计算和分析。

3. 数据存储模块:- 数据存储(saveData): 用于将处理后的结果存储到数据库中,参数为处理结果。

- 数据读取(readData): 用于从数据库中读取数据,参数为数据ID。

通用范文(正式版)概要设计(软件工程文档模板)

概要设计 (软件工程)1. 引言本文档为软件工程项目的概要设计文档,旨在为项目的开发人员提供一个整体的系统设计概览。

在项目开发过程中,概要设计起到了桥梁的作用,将需求分析和详细设计阶段进行衔接。

本文档将详细描述系统的整体结构、主要模块和关键功能,并提供相应的设计原则。

2. 系统结构设计2.1 参与角色是本系统中涉及到的主要参与角色:系统管理员:负责系统的配置、用户管理和权限控制。

普通用户:包括注册用户和匿名用户,使用系统提供的功能进行操作和查询。

数据库管理员:负责数据库的管理、备份和维护。

2.2 系统组成本系统由几个主要模块组成:用户管理模块:负责用户注册、登录和信息维护等功能。

权限控制模块:实现对用户访问权限的管理和控制。

数据管理模块:负责对数据的增删改查等操作。

报表模块:根据用户的需求相应的报表和统计数据。

安全管理模块:对系统进行安全性控制和防护。

2.3 系统架构设计本系统采用分层架构的设计方式,主要包括几个层级:用户界面层:负责与用户交互和展示信息。

应用逻辑层:负责处理用户请求,调用相应的服务和实现业务逻辑。

数据访问层:负责与数据库进行交互,实现数据的持久化和访问。

数据库层:存储系统的数据和相关信息。

3. 主要功能设计本系统的主要功能包括但不限于几个方面:用户注册和登录功能:提供用户注册和登录功能,保障系统安全性。

用户信息维护功能:允许用户修改个人信息,包括密码、头像等。

数据查询和展示功能:允许用户根据条件查询并展示相关数据。

数据编辑和添加功能:允许用户对数据进行编辑和添加操作。

报表和导出功能:根据用户需求相应的报表和统计数据,并支持导出功能。

4. 系统性能设计为了保障系统的性能和稳定性,本系统需要考虑几个方面的设计:用户并发访问的支持:针对高并发访问,需要采用合适的技术手段进行负载均衡和优化。

数据库优化:针对系统中频繁访问的表,采用合适的索引策略进行优化,提高查询和更新的效率。

缓存机制:采用合适的缓存机制,减少对后台数据库的访问,提高系统响应速度。

《软件工程》课程设计——_学生选课系统

《软件工程》课程设计手册 (3)1.1 开辟背景 (3)1.2 开辟目的 (3)1.3 开辟运行境 (3)1.4 系统功能 (3) (3)2.1 系统需求 (3)2.2 功能需求 (3)2.3 业务流图 (3) (4)3.1 基本设计概念和处理流程 (4)3.2 系统层次模图 (4)3.3 系统层次模块图 (4)3.4 模块设计 (5) (5)4.1 数据库的逻辑设计 (5)4.2 数据库的配置 (6) (8)5.1 学生登录模块的设计与实现 (8)5.2 学生注册模块的设计与实现 (9)5.3 学生查询模块的设计与实现 (9)5.4 学生选课模块的设计与实现 (10) (10) (10) (11)1.1 开辟背景Internet 的飞速发展深刻地影响了人们的日常生活和商业运作方式。

人们打开网页浏览当天的新闻,发电子邮件给远方的朋友,使用搜索引擎查找资料,进入网上商城购买商品——这一切都是在使用Internet。

社会的方方面面渗透着互连网的应用,使得一向烦琐的手工程序变得方便,快捷,而学校网上选课系统正是基于这一思想而发展起来的。

1.2 开辟目的传统的手工选课不仅复杂,也牵涉了不少的人力,对管理也造成为了诸多不变,而借助网上选课系统,学生在规定选课时间段内,可以不受地点和时间的限制完成选修课的申请,而学校也可以方便地对系统进行管理和控制,提高工作效率。

1.3 开辟运行环境:开辟工具:java 语言开辟环境:JDK1.4 系统功能:(1) 登录、注册功能.(2) 选课功能(3) 查询功能2.1 系统需求用户的需求具体体现在各种学习成绩的提供、保存、更新和查询方面,这就要求数据库结构能充分满足各种信息的输入和输出。

采集基本数据、数据结构及数据处理的流程,组成一份详尽数据字典,为后面的具体设计打下基础。

2.2 功能需求通过系统功能分析,针对普通的网上选课系统,总结出如下的需求信息:(1) 学生的需求:网上选课、选课情况查询;(2) 本系统主要实现学生信息管理和选课查询。

软件工程系统设计

软件工程系统设计软件工程系统设计是软件开发中最重要的一个环节,它对于整个软件开发过程的质量和效率有着至关重要的影响。

软件系统设计包含了从需求分析、模块划分到设计实现的一系列步骤,这些步骤需要开发者们不断地思考和探索,才能够设计出符合用户需求、可靠稳定、易于维护和升级的软件系统。

一、系统设计的基本概念1.1 系统设计的定义系统设计可以理解为,针对软件产品开发过程中的各项要求,根据这些要求确定系统的结构、功能和性能指标的过程。

同时,系统设计也会考虑到未来的发展方向,例如需提前考虑架构可扩展性、性能扩展、安全性以及可维护性等方面的问题,确保设计的系统具备长期的可行性。

1.2 系统设计的目标系统设计的目的是将需求转化为系统架构,以便将来能够实现实现对软件的构建、扩展以及运行时维护。

同时,在系统设计的过程中还需要确保如下目标:(1)系统设计的可行性;(2)系统设计的可维护性;(3)系统设计的可重用性;(4)系统设计的可扩展性;(5)系统设计的可安全性;1.3 系统设计的原则系统设计的过程需要遵循一定的原则,以便设计出具有较高质量的系统。

以下是系统设计的几项重要原则:(1)模块化设计:系统是由许多不同的组成模块构成的,模块化设计可以实现更好的分离效果,使得不同模块的修改、测试和交付更加容易。

(2)可扩展性:系统应具有可扩展性,这将为未来的需求变更和扩展提供良好的功能扩展。

(3)高效性:系统设计应当考虑到软件性能的一系列指标,以确保软件的稳定运行和高效性。

(4)可维护性:软件运行时,开发者需要对其进行维护。

因此,在设计阶段需要考虑到可维护性。

(5)应用安全性:系统安全性应该始终是重要的考虑因素。

当软件系统处理大量数据或处理用户敏感数据时,极其重要。

二、系统设计的步骤2.1 需求分析和规划需求分析是进行软件工程设计的首要步骤。

在此步骤中,需要了解客户的真正需求,以此帮助开发人员解决问题,确定软件需求和目的,并为将来的应用保持在正确的轨道上。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

第五章系统设计系统设计是把需求转化为软件系统的最重要的环节。

系统设计的优劣在全然上决定了软件系统的质量。

就象“一切帝国主义差不多上纸老虎”那样能够断定“差的系统设计必定产生差的软件系统。

”因此我们要努力保证系统设计“根正苗红”,把一切左倾、右倾的设计思潮消灭在萌芽状态。

WindowsNT的一位系统设计师拥有8辆法拉利跑车,让Microsoft公司的一些程序员十分眼红。

但你只能艳羡而不能愤恨,因为并不是每个程序员都有本领成为复杂软件系统的设计师。

系统设计要比纯粹的编程困难得多。

即便你清晰客户的需求,却未必明白应该设计什么样的软件系统——既能挣最多的钞票又能让客户中意。

“天下西湖三十六,最美是杭州”,千年前苏东坡大学士对西湖精采绝伦的系统设计,使杭州荣升为“天堂”,让后人只剩下赞美和破坏的份了。

本章讲述系统设计的四方面内容:体系结构设计、模块设计、数据结构与算法设计、用户界面设计。

假如将软件系统比喻为人体,那么:(1)体系结构就如同人的骨架。

假如某个家伙的骨架是猴子,那么不管如何样喂养和美容,这家伙始终差不多上猴子,可不能成为人。

(2)模块就如同人的器官,具有特定的功能。

人体中最出色的模块设计之一是手,手只有几种动作,却能做无限多的情况。

人体中最糟糕的模块设计之一是嘴巴,嘴巴将最有价值但毫无相干的几种功能如吃饭、讲话、亲吻混为一体,使之无法并行处理,真乃人类之不幸。

(3)数据结构与算法就如同人的血脉和神经,它让器官具有生命并能发挥功能。

数据结构与算法分布在体系结构和模块中,它将协调系统的各个功能。

人的耳朵和嘴巴尽管是相对独立的器官,但假如耳朵失聪了,嘴巴就只能发出“啊”“呜”的声音,等于丧失了讲话的功能(因此聋子天生确实是哑巴),可人们却又能用手势代替讲话。

人体的数据结构与算法设计真是十分奇妙同时十分可笑。

(4)用户界面就如同人的外表,最容易让人一见钟情或一见恶心。

象人类追求心灵美和外表美那样,软件系统也追求(内在的)功能强大和(外表的)界面友好。

但随着生活节奏的加快,人们已少有兴趣去品味深藏不露的内在美。

假如把Unix系统比作是健壮的汉子和妇人,那么Windows系统就象妩媚的小白脸和狐狸精。

想不到Windows系统难道能兴风作浪,占去大半市场。

有鉴于此,我们应该鼓舞女士多买化妆品(男士付钞票)以获得更好的界面。

在进行系统设计时,我们要深情地关注软件的质量因素,如正确性与精确性、性能与效率、易用性、可理解性与简法性、可复用性与可扩充性等等。

即使把系统设计做好了,也并不意味着就能产生好的软件系统。

在程序设计、测试、维护等环节还要做大量的工作,不管哪个环节出了差错,都会把好事搞砸了。

据讲上帝把所有的女士都设计成天使,但是天使们在下凡时有些双脚先着地,有些脸先着地。

上帝的这一疏忽让专门多女孩伤透了心。

我们在开发软件时,一定要吸取那个教训。

5.1 体系结构设计杨叔子院子曾如此指点其弟子:文学中有科学,音乐中有数学,漫画中有现代数学的拓扑学。

漫画家能够“几笔”就把一个人画出来,不管如何美化或丑化,确实是活像。

什么缘故?因为那“几笔”不是不的,而是拓扑学中的特征不变量,这是事物最本质的东西。

体系结构是软件系统中最本质的东西:(1)体系结构是对复杂事物的一种抽象。

良好的体系结构是普遍适用的,它能够高效地处理多种多样的个体需求。

一提起“房子”,我们的脑中立即就会出现房子的印象(而不是地洞的印象)。

“房子”是人们对住宿或办公环境的一种抽象。

不论是办公楼依旧民房,同一类建筑物(甚至不同类的建筑物)之间都具有特不相似的体系结构和构造方式。

假如13亿中国人民每个人都要用特不的方式构造奇异的房子,那么960万平方公里的土地将会变得千疮百孔,终日不得安静。

(2)体系结构在一定的时刻内保持稳定。

只有在稳定的环境下,人们才能干点情况,社会才能进展。

科学告诉我们,宇宙间万物无时无刻不在运动、飞行。

由于我们的生活环境在地球上保持相对稳定,以致于我们能够无忧无虑地吃饭和睡觉,压根就意识不到自己是活生生的导弹。

软件开发最怕的确实是需求变化,但“需求会发生变化”是个无法躲避的现实。

人们希望在需求发生变化时,最好只对软件做些皮皮毛毛的修改,可千万不改动软件的体系结构。

就如人们对住宿的需求也会变动,你能够经常改变房间的装璜和摆设,但可不能在每次变动时都要去折墙、拆柱、挖地基。

假如当需求发生变化时,程序员不得不去修改软件的体系结构,那么那个软件的系统设计是失败的。

良好的体系结构意味着普适、高效和稳定。

本节将论述两种特不通用的软件体系结构:层次结构和客户机/服务器(C lient/Server)结构。

5.1.1层次结构层次结构表达了这么一种常识:有些情况比较复杂,我们没法一口气干完,就把情况分为好几层,一层一层地去做。

高层的工作总是建立在低层的工作之上。

层次关系要紧有两种:上下级关系和顺序相邻关系。

一、上下级关系的层次结构我们从小学一直读到博士研究生毕业,要读20多年,能够分为五个层次。

而范进的知识结构只有两层:“私塾”和“秀才”,但读了五十多年,如图5.1所示。

一般地处于较高层次的学生应该明白得所有低层次的知识,而处于低层次学生无法明白得所有高层次的知识。

图5.1的层次结构存在上下级关系,如同在军队中,上级能够命令下级,而下级不能命令上级。

假如把图5.1的层次结构当成是一个软件系统的结构,那么上层子系统能够使用下层子系统的功能,而下层子系统不能够使用上层子系统的功能。

二、顺序相邻关系的层次结构顺序相邻关系的层次结构表明通讯只能在相邻两层之间发生,信息只能被一层一层地顺序传递。

这种层次结构的经典之作是计算机网络的OSI参考模型,如图5.2所示。

为了减少设计的复杂性,大多数网络都按层(Layer)或级(Level)的方式组织。

每一层的目的差不多上向它的上一层提供一定的服务,而把如何实现这一服务的细节对上一层加以屏蔽。

一台机器上的第n层与另一台机器上的第n层进行对话。

通话的规则确实是第n层的协议。

数据不是从一台机器的第n层直接传送到另一台机器的第n层。

发送方把数据和操纵信息逐层向下传递。

最低层是物理介质,它进行实际的通讯。

接收方则将数据和操纵信息逐层向上传递。

每一对相邻层之间都有接口。

接口定义了下层提供的原语操作和服务。

当网络设计者在决定一个网络应包含多少层,每一层应当做什么的时候,其中专门重要的工作是在相邻层之间定义清晰的接口。

接口能够使得同一层能轻易地用某一种实现(Implementation)来替换另一种完全不同的实现(如用卫星信道来代替所有的电话线),只要新的实现能向上层提供同一组服务就能够了。

[Tanenbaum 1998]考上“举人”时已五十多岁了图5.1(a)从小学读到博士存在的五个学习时期 图5.1(b )范进的知识结构举人图5.2 计算机网络的OSI 参考模型三、其它的层次结构主 机主 机目前在大型商业应用软件系统中还流行一种包含中间件(Middl eware)的层次结构,如图5.3所示[Ja cobson 1997]。

中间件支持与平台无关的分布式计算,能够用DCOM 和CORB A对象来实现。

图5.3 包含中间件的层次结构5.1.2 客户机/服务器结构让我们先回忆一下早期的电话系统。

贝尔(Alexan der Graham Bel l)于1876年申请了电话专利。

那时期的电话必须一对一对地卖,用户自己在两个电话之间拉一根线。

假如一个电话用户想和其它几个电话用户通话,他必须拉n根单独的线到每个人的房子里。

因此在专门短的时刻内,都市里到处差不多上穿过房屋和树木的混乱的电话线。

专门明显,企图把所有的电话完全互联(如图5.4(a)所示)是行不通的。

贝尔电话公司在1878年开办了第一个交换局。

公司为每个客户架设一条线。

打电话时,客户摇动电话的曲柄使电话公司办公室的铃响起来,操作员听到铃声以后依照要求将呼叫方和被呼叫方用跳线手工连接起来。

这种集中交换式的模型如图5.4(b)所示。

专门快地,贝尔系统的交换局就出现在各地。

人们又要求能打都市间的长途电话,就出现了二级交换局,以后进一步进展为多个二级交换局。

[Tanenbau m 1998]5.4(a )完全互联的电话系统 5.4(b)集中交换式的电话系统假如将图5.4(b)中的电话看成是客户程序,将中心的交换局看成是服务程序,那么图5.4(b)确实是典型的客户机/服务器结构。

注意那个地点客户机和服务器差不多上指软件而不是指硬件(一台计算机能够放多个客户机和服务器软件)。

客户机/服务器结构存在两个显然的优点:(1)以集中的方式高效率地治理通讯。

前面讲电话系统的故事确实是要讲明这一点。

(2)能够共享资源。

比如在信息治理系统中,服务器将信息集中起来,任何客户机都能够通过访问服务器而获得所需的信息。

客户机和服务器之间的通讯以“请求——响应”的方式进行。

客户机先向服务器发起“请求”(Request),服务器再响应(Response)那个请求,如图5.5所示。

请求响应图5.5 Client和Server之间的通讯以“请求——响应”的方式进行采纳“请求——响应”这种通讯方式的差不多动机是为了解决“聚拢”(Rendezvous)问题。

为了理解这一个问题,设想一个人试图在分离的机器上启动两个程序并让它们进行通讯。

还需记住,计算机的运行速度要比人的操作速度高出许多数量级。

在他启动第一个程序后,该程序开始执行并向对等程序发送消息。

在几个微秒内,它便发觉对等程序还不存在,因此就发出一条错误消息,然后退出。

此后,他启动了第二个程序。

不幸的是,当第二个程序开始执行时,它也找不到第一个程序(早已退出)。

即使这两个程序连续地重新试着通讯,但由于它们的执行速度那么高,以致于它们在同一瞬间联系上的概率特不低。

在客户机/服务器结构中,服务器在启动后必须(无限期地)等待客户机的“请求”,因此就形成了“请求——响应”的通讯方式。

在Internet/Intranet领域,目前“扫瞄器—Web 服务器—数据库服务器”结构是一种特不流行的客户机/服务器结构,如图5.6所示。

这种结构最大的优点是:客户机统一采纳扫瞄器,这不仅让用户使用方便,而且使得客户机端不存在维护的问题。

因此,软件开公布和维护的工作不是自动消逝了,而是转移到了Web服务器端。

在Web 服务器端,程序员要用脚本语言编写响应页面。

例如用Microsoft的ASP语言查询数据库服务器,将结果保存在Web 页面中,再由扫瞄器显示出来。

查询HTTP 响应图5.6 “扫瞄器—Web 服务器—数据库服务器”结构5.2 模块设计在设计好软件的体系结构后,就差不多在宏观上明确了各个模块应具有什么功能,应放在体系结构的哪个位置。

我们适应地从功能上划分模块,保持“功能独立”是模块化设计的差不多原则。

相关文档
最新文档