软件设计综述

本文详细阐述了软件设计的任务与目标,探讨了软件体系的逻辑和物理架构,包括MVC模式,以及软件设计的流程,涵盖界面层、业务逻辑层和数据存储设计。同时介绍了软件设计说明书的重要性和内容,以及数据字典在设计中的作用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

软件设计综述

1. 软件设计的任务与目标

什么是软件设计?
软件设计是针对需求分析阶段提出的系统需求,给出具体的软件设计方案,解决如何做的问题。即软件需求是解决“做什么”,软件设计是解决“如何做”。
软件设计简述:
任务和目标:以软件需求规格设计说明书为依据,根据其提出的系统目标,进行数据设计(数据结构),系统结构设计(软件系统的体系结构),过程设计(吧结构转换为软件的过程性描述),并且形成软件的具体实现方案,撰写《软件设计说明书》。
成果:《软件设计说明书》简称SDS
实施人:系统架构师,软件设计师。

2. 软件体系的内涵与主要类型

软件体系是一个系统的高层次的组织结购,是系统的组件和组件之间的关系,组件与系统之间的关系,以及其中的设计和原理。其中,体系是针对一个系统而言,每个系统都有其自身的独特体系结构,而体系结构也是决定软件的开发。如何组织一个系统的体系结构,如何对当前系统的总体结构进行设计,关乎于系统开发的顺利进行,是软件设计的第一步。
软件体系结构有一个模式为体系结构模式,这个模式是根据软件开发经验总结出来,且命名的,是针对某一类型软件具有通用性和推广价值的设计方案。

UML的架构:“4+1”视图,包含4种架构视图,如下所示

1. 逻辑结构:

(1) 整体/模块化结构
在这里插入图片描述
(2) 分层架构
在这里插入图片描述
较高的层可以调用较低的层
(3) MVC架构
Model View ConTroller,典型的软件开发架构,分为三层,持久化层,控制层,界面层,这三层可以单独存在,也可以连在一起,即可以同时开发这三个层面,从而使得开发的效率变快,开发的时间变短,并且代码组织清晰,更易于维护,还有很高的代码重用性,更好的团队开发体验性,更高的代码清晰度。
在这里插入图片描述
在这里插入图片描述

2. 物理架构:

(1) 单机模式(单机版)
特点:不依赖网络,信息无法共享
在这里插入图片描述
(2) C/S架构
实现了信息共享,有一部分源码会在本地计算机上,人机交互性比较好(时间上响应会比较块),系统效率比较高,维护升级比较困难,胖客户端瘦服务器,数据安全性差,

在这里插入图片描述

(3) B/S架构
B/S是浏览器服务器的系统,安装比较便利,与平台没有关系,这个在本地计算机的代码会很少,所以响应时间会比较长与C/S比较的话,

在这里插入图片描述
(4) 混合架构
既然B/S,C/S各有优缺点,那么就会想到将两种架构结合起来,因此就有了混合架构

在这里插入图片描述
3. 进程架构:
系统运行时线程的构成及其控制,与系统性能有关
4. 开发架构:
软件物理单元的组成及其关系,与软件开发管理及开发过程的设计有关。

3. 软件设计的流程,内容与主要的技术

设计流程:
设计界面层,设计业务逻辑层,设计数据库,设计对应的接口,前三个可以同时进行,然后再按照设计的方式来定义接口,将前面三个部分连接起来。以下是对应的流程。

1. 设计界面层流程:

在这里插入图片描述

(1) 交互设计,生成原型,简易的界面交互模式,根据功能而完成的界面
(2) 视觉设计:生成产品模型效果图。原型接受之后,就应该设计视觉效果,使人们在使用的时候能在视觉上产生愉悦感,更加重视色彩,风格,图画等等。
(3) 生成DEMO:是用前端技术实现出来,以便于后端可以在界面的基础上完成对应的要实现的功能。
(4) 主要用到的技术是前端的技术,以及界面设计的视觉技术。

2. 业务逻辑层的设计流程:

领域模型:
领域模型领域模型是对真实世界中概念类的表示,而不是软件对象的表示。它不是用来描述软件类、软件架构领域层或有职责软件对象的一组图。用一组类图来表示,这些类没有操作,模型可以反映出领域对象或者概念类,概念类之间的关联,概念类的属性等等。在其中,有一些概念类的知识。主要有识别概念类,即在一个系统中我们要识别出其中的概念类,并且能够分析出类之间的关联,这种关联在这个系统中是否有影响和作用,(在关联中,我们可以用UML来表示),还有就是关联的方向,关联的角色,多重关联。分析出这些将有利于我们进行设计软件。
设计模式:
是一套一套被反复使用、多数人知晓的、经过分类编目的、系统设计的
总结。其中有一种设计模式是控制器,控制器有两种方案,一个是方面控制器,一个是用例控制器。还有其他的设计模式,比如,信息专家,创建者,低耦合(不要与陌生人讲话,即不要与陌生的进行通讯),高内聚等等。

