商户交流小程序——软件系统设计方案
1 前言
本篇博客基于高级软件工程课程内容,针对工程实践项目——商户交流小程序进行软件系统设计分析,从设计模式,软件架构,各类视图,以及数据库设计,软件开发目录的角度进行分析,最终实现软件系统概念原型。
2 设计方案
2.1 设计模式
设计模式的本质是面向对象设计原则的实际运用总结出的经验模型。对类的封装性、继承性和多态性以及类的关联关系和组合关系的充分理解的基础上才能准确理解设计模式。正确使用设计模式具有以下优点: 可以提高程序员的思维能力、编程能力和设计能力。使程序设计更加标准化、代码编制更加工程化,使软件开发效率大大提高,从而缩短软件的开发周期。使设计的代码可重用性高、可读性强、可靠性高、灵活性好、可维护性强。
根据模式是主要用于类上还是主要用于对象上来划分的话,可分为类模式和对象模式两种类型的设计模式。类模式:用于处理类与子类之间的关系,这些关系通过继承来建立,是静态的,在编译时刻便确定下来了。比如模板方法模式等属于类模式。对象模式:用于处理对象之间的关系,这些关系可以通过组合或聚合来实现,在运行时刻是可以变化的,更具动态性。由于组合关系或聚合关系比继承关系耦合度低,因此多数设计模式都是对象模式。
2.2 软件架构
常见的软件架构有:三层架构,MVC架构,MVVM架构。本项目采用MVVM架构的方式,MVVM即 Model-View-ViewModel,最早由微软提出来,借鉴了桌面应用程序的MVC模式的思想,是一种针对WPF、Silverlight、Windows Phone的设计模式,目前广泛应用于复杂的Javacript前端项目中。在前端页面中,把Model用纯JavaScript对象表示,View负责显示,两者做到了最大限度的分离。把Model和View关联起来的就是ViewModel。ViewModel负责把Model的数据同步到View显示出来,还负责把View的修改同步回Model。
3接口API
app(Object object):注册小程序。接受一个 Object 参数,其指定小程序的生命周期回调等。
getApp(Object object):获取到小程序全局唯一的 App 实例。
Page(Object object):注册小程序中的一个页面。接受一个 Object 类型参数,其指定页面的初始数据、生命周期回调、事件处理函数等。
PageObject[] getCurrentPages(): 获取当前页面栈。数组中第一个元素为首页,最后一个元素为当前页面。
Component(Object object): 创建自定义组件,接受一个 Object 类型的参数。
Behavior(Object object): 注册一个 behavior,接受一个 Object 类型的参数。
boolean wx.canIUse(string schema):判断小程序的API,回调,参数,组件等是否在当前版本可用。
onLoad: function (options):生命周期函数--监听页面加载。
onReady: function ():生命周期函数--监听页面初次渲染完成。
onShow: function () :生命周期函数--监听页面显示。
onHide: function ():生命周期函数--监听页面隐藏。
onUnload: function ():生命周期函数--监听页面卸载。
wx.navigateTo(Object object):保留当前页面,跳转到应用内的某个页面。但是不能跳到 tabbar 页面。使用 wx.navigateBack 可以返回到原页面。
wx.request(Object object):发起 HTTPS 网络请求。
wx.setStorageSync(string key, any data):将数据存储在本地缓存中指定的 key 中。会覆盖掉原来该 key 对应的内容。除非用户主动删除或因存储空间原因被系统清理,否则数据都一直可用。单个 key 允许存储的最大数据长度为 1MB,所有数据存储上限为 10MB。
wx.getStorageSync(string key):从本地缓存中异步获取指定 key 的内容。
wx.clearStorageSync():清理本地数据缓存。
3 项目视图
3.1 分解视图
分解是构建软件架构模型的关键步骤,分解视图也是描述软件架构模型的关键视图,一般分解视图呈现为较为明晰的分解结构(breakdown structure)特点。分解视图用软件模块勾划出系统结构,往往会通过不同抽象层级的软件模块形成层次化的结构。由于前述分解方法中已经明确呈现出了分解视图的特征,我们这里简要了解一下分解视图中常见的软件模块术语。

