基于React的MERN技术栈即时通讯软件设计-需求分析与软件架构

AMOYHANS 2021-12-26 13:38:53

一、项目概述
   传统前端技术不适应大规模应用,当系统中有很多模型和相应的视图时,其复杂度就会迅速扩大,非常难以理解和调试,特别是模型和视图可能存在双向数据流动。由此催生React、Vue等使用虚拟DOM技术、提倡组件化的框架。
   相较于国内流行的Vue,国外使用更频繁的react具有更适用于大型应用、与其他框架、库兼容性更好、使用了Javascript的扩展语法-JSX、更灵活等特点。
   我们在react的基础上,开发一个即时通讯软件,熟悉从前端架构设计,到前后端分离、页面模块化,到应用打包部署的开发流程,学习并掌握react和数据库持久化等技术。在开发过程中探索react高阶组件的使用、深入理解函数式编程的思想。

二、技术选型
    与React相关的技术栈很多,综合分析,我们选择了应用比较广泛且相对成熟的MERN stack的全栈开发方式。
    M代表Mongodb:
    目前普遍认为JSON格式是理解和存储数据最自然的方式,JSON格式比传统的关系数据模型有更强大的数据表达能力。MongoDB是一个通用的、基于文档的、分布式的数据库,为云计算时代的现代应用程序开发者而生。MongoDB是一种文档数据库,也就是说MongoDB用类似JSON格式的文档来存储数据。我们将使用Mongodb实现数据的持久化。
    E代表Express:
    Express 是一个保持最小规模的灵活的 Node.js Web 应用程序开发框架,为 Web 和移动应用程序提供一组强大的功能。使用所选择的各种 HTTP 实用工具和中间件,配合Node.js可以快速方便地创建强大的 API。
    R代表React:
    当前最流行的声明式的组件化的前端开发框架,将用于构建我们的前端页面
    N代表Node.js:
    Node作为一个新兴的前端框架,后台语言,采用一系列“非阻塞”库来支持事件循环的方式。本质上就是为文件系统、数据库之类的资源提供接口,将用于构建我们的后端API和数据库的访问。
    其他:Socket.io库。Socket.IO 实现了实时双向的基于事件的通讯机制。旨在让各种浏览器与移动设备上实现实时app功能,模糊化各种传输机制。Socket.IO 具有跨平台,多种连接方式自动切换的特性,做即时通讯方面的开发很方便,而且能和expressjs提供的传统请求方式很好的结合。

三、需求分析

1.模块化分析

React的显著特点之一就是组件化编程,因此我们先从组件化的思维入手,将问题分解成模块。

我们主要将从三个模块入手,分别是:

 

个人模块负责与每个用户个人有关的操作。社交模块着重在朋友圈社交相关的内容,会话模块主要管理与聊天相关的操作。

其中,个人模块的细分功能如下:
 

 

社交模块:

 

会话模块:
 

2.用例分析

原型化方法(Prototyping)和建模的方法(Modeling)是整理需求的两类基本方法。

建模的方法可以快速给出有关事件发生顺序或活动同步约束的问题,能够在逻辑上形成模型来整顿繁杂的需求细节。 我们接下来以用例建模、业务领域建模和业务数据建模来具体了解对需求进行建模的方法。

首先我们可以从上面的模块中体现的业务过程提取出抽象用例。

基本的抽象用例:

对于个人来说,主要有

1.编辑个人资料

2.发起单人/多人会话

3.好友管理

4.查看朋友圈

5.编辑朋友圈帖子

6.管理动态

根据对即时通讯系统的过程进行抽象,我们可以得到大致的如下的用例图:
 

扩展用例:

进一步对上面的模块进行扩展,我们可以得到几个主要的扩展用例(高层用例也包含在其中)

资料管理扩展用例:

用户端服务端
1.TUCBW 用户请求登入个人资料页面2.系统回送资料页的相关信息
3.用户修改个人资料4.系统检查资料格式并回送结果
5.TUCEW 用户保存并退出 