3. 数据存储设计流程:

设计范围:

	业务数据在外村中的存储结构:
		文件:
			格式有自定义格式和标准格式两种

优缺点:不需要其他软件的支持,容易作为网络数据交换数据,不利于数据的并发访问
数据库:
可以实现数据共享,减少冗余度,数据独立,并且可以实现数据的集中控制,还有就是数据库具有数据安全性,一致性,可靠性的特点。数据库有关系数据库,网状数据库,树状数据库等等。
业务数据在内存中的管理组织:
内存数据库 (Main Memory Database, MMDB. 亦称为
主存数据库),速度快,提高性能,但是存在的问题是内存数据与磁盘数据同步。内存数据库有:TimeTen,SolidDB等等。
数据库设计:
设计内容:数据表,索引,视图,存储过程/函数。
信息来源:领域模型,业务原则。
业务实体对应数据表,业务实体属性对应表的字段,实体关系对应表与表之间的关联(涉及外键)
设计策略:

a. 表的命名:与业务实体一致,避免保留字。
b. 字段命名:表面写_属性名。
c. 拆分大表,使得经常访问的字段为一张表,避免检索过程中的效率低下。
d. 使用数据字典。
e. 使用递归表。

4. 软件设计说明书的用途和主要内容

目的:

  1. 便于项目内部各职能的成员进行沟通和项目执行的依据(比如编码,测试等等)

  2. 是作为项目的一部分,是项目文档的一部分。
    内容:

  3. . 前言
    1.1 编写目的
    1.2 项目概述
    1.3 术语定义、缩写词
    1.4 引用文档
    2 2. . 设计约束
    2.1 设计目标
    2.2 设计原则
    2.3 设计约束
    2.1 3.1 遵循标准
    2.2 3.2 环境与工具
    2.3 3.3 技术限制

  4. 逻辑架构设计
    3 3 .1 设计决策
    3 3 .2 软件单元
    3 3 .3 处理流程

  5. 接口设计
    4.1 外部接口( ( 包括界面、与外部系统) )
    4.2 内部接口

  6. 数据库存储设计
    5.1 数据库表
    5.2 视图、函数及存储过程

  7. 详细设计
    6.1 软件单元1 1
    6.1.1 功能描述 6.1.2 处理流程
    6.1.3 内部数据 6.1.4

5. 数据字典

数据字典:
是递归表,是供他表查询的基础数据。
在存储中,有一些具有特殊结构的数据需要将其中的关系与结构存储下来,而普通的表没有办法做到这一点,所以就有了数据字典的概念。有的结构比如是树状结构,数据字典就相当于一个表中存了根目录,和子目录,子目录的子目录等等。
与数据库中的数据字典区分,数据库对于字典的定义是:指对数据的数据项、数据结构、数据流、数据存储、处理逻辑、外部实体等进行定义和描述,其目的是对数据流程图中的各个元素做出详细的说明。

数据字典的结构:
1 dict_id 数据字典的id值
2 dict_parent_id  数据字典中该节点所对用的双亲的id
3 dict_index   数据字典中该节点显示的优先值
4 dict_name  数据字典中的名称
5 dict_value   数据字典该节点所对用的值。
 注意数据字典是一个递归表,其dict_parent_id是指向的上级节点。

例如:
Dict_id Dict_parent_id Dict_index Dict_name Dict_value
1 null 1 数据字典 根
2 1 1 Null 书籍类型
3 1 2 Null 书籍语言
4 2 1 Null 悬疑
5 2 2 Null 童话
6 3 1 Null 汉语
7 3 2 Null 英语
结构是:
在这里插入图片描述

数据字典的接口:
如下:

public interface IDataDictDAO {
     //  增加一条数据信息
	public int insert(DataDict ddict);
     //  根据给定的数据字典信息进行更新
	public int update(DataDict ddict);
     //  根据给定的id删除一条数据字典信息
	public int delete(int ID);
     //  根据给定的数据字典查找信息查找
	public List<DataDict> select(String condt); 
    //  根据给定id查找以此id为根的下层子节点
	public List<DataDict> findByID(int id) ;
    //  根据给定id查找以此id为根的所有下层子节点
	public void findAllSonByID(List<DataDict> list, int id);
    //  根据给定id判断该节点是否有下层子节点
	public boolean hasChildren(int id) ;
}

如何使用:
比如获取所有的书籍类型:

List<DataDict> list = new LinkedList<DataDict>();
new DataDictSrv().findAllSonByID(list, ConstValue.CONST_PLAYTYPE);

这样就从数据库中找到所有的书籍的类型然后遍历list就可以输出书籍类型