3.2 依赖视图
依赖视图展现了软件模块之间的依赖关系。比如一个软件模块A调用了另一个软件模块B,那么我们说软件模块A直接依赖软件模块B。如果一个软件模块依赖另一个软件模块产生的数据,那么这两个软件模块也具有一定的依赖关系。 依赖视图在项目计划中有比较典型的应用。比如它能帮助我们找到没有依赖关系的软件模块或子系统,以便独立开发和测试,同时进一步根据依赖关系确定开发和测试软件模块的先后次序。 依赖视图在项目的变更和维护中也很有价值。比如它能有效帮助我们理清一个软件模块的变更对其他软件模块带来影响范围。

3.3 泛化视图
泛化视图展现了软件模块之间的一般化或具体化的关系,典型的例子就是面向对象分析和设计方法中类之间的继承关系。值得注意的是,采用对象组合替代继承关系,并不会改变类之间的泛化特征。因此泛化是指软件模块之间的一般化或具体化的关系,不能局限于继承概念的应用。 泛化视图有助于描述软件的抽象层次,从而便于软件的扩展和维护。比如通过对象组合或继承很容易形成新的软件模块与原有的软件架构兼容。

3.4 执行视图
执行视图展示了系统运行时的时序结构特点,比如流程图、时序图等。执行视图中的每一个执行实体,一般称为组件(Component),都是不同于其他组件的执行实体。如果有相同或相似的执行实体那么就把它们合并成一个。 执行实体可以最终分解到软件的基本元素和软件的基本结构,因而与软件代码具有比较直接的映射关系。在设计与实现过程中,我们一般将执行视图转换为伪代码之后,再进一步转换为实现代码。



3.5 部署视图
部署视图是将执行实体和计算机资源建立映射关系。这里的执行实体的粒度要与所部署的计算机资源相匹配,比如以进程作为执行实体那么对应的计算机资源就是主机,这时应该描述进程对应主机所组成的网络拓扑结构,这样可以清晰地呈现进程间的网络通信和部署环境的网络结构特点。当然也可以用细粒度的执行实体对应处理器、存储器等。 部署视图有助于设计人员分析一个设计的质量属性,比如软件处理网络高并发的能力、软件对处理器的计算需求等。

3.6 工作分配视图
工作分配视图将系统分解成可独立完成的工作任务,以便分配给各项目团队和成员。工作分配视图有利于跟踪不同项目团队和成员的工作任务的进度,也有利于在个项目团队和成员之间合理地分配和调整项目资源,甚至在项目计划阶段工作分配视图对于进度规划、项目评估和经费预算都能起到有益的作用。 每个视图都是从不同的角度对软件架构进行描述和建模,比如从功能的角度、从代码结构的角度、从运行时结构的角度、从目录文件的角度,或者从项目团队组织结构的角度。 软件架构代表了软件系统的整体设计结构,它应该是所有这些视图的集合。但我们不会将不同角度的这些视图整合起来,因为不便于阅读和更新。不过我们会有意识地将不同角度的视图之间的映射关系和重叠部分了然于胸,从而深刻理解软件架构内在的一致性和完整性,这就是系统概念原型。

4 数据库设计
4.1 普通用户

4.2 商户

4.3 管理员

4.4 推送信息

5 软件系统运行环境和技术选型
本工程实践项目前端使用js,在Visual Studio中进行编码,并用小程序官方开发软件进行测试,使用微信小程序的原生框架进行开发,后端使用Node.js,数据库使用MongoDB。
6 系统概念原型和核心工作机制
概念是人对能代表某种事物或者发展过程的特点及其意义所形成的思维结论,而概念原型是一种虚拟化的、理想化的软件产品形式。本项目中,用户通过注册、登录使用本小程序,可以使用搜索等功能。而商户还可以进行店铺信息管理。管理员拥有审核权限。

浙公网安备 33010602011771号