单人聊天扩展用例:

用户端服务端
1.TUCBW 用户发起对某个好友的聊天请求2.系统检查好友相关信息,回送聊天室基本信息
3.用户查看聊天记录4.系统回送聊天记录
5.用户键入新的消息6.系统保存新消息并发送给对等方
6.TUCEW 用户退出聊天 

多人聊天扩展用例:

用户端服务端
1.TUCBW 用户发起加入群聊2.系统检查群聊相关信息,回送聊天室基本信息
3.用户查看群成员,群主页4.系统回送群的详细信息
5.用户查看群聊记录6.系统回送群聊记录
6.TUCEW 用户退出聊天室 

帖子管理扩展用例:

用户端服务端
1.TUCBW 用户编辑帖子内容后请求推送至朋友圈2.系统将帖子内容保存至服务器
3.TUCEW  用户收到“发送成功”消息 

 

好友管理扩展用例:

用户端服务端
1.TUCBW 用户请求查看好友信息2.系统回送好友信息
3.用户选择添加好友(或加黑名单)4.系统建立二者的好友(或黑名单)关系
5.TUCEW  用户收到“添加(黑名单)成功”消息 

 

朋友圈管理扩展用例:

用户端服务端
1.TUCBW 用户请求查看朋友圈2.系统回送朋友圈最新动态
3.用户查看朋友圈并执行操作(点赞/评论)4.系统保存用户的操作
5.TUCEW  用户退出 

 

根据组件化的功能细分,我们可以进一步按模块组织分析用例:
个人模块: 

 

社交模块:

 会话模块:

最后,我们可以得到基于用例的业务领域模型:

我们主要需要管理用户User与群组Group的之间的Join关系,以及发送的消息格式如Post与User之间的对应关系,Group与Message之间的对应关系。还有对整个用户表和群组表的管理:

业务数据建模:

对业务数据的建模基本如上面的UML类图所示,下面主要说明一下User和Group的组成:
User:

属性类型注释
userIdLong用户ID
userNameString用户名
descString描述
pswdString密码
isOnlineBool是否在线


Group:

属性类型注释
groupIdLong群组ID
groupNameString群名
allUsersUser[]用户数组
groupDescString群描述
msgRecordMessage[]消息记录

 在数据库的设计上,由于牵涉的数据量不是很大,所以我们不会用到一对非常多的模型,会用到一对很少和一对多的模型,并且由于读的频率会更高,会涉及到反范式化的设计。

四、设计模式与软件架构

1.设计模式

对于消息的组织我们可以采用命令模式

命令(Command)模式:将一个请求封装为一个对象,使发出请求的责任和执行请求的责任分割开。这样两者之间通过命令对象进行沟通,这样方便将命令对象进行储存、传递、调用、增加与管理。

如第三部分中设计的那样,我们将message单独抽象为了一个类,对应的数据和操作组成如下:

属性/操作类型注释
msgTimeLong消息时间
msgSenderUser消息发送者
msgReciverUser消息接受者
msgContentString消息内容
getSender()User获取发送者信息
getReciver()User获取接收者信息
getContent()String获取消息内容

我们在传递群聊或者个人聊天的信息时可以传递message对象,该对象包含了与消息有关的命令和数据集合。

对于群组消息的订阅通知,我们可以采用观察者模式

观察者(Observer)模式:指多个对象间存在一对多的依赖关系,当一个对象的状态发生改变时,把这种改变通知给其他多个对象,从而影响其他对象的行为,这样所有依赖于它的对象都得到通知并被自动更新。这种模式有时又称作发布-订阅模式

对于前端react和后端nodejs的交互,我们使用C/S模式,也即客户服务器模式 

对于

2.软件架构

React主要是一个View组件库,因此对业务逻辑还是由我们自己定义,我们将使用基本的MVC架构来处理数据模型和视图之间的交互关系

