软件设计综述
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.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 技术限制 -
逻辑架构设计
3 3 .1 设计决策
3 3 .2 软件单元
3 3 .3 处理流程 -
接口设计
4.1 外部接口( ( 包括界面、与外部系统) )
4.2 内部接口 -
数据库存储设计
5.1 数据库表
5.2 视图、函数及存储过程 -
详细设计
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就可以输出书籍类型