系统背景
本项目需要设计一个工业互联网平台,完成用户管理,设备管理(包括设备状态监测和设备控制)以及系统故障报警等功能。工作人员可以通过云端平台完成对设备的状态监测和控制,进而减小工作强度,提升工作效率。
本文将对项目进行完整的分析,给出项目的设计方案和软件架构,从不同的角度以不同的视图给出对项目的描述。
一 系统设计
1.1 软件架构
本项目是在设计一个工业互联网平台,需要大量的人机交互,所以采用了MVC架构模式来进行设计。
MVC是三个单词的首字母缩写,分别是Model(模型)、View(视图)和Controller(控制)。MVC模式认为,程序不论简单或复杂,从结构上看,都可以分成三层。
1)最上面的一层,是直接面向最终用户的"视图层"(View)。它是提供给用户的操作界面,是程序的外壳。
2)最底下的一层,是核心的"数据层"(Model),也就是程序需要操作的数据或信息。
3)中间的一层,就是"控制层"(Controller),它负责根据用户从"视图层"输入的指令,选取"数据层"中的数据,然后对其进行相应的操作,产生最终结果。
这三层是紧密联系在一起的,但又是互相独立的,每一层内部的变化不影响其他层。每一层都对外提供接口(Interface),供上面一层调用。这样一来,软件就可以实现模块化,修改外观或者变更数据都不用修改其他层,大大方便了维护和升级。同时降低了系统中客户和服务构件之间耦合度,提高了服务构件的可重用性。
在本系统中,Controller将会由业务逻辑层和数据访问层两部分共同组成。
本项目中选择了B/S模式。B/S架构的全称为Browser/Server,即浏览器/服务器结构。Browser指的是Web浏览器,极少数事务逻辑在前端实现,主要事务逻辑在服务器端实现。
采用B/S架构的系统无须特别安装,只有Web浏览器即可。
服务器可以直接部署在广域网上,通过一定的权限控制实现多客户访问即可。
同时用户无需下载及升级多个客户端,直接升级服务器即可。
1.2 接口设计
API是指应用程序编程接口,我们通过API接口可以实现特定的功能,而不需要了解其内部实现细节。可以把API接口理解为是特定服务的一种封装,将服务封装起来提供给他人调用,这样一来很多功能不需要二次开发。
接口名称 | 接口地址 | 请求方式 | 请求参数 | 响应格式 |
register | /register | POST | username,email,passwd | success/fail |
login | /login | POST | username,passwd | success/fail |
userInfo | /profile/{username} | GET | username | userInfo |
addDevice | /addDevice | POST | deviceId,type,IPaddress | success/fail |
getDevSta | /getDevSta | GET | deviceId | devStaInfo |
ctrDevSta | /ctrDevSta | POST | deviceId,state | success/fail |
delDev | /delDev | POST | deviceId | success/fail |
二 系统视图
2.1 分解视图
分解是构建软件架构模型的关键步骤,分解视图也是描述软件架构模型的关键视图,一般分解视图呈现为较为明晰的分解结构(breakdown structure)特点。分解视图用软件模块勾划出系统结构,往往会通过不同抽象层级的软件模块形成层次化的结构。
2.2 依赖视图
依赖视图展现了软件模块之间的依赖关系。比如一个软件模块A调用了另一个软件模块B,那么我们说软件模块A直接依赖软件模块B。如果一个软件模块依赖另一个软件模块产生的数据,那么这两个软件模块也具有一定的依赖关系。
依赖视图在项目计划中有比较典型的应用。比如它能帮助我们找到没有依赖关系的软件模块或子系统,以便独立开发和测试,同时进一步根据依赖关系确定开发和测试软件模块的先后次序。
2.3 泛化视图
泛化视图展现了软件模块之间的一般化或具体化的关系,典型的例子就是面向对象分析和设计方法中类之间的继承关系。泛化视图有助于描述软件的抽象层次,从而便于软件的扩展和维护。
下图展示了User,Worker,Manager之间的泛化关系。
2.4 执行视图
执行视图展示了系统运行时的时序结构特点,比如流程图、时序图等。执行视图中的每一个执行实体,一般称为组件(Component),都是不同于其他组件的执行实体。如果有相同或相似的执行实体那么就把它们合并成一个。
执行实体可以最终分解到软件的基本元素和软件的基本结构,因而与软件代码具有比较直接的映射关系。在设计与实现过程中,我们一般将执行视图转换为伪代码之后,再进一步转换为实现代码。
2.5 部署视图
部署视图是将执行实体和计算机资源建立映射关系。这里的执行实体的粒度要与所部署的计算机资源相匹配,比如以进程作为执行实体那么对应的计算机资源就是主机,这时应该描述进程对应主机所组成的网络拓扑结构,这样可以清晰地呈现进程间的网络通信和部署环境的网络结构特点。
部署视图有助于设计人员分析一个设计的质量属性,比如软件处理网络高并发的能力、软件对处理器的计算需求等。
三 数据库设计
数据库设计主要包含下列关系表:
用户表:
字段 | 类型 | 注释 |
ID | String | 用户编号 |
name | String | 姓名 |
password | String | 登录密码 |
String | 邮箱 | |
grade | int | 用户等级,标识管理员或值班员 |
设备表:
字段 | 类型 | 注释 |
ID | String | 设备编号 |
class | String | 设备类型 |
area | int | 所属区域 |
state | int | 设备状态 |
IPaddress | String | IP地址 |
区域表(网关表):
字段 | 类型 | 注释 |
areaId | int | 区域编号 |
IPaddress | String | 对应网关IP地址 |
discribe | String | 描述信息 |
四 运行环境及技术选型
开发语言:JAVA
Web开发框架:SpringBoot
缓存:Redis
数据库:MySQL
运行环境:Linux平台+Docker容器
五 系统工作机制
概念原型是一种虚拟的、理想化的软件产品形式。具体的讲,概念原型 = 用例 + 数据模型。
通过上述分析,总结项目的工作过程如下:
用户成功登录后,我们根据用户等级为其赋予不同的功能。对于系统管理员,可以进行维护信息,用户管理,设备管理,接受报警信息等操作。对于值班员可以进行维护信息,设备管理,接受报警信息等操作,但设备管理中不能创建,删除以及修改设备信息。
针对用户的不同操作请求,由业务处理层给出不同的响应,比如驱动设备完成相关操作,返回包含用户信息和设备状态的页面等。
参考文献:《软件科学基础概念》