基于工程实践的软件系统设计方案

一、项目概述

  本篇博客将针对本学年工程实践将进行讨论,主要是通过对设计模式与软件架构分析,采用不同的视图来描述软件系统的模型,并对数据库和项目文件内容加以阐释,以形成软件系统概念原型。我们组的项目是校园二手论坛的微信小程序设计与开发,项目发起的原因是学院的学生有二手交易的需求,学校暂时又缺少相关的平台,因此我们计划开发这个小程序。项目主要是实现了二手交易和论坛功能,用户认证后可在小程序上发布闲置的商品,其他用户可进行评论,购买等操作,同时由于需要学生认证,也保障了交易的安全性。论坛功能实现了同学们的问题解答和讨论需求,用户可发布普通消息和匿名消息,其他用户可进行点赞和收藏、评论、转发等操作。

二、设计模式

  项目设计之初就要确定项目整体的架构和设计模式,有了整体的框架后后面的工作才能更好地进行。对于设计模式,若根据设计模式可以完成的任务类型来划分的话,可以分为创建型模式、结构型模式和行为型模式 3 种类型的设计模式。常用的设计方案有单例(Singleton)模式、原型(Prototype)模式、建造者(Builder)模式、享元(Flyweight)模式、策略(Strategy)模式、命令(Command)模式、模板方法(TemplateMethod)模式等等。虽然设计模式很多,但是都要遵循以下原则,即开闭原则(OCP)、Liskov替换原则(LSP)、依赖倒置原则(DDIP)、单一职责原则(SRP)、迪米特法则(LoD) 、合成复用原则(CRP)。
  对于软件架构,常见的有三层架构 、MVC架构、 MVVM架构等。软件架构的设计要考虑满足数量众多的各种系统功能需求,也需要完成诸如系统的易用性、系统的可维护性等非功能性的设计目标, 还要遵从各种行业标准和政策法规。 软件架构模型是通过一组关键视图来描述的,同一个软件架构,由于选取的视角不同(Perspective)可以得到不同的视图,这样一组关键视图搭配起来可以完整地描述一个逻辑自洽的软件架构模型。一般来说,我们常用的几种视图有分解视图、依赖视图、泛化视图、执行视图、实现视图、部署视图和工作任务分配视图。架构风格主要有P2P、管道-过滤器 、发布-订阅 、客户-服务 、CRUD 、层次化。

1. 软件架构

  我们项目使用的是MVC架构,MVC即为Model-View-Controller(模型-视图-控制器)。项目中使用模型(Model)用来封装核心数据和功能,它独立于特定的输出表示和输入行为,是执行任务的代码。模型只有纯粹的功能性接口,也就是一系列的公开方法。视图(View)用来向用户显示信息,就是小程序显示在用户手机上的页面。它获得来自模型的数据,决定模型以什么样的方式展示给用户。而模型内部保留所有对应视图的相关信息,在模型的状态发生改变时,即可以通知所有的视图进行更新。控制器(Controller)是和视图联合使用的,它捕捉手指滑动、点击等事件,将其转化成服务请求,然后再传给模型或者视图,而后改变模型的状态,并最后导致视图也即用户页面的更新。

2. 设计模式

  设计模式的本质是面向对象设计原则的实际运用总结出的经验模型。对类的封装性、继承性和多态性以及类的关联关系和组合关系的充分理解的基础上才能准确理解设计模式。
  根据模式是主要用于类上还是主要用于对象上来划分的话,可分为类模式和对象模式两种类型的设计模式;
  根据设计模式可以完成的任务类型来划分的话,可以分为创建型模式、结构型模式和行为型模式 3 种类型的设计模式;
  常见的设计模式有:单例(Singleton)模式,原型(Prototype)模式,建造者(Builder)模式,代理(Proxy)模式,适配器(Adapter)模式,装饰(Decorator)模式,外观(Facade)模式,享元(Flyweight)模式,策略(Strategy)模式,命令(Command)模式。

三、项目视图

1. 逻辑视图

  发布商品和发布主体贴功能逻辑相似,这里以发布商品为例,给出相应的逻辑视图。

2. 模块视图

  功能模块可以分为两大部分,第一部分是用户模块,用户可以发布商品和发布主体贴,并进行相应的点赞、评论和收藏等操作;第二部分是管理员模块,管理员负责审核用户发布的商品和主题帖,评估是否有相关违例行为,并审核用户使用过程中的举报。

3. 项目部署视图

  主要考虑用户发布行为,对其部署如下

4. 工作分配视图

四、数据库和文件目录结构

1. 数据库设计

根据当前项目的的数据模型以及关联关系,设计关系型表如下:

  • User
  • Goods
  • Transaction
  • Comment

2. 文件目录结构

  以前端部分为例,前端项目主体包括pages文件夹,工具包utils文件夹,全局脚本app.js文件,全局配置文件app.json,全局样式文件app.wxss。页面文件pages中包括四个文件,分别为xxx.js, xxx.json, xxx.wxml, xxx.wxss。具体目录结构如下。

五、运行环境和技术选型

  项目前端部分由微信小程序官方提供的IDE和语言来开发,后端使用springboot+maven进行开发,实现了前后端分离,数据库采用MySql存储用户数据,整体在Linux上部署上线。项目开发完成上线后,用户可在微信客户端的小程序模块添加并使用。

六、概念模型的核心工作机制

  每个视图都是从不同的角度对软件架构进行描述和建模,比如从功能的角度、从代码结构的角度、从运行时结构的角度、从目录文件的角度,或者从项目团队组织结构的角度。 软件架构代表了软件系统的整体设计结构,它应该是所有这些视图的集合。但我们不会将不同角度的这些视图整合起来,因为不便于阅读和更新。不过我们会有意识地将不同角度的视图之间的映射关系和重叠部分了然于胸,从而深刻理解软件架构内在的一致性和完整性,这就是系统概念原型。
  由此我们可得出本项目的概念原型。本系统由用户注册并登录后,发布一个闲置商品或者主题帖,由管理员审核通过后,其他用户可以对其进行点赞、评论、收藏等操作,若要获取更多信息,可私聊其他用户;商品可以购买并查看发货信息;收藏和评论的记录用户可在个人中心进行查看。

七、总结

  本博客通过对软件系统分析和设计,总结了软件结构特点,比如设计模式、软件架构风格与策略等,同时通过多个角度的视图来对系统进一步深入解析,最终形成软件系统概念原型。整体分析过程加深了我们对软件架构内在的一致性和完整性的理解,同时若有不足之处请加以指正。

  参考:https://gitee.com/mengning997/se/tree/master/ppt 

posted @ 2020-12-26 19:47  zerone01  阅读(161)  评论(0编辑  收藏  举报