如上所示,我们的数据模型由Mongodb使用前述设计的业务数据类型,控制层主要由Node,js编写DAO接口,用于控制数据模型,前端页面由React编写,并且React与控制逻辑的交互接口也由react负责,可以反作用于Controller. 

作者:101

 

...全文
459 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复
内容概要:本文针对5MW风电永磁直驱发电机-1200V直流并网系统,构建了基于Simulink的仿真模型,重点研究了在强弱电网适配场景下构网型(GFM)与跟网型(GFL)逆变器并联系统的协同控制逻辑及其暂态动态行为。通过建立包含风力机、永磁同步发电机、机侧变流器、直流环节、网侧变流器及电网接口在内的完整系统模型,实现了从风能捕获到直流并网的全流程仿真。研究深入探讨了GFM与GFL逆变器在不同电网强度下的动态交互特性,包括功率分配、频率响应、电压支撑能力及稳定性表现,并提出有效的分层协同控制策略,以提升系统在弱电网条件下的运行稳定性和电能质量。仿真结果验证了所提控制策略在抑制功率振荡、改善频率调节和增强系统鲁棒性方面的优越性能。; 适合人群:具备电力系统、电力电子及自动控制基础知识,从事新能源发电、微电网、并网技术等相关领域的研究生、科研人员及工程技术人员。; 使用场景及目标:①深入理解永磁直驱风电机组并网系统的整体结构与工作原理;②掌握构网型与跟网型逆变器的核心控制差异及其在混合系统中的协同机制;③研究强弱电网环境下并网系统的稳定性问题及先进控制策略的设计方法;④为相关科研课题的仿真建模、算法开发与实验验证提供可靠的技术参考与案例支持。; 阅读建议:学习者应结合Simulink软件动手搭建和调试仿真模型,重点关注逆变器控制模块的实现细节与参数设置。建议在掌握基础模型后,通过改变电网强度、负载条件或控制参数等方式开展对比实验,观察系统的动态响应变化,从而深化对理论知识的理解并提升解决实际工程问题的能力。
内容概要:本文提出了一种基于粒子群优化算法(PSO)的风光储能微电网日前经济调度模型,充分考虑了需求响应机制的影响。研究构建了一个包含风力发电、光伏发电、储能系统及可调负荷的综合微电网系统,通过建立以系统综合运行成本最小化为目标的优化模型,综合考量了可再生能源出力的不确定性、负荷波动以及分时电价等因素。文中详细阐述了模型的数学构建过程,包括目标函数的设计、各类物理约束(如功率平衡、储能容量与充放电速率限制)的处理,以及需求响应对用户侧负荷曲线的调节作用,并提供了完整的Python代码实现方案,通过仿真验证了该方法在降低系统运行成本、提升可再生能源消纳能力和优化负荷曲线方面的有效性。; 适合人群:具备一定电力系统基础知识和Python编程能力的高校学生、研究人员及从事微电网规划、能源优化调度等相关领域的工程技术人员。; 使用场景及目标:①用于研究和实现计及多种可再生能源与储能系统的微电网经济调度问题;②学习如何将粒子群优化算法应用于电力系统优化领域;③掌握需求响应机制在削峰填谷、优化负荷曲线中的具体建模与实现方法。; 阅读建议:此资源结合了理论模型、优化算法与编程实践,建议读者在学习过程中重点关注模型构建的逻辑、PSO算法的参数设置及其在调度问题中的应用细节,并动手运行和调试所提供的Python代码,以加深对微电网经济调度全过程的理解。

571

社区成员

发帖
与我相关
我的任务
社区描述
软件工程教学新范式,强化专项技能训练+基于项目的学习PBL。Git仓库:https://gitee.com/mengning997/se
软件工程 高校
社区管理员
  • 码农孟宁
加入社区
  • 近7日
  • 近30日
  • 至今

试试用AI创作助手写篇文章吧