软件设计说明书 版本:V1.0 文 档 编 号 保 密 等 级 作 者 最后修改日期 审 核 人 最后审批日期 批 准 人 最后批准日期 修订记录 日期 版本 修订说明 修订人 目 录 1 引言 1 1.1 文档控制 1 1.2 目的 1 1.3 范围 1 1.4 定义、首字母缩写词和缩略语 1 1.5 参考资料 1 1.6 概述 1 2 整体说明 1 2.1 业务背景 1 2.2 功能模型 1 2.3 用例模型概述 1 2.3.1 子系统一 1 2.4 假和依赖关系 1 3 包1:出入库 2 3.1 冲补帐务-样例1 2 3.1.1 系统用例 2 3.1.2 类关系图 2 3.1.3 类图 3 3.1.4 顺序图 4 3.2 冲补入库单-样例2 4 3.2.1 入库单冲账 4 3.2.2 入库单补账 6 引言 文档控制 目的 范围 定义、首字母缩写词和缩略语 参考资料 概述 整体说明 业务背景 [此小节应说明软件的业务背景,包括组织机构、业务流程等。] 功能模型 [此小节应说明用例包的组织,以用例包的形式来表达软件的功能。] 用例模型概述 子系统一 用例图 [此小节应说明此子系统下的用例图。] 主角列表 [此小节以列表的形式说明此子系统相关的主角。] 用例列表 [此小节以列表的形式说明此子系统相关的用例。] 假和依赖关系 [本节说明所有重要的技术可行性假、子系统或构件可用性假,或者可作为此文档所述软件可行性的基础的其他与项目有关的假。] 包1:出入库 画出包图、核心业务处理流程、状态转换图来说明核心业务的工作方式。 冲补帐务-样例1 系统用例 类关系图 类图 实体类 边界类 控制类 顺序图 分仓保管帐建帐处理流程 备注: 去掉价位一栏; 收获年限改为“年限“,入库年限改为非必输项; 国别改为必输项; 等级改为非必输项; 增加建帐的修改功能:只能修改等级、入库年限、产地。 冲补入库单-样例2 入库单冲账 前台界面 名称:account_grainin_strike.jsp 界面说明: 序号 界面名称 表 字段 字段含义 备注 1 编号 入库单 RC_RKD_RKDBH 入库单编号 顺序号 入库单 RC_RKD_SXH 顺序号 计划安排表 入库单 RC_RKD_RKJHAPBNM 入库计划安排表内码 需要转化为编号 计划明细 入库单 RC_RKD_JHMXNM 计划明细内码 需要转化为编号 入库通知单编号 入库单 RC_RKD_ZGKRKTZDNM 直管库入库通知单内码 需要转化为编号 客户名称 入库单 RC_RKD_KHNM,RC_RKD_KHMC 客户名称 客户内码 合同号 入库单 RC_RKD_HTNM, RC_RKD_HTH 合同号 合同内码 到库时间 入库登记信息 RC_RKDJXX_DKSJ 到库时间 收获年份 入库单 RC_RKD_NX 年限 等级 入库检验信息 RC_RKJYXX_WLDJNM 物料等级内码 后台服务 功能简介 入库账务服务 包名 com.digitalchina.zcl.stock.account 类名 AccountGraininServer 方法 名称 参数 返回值 描述 入库单补账 前台界面 名称:account_grainin_repair.jsp 界面说明: 序号 界面名称 表 字段 字段含义 备注 1 编号 入库单 RC_RKD_RKDBH 入库单编号 顺序号 入库单 RC_RKD_SXH 顺序号 扣杂 入库检验信息 RC_RKJYXX_KZZ 扣杂质(%) 扣水% 入库检验信息 RC_RKJYXX_KSF 扣水份(%) 备注 入库检验信息 RC_RKJYXX_JYYJBZ 检验意见备注 3 选择类型 入库检验信息 RC_RKJJXX_JJLX 检斤类型 0,称重;1,标准包 毛重 入库检验信息 RC_RKJJXX_MZ 毛重 水分扣量 入库检验信息 RC_RKJJXX_SFKL 水分扣量 杂质扣量 入库检验信息 RC_RKJJXX_ZZKL 杂质扣量 其它扣量 入库检验信息 RC_RKJJXX_QTKL 其它扣量 后台服务 功能简介 入库账务服务 包名 com.digitalchina.zcl.stock.account 类名 AccountGraininServer 方法 名称 参数 返回值 描述 补账 repairAccount 被补入库单内码 入库单补账; 根据被补单据产生一笔单据(RC_RKD): 红单标志为蓝单; 补帐标志为1补帐 补帐单据内码为被补单据内码; 补帐日期为当前日期; 审核标志为未审核; 能否记保管帐为1能; 能否记统计帐为1能; 保管帐记帐标志为未记帐; 统计帐记帐标志为未记帐; 删除标志为未删除; 制单时间为当前时间; 其余要素用户录入;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值