软件系统设计方案
软件系统设计方案
1、前言:
本篇博客在高级软件工程课堂上所学的知识,对工程实践项目进行软件系统设计分析,从软件结构特点,比如设计模式,软件架构风格与策略等出发进行总结,并采用比如分解视图、依赖视图、泛化视图等不同的视图来描述项目的软件系统概念原型。
项目简介:基于Python信息搜集中网络爬虫主要的抓取对象为新浪财经网和卓创资讯网。网络爬虫需要对商品的价格、交易量、数量、信息等数据的抓取,对于抓取回来的网页进行加工处理并且存储到数据库中。
2、设计方案
2.1、架构风格
软件架构设计既要考虑满足数量众多的各种系统功能需求,也需要完成诸如系统的易用性、系统的可维护性等非功能性的设计目标,还要遵从各种行业标准和政策法规。在课堂上我们学到的架构风格有:管道-过滤器、客户-服务、P2P、发布-订阅、CRUD、层次化等。
为了确定我们所要使用的架构风格,第一步是要分析项目需求,因为我们的过程是先爬取数据,再对数据进行处理,最后可视化展示我们所需要的信息。因此我们选择管道-过滤器的架构风格。在管道和过滤器软件体系结构中,每个模块都有一组输入和一组输出。每个模块从它的输入端接收输入数据流,在其内部经过处理后,按照标准的顺序,将结果数据流送到输出端,以达到传递一组完整的计算结果实例的目的。
模式结构图
2.2、设计模式
设计模式(Design pattern)代表了最佳的实践,通常被有经验的面向对象的软件开发人员所采用。设计模式是软件开发人员在软件开发过程中面临的一般问题的解决方案。这些解决方案是众多软件开发人员经过相当长的一段时间的试验和错误总结出来的。
根据设计模式可以完成的任务类型来划分的话,可以分为创建型模式、结构型模式和行为型模式 3 种类型的设计模式。
我们的项目采用职责链(Chain of Responsibility)模式:为了避免请求发送者与多个请求处理者耦合在一起,将所有请求的处理者通过前一对象记住其下一个对象的引用而连成一条链;当有请求发生时,可将请求沿着这条链传递,直到有对象处理它为止。通过这种方式将多个请求处理者串联为一个链表,去除请求发送者与它们之间的耦合。
其UML图如下:
3 、数据库设计与核心数据结构
字段名 |
字段类型 |
字段描述 |
长度 |
主键 |
id |
int |
账号 |
32 |
Y |
name |
string |
姓名 |
不限 |
N |
password |
string |
密码 |
不限 |
N |
gender |
string |
性别 |
16 |
N |
potrait |
string |
头像 |
不限 |
N |
price_type |
string |
价格类型 |
不限 |
N |
price |
float |
价格 |
不限 |
N |
provider |
string |
供货商 |
不限 |
N |
date |
datetime |
日期 |
64 |
N |
4、分解视图
分解是构建软件架构模型的关键步骤,分解视图也是描述软件架构模型的关键视图,一般分解视图呈现为较为明晰的分解结构(breakdown structure)特点。分解视图用软件模块勾划出系统结构,往往会通过不同抽象层级的软件模块形成层次化的结构。
5、依赖视图
依赖视图展现了软件模块之间的依赖关系。比如一个软件模块A调用了另一个软件模块B,那么我们说软件模块A直接依赖软件模块B。如果一个软件模块依赖另一个软件模块产生的数据,那么这两个软件模块也具有一定的依赖关系。
6、执行视图
执行视图展示了系统运行时的时序结构特点,比如流程图、时序图等。执行视图中的每一个执行实体,一般称为组件(Component),都是不同于其他组件的执行实体。如果有相同或相似的执行实体那么就把它们合并成一个。
7、实现视图
实现视图是描述软件架构与源文件之间的映射关系。比如软件架构的静态结构以包图或设计类图的方式来描述。
8、工作分配视图
分配视图将系统分解成可独立完成的工作任务,以便分配给各项目团队和成员。工作分配视图有利于跟踪不同项目团队和成员的工作任务的进度,也有利于在个项目团队和成员之间合理地分配和调整项目资源,甚至在项目计划阶段工作分配视图对于进度规划、项目评估和经费预算都能起到有益的作用。
9、概念原型的核心工作机制及运行环境
本次实践旨在构建一个基于Python的智能信息搜索系统和数据分析系统,该系统能够自动获取企业所需原料价格等各种信息,并将结果清晰简洁的可视化展现。先模拟登陆过程,成功登陆网站,获取最新网页,并与数据库记录内容做对比,从网页源码或json包中筛选关键元素,将获取的数据写入数据库,最后直观展示数据。
开发环境:mac
开发工具:python、mongodb数据库、python IDE(Pycharm)
10、总结
在本节课的学习之后,清楚的了解了软件系统的设计方案,对于上节课的需求分析也有了进一步的掌握,在此基础上更进一步加深了对自己工程实践项目的认知,相信在以后的学习中会更加游刃有余。