留学管理与分析系统的设计方案
背景介绍
上一次笔者针对留学管理与分析系统进行了需求分析与建模,对整个系统进行了初步分析。本次笔者拟进行模型的修正与细化,利用已获得信息进行软件结构特点的分析,筛选合适的架构与设计模式,给出项目的完整设计方案,通过API文档、UML图、概念原型、技术选型等方式对该方案进行阐释。
项目概述
如今出国留学的人数越来越多,而且呈现低龄化。如何选择合适的学校与专业是许多家长与学生在出国前需要面临的问题。
本项目通过抓取国外名校网站与留学中介网的信息,实现留学信息管理与分析系统。
本系统首先要实现的是留学信息的检索。其次通过分析用户的需求、自身的条件、留学地的社会环境和安全问题、留学学校信息、留学专业信息等可以给用户一个合理的选择区间。留学信息管理与分析系统无疑可以以此为基础打造一个这样的平台,针对不同用户,通过多种因素的综合分析,给出科学的建议,给用户合适的择校建议,让用户更好的选择心仪的海外高校,形成一个比较科学的总结信息以及分析信息的过程。
本项目主要阶段为:
- 需求分析、建模、数据库表设计等前期工作
- Web平台的搭建与上线
- 数据挖掘与可视化
- 分布式平台设计
目前处于阶段二,本文针对阶段二撰文。
软件架构
本项目为Web项目,可以采用B/S架构,简化系统的开发、维护和使用,实现快速开发与迭代。具体而言,采用B/S的变体:三层架构进行项目构建。
三层指:
-
UI(表现层):
主要是指与用户交互的界面。用于接收用户输入的数据和显示处理后用户需要的数据。
-
BLL(业务逻辑层):
UI层和DAL层之间的桥梁。实现业务逻辑。业务逻辑具体包含:验证、计算、业务规则等等。
-
DAL(数据访问层):
与数据库打交道。主要实现对数据的增、删、改、查。将存储在数据库中的数据提交给业务层,同时将业务层处理的数据保存到数据库。
三层是为了解决整个应用程序中各个业务操作过程中不同阶段的代码封装的问题,为了使程序员更加专注的处理某阶段的业务逻辑。比如将数据库操作代码封装到DAL层中,提供一些方法根据参数直接返回用户需要的相应数据,这样在处理具体的业务逻辑的时候,就不用关心数据的存储问题了。而业务实体是面向对象思想的体现,贯穿于三层中,进行数据的传递。
设计模式
为了解决应用程序用户界面的样式替换问题,把展示数据的 HTML 页面尽可能的和业务代码分离,则具体设计模式可以使用MVC设计模式。这也是目前主流的Web视图层设计模式。
MVC把纯净的界面展示逻辑(用户界面)独立到一些文件中(Views),把一些和用户交互的程序逻辑(Controller)单独放在一些文件中,在 Views 和 Controller 中传递数据使用一些专门封装数据的实体对象,这些对象,统称为Models。
三者作用具体:
-
Model(模型)
模型代表一个存取数据的对象或 Java POJO。它也可以带有逻辑,在数据变化时更新控制器。
-
View(视图)
视图代表模型包含的数据的可视化。
-
Controller(控制器)
控制器作用于模型和视图上。它控制数据流向模型对象,并在数据变化时更新视图。它使视图与模型分离开。
与三层架构的关系
两者没有必然的关系,关注点不同。区别和相似点是:
-
三层架构是最基本的项目分层结果,而MVC则是三层架构的一个变体和细化,MVC是一种好的设计模式
-
三层是基于业务逻辑来分的,而mvc是基于页面来分的
-
两者的核心都是分层和解耦
-
MVC主要是UI层设计模式(或框架),三层架构中的下两层+Entity可理解为MVC中的Model,即:
两者没有太大的联系,实际Web项目中都会使用到,一个主要用于项目分层,一个多作为一种开发模式。
技术选型
为实现上述架构或设计模式,回顾市面上主流技术,本项目可以使用:
-
后端采用Spring Boot框架进行开发,整合以下需要用到的资源:
-
Spring
用于IOC(控制反转、依赖注入)和AOP(面向切面编程)
-
Spring MVC
MVC设计模式的具体应用
-
Mybatis
持久层框架,封装JDBC代码,通过接口和POJO实现对数据库的操作
-
-
前端使用Vue框架,快速开发,拜托对原生技术和组件库的依赖
-
前后端交互接口采用RESTful风格,方便前后分离;数据格式则为json
-
数据库技术采用MySQL + Redis
-
开发语言为Java + JavaScript等
-
开发平台为Intellij IDEA + Visual Studio Code
-
其他诸如Scrapy、Dubbo等用于第三、四阶段的开发
API文档
前后端交互需要查看API文档,下面列举主要用到的API(部分):
package | URL | Parameter | method | response | notes |
---|---|---|---|---|---|
admin | "/admin/login/checklogin" | account、password、code | GET | 登录状态和信息 | 登录检测(管理员) |
admin | "/admin/user_list" | GET | 用户Page | 获取用户列表 | |
admin | "/admin/user_list/edit" | id | PUT | 修改成功消息 | 修改用户权限等信息 |
admin | "admin/user_list/delete" | id | DELETE | 删除成功消息 | |
admin | "/admin/slide_list" | GET | 学校幻灯片Page | 获取学校幻灯片列表 | |
admin | "/admin/slide_list/add" | picture、college_name | POST | 上传成功消息 | 上传新的学校幻灯片 |
admin | "/admin/slide_list/edit" | id | PUT | 修改成功消息 | |
admin | "/admin/slide_list/edit" | id | DELETE | 删除成功消息 | |
college | "/index" | GET | 主页面 | 含高权重学校的信息 | |
college | "/college/college/all" | GET | 学校Page | 获取学校列表 | |
college | "/college/college/detail" | id | GET | 学校更多信息 | 获取某一学校信息 |
college | "/college/college/index" | country、qsLow、qsHigh... | GET | 学校Page | 筛选学校列表 |
college | "/college/college/search" | like | GET | 学校Page | 搜索学校 |
college | "/college/guide" | GET | 帮助文档 | ||
microblog | "/microblog/home" | GET | 论坛主页与帖子 | ||
microblog | "/microblog/home/friend" | GET | 关注列表 | ||
microblog | "/microblog/home/fan" | GET | 粉丝列表 | ||
microblog | "/microblog/home/collect" | GET | 收藏列表 | ||
microblog | "/microblog/home/praise" | GET | 点赞列表 | ||
microblog | "/microblog/home/message" | GET | 消息列表 | ||
microblog | "/microblog/friend/index" | id | GET | 用户信息 | 获取某一用户信息 |
microblog | "/microblog/friend/follow" | id | PUT | (取消)关注用户 | |
microblog | "/microblog/forward/list" | post_id | GET | 转发列表 | 查看某blog的转发 |
microblog | "/microblog/post/post" | pid、content、type | POST | 发帖、更帖、评论 | |
microblog | "/microblog/post/praise" | post_id | PUT | 点赞帖子 | |
microblog | "/microblog/post/collect" | post_id | POST | (取消)收藏帖子 | |
user | "/user/login/checklogin" | account、password、code | GET | 登录状态和信息 | 登录检测(用户) |
user | "/user/setting/save" | name、qq、gpa... | PUT | 设置成功消息 | 修改个人信息 |
user | "/user/register/checkregister" | account、password、code | POST | 注册成功消息 | 注册 |
视图描述
同一个软件架构,由于选取的视角和抽象层次不同可以得到不同的视图,这样一组关键视图搭配起来可以完整地描述一个逻辑自洽的软件架构模型。一般来说,我们常用的几种视图有分解视图、依赖视图、泛化视图、执行视图、实现视图、部署视图和工作任务分配视图。
本系统主要用分解视图、依赖视图、执行视图和部署视图来进行描述。
分解视图
分解是构建软件架构模型的关键步骤,分解视图也是描述软件架构模型的关键视图,一般分解视图呈现为较为明晰的分解结构(breakdown structure)特点。总之一句话,这是一种将系统分解为模块的层次描述方法。是后续开发的基础。整个系统目前由5大模块组成。
信息检索模块主要展示在前端界面,方便用户搜索相应的学校和专业;推荐算法模块主要是根据用户提交的一些个人材料,向用户推荐适合自己的学校;用户管理模块主要是用户个人中心,提供一些个人信息管理、登录注册的功能;后台管理主要展示在管理员界面,管理整个系统的用户信息和学校信息;论坛模块主要提供发帖、转发、评论功能。
信息检索模块
信息检索模块主要分为学校和专业检索。学校检索可以查询学校概况、学费水平、学校评价等,专业检索可以查询专业排名、专业招生情况、专业评价等。信息检索根据用户输入的条件,模糊或者精确的从学校和专业库中搜索符合条件的留学信息反馈给用户。此模块可以给用户提供一定的指导信息。
推荐算法模块
推荐算法模块主要是根据用户填的一些学生信息,系统自动的根据学生的条件给用户推荐符合的学校和专业。用户登录系统后,填入自己的个人学生信息,例如雅思托福成绩,绩点,个人材料,提交给系统之后,首页会优先给用户推荐符合条件的学校信息,同时还可以进行个人评估,材料准备,进行学校的申请。
用户管理模块
用户管理模块反映在前端界面上主要是用户登录之后的个人中心。用户在此模块可以进行登录注册,查看我的收藏、我的喜欢,以及我所浏览过的学校记录,同时还可以进行个人信息的管理与修改。在此模块还可以查看论坛模块的部分功能,如我关注的用户,点赞、收藏的帖子。
后台管理模块
后台管理模块主要给后台管理员用户使用。此模块可以进行用户管理、学校信息管理、专业信息管理、论坛管理。用户管理主要对用户信息进行设置;学校管理对学校的综合信息,如师资、科研、知名度、产业、环境等进行设置;专业管理主要对一些热门专业提供专业排名,给用户提供参考;论坛管理可以对一些不符合发帖规则的帖子进行删除。
论坛模块
根据需求分析的结果可知,论坛模块主要包括发帖、转发、评论,收藏、点赞,关注、取关、检索等相关功能,给用户一个信息交流的平台,让用户在选择学校的时候少走一些弯路。
依赖视图
依赖视图展现了软件模块之间的依赖关系。依赖视图对于项目开发、维护和变更都能提供较好的支持。
执行视图
执行视图展示了系统运行时的时序结构特点,比如流程图、时序图等。执行视图中的每一个执行实体,一般称为组件,都是不同于其他组件的执行实体。如果有相同或相似的执行实体那么就把它们合并成一个。
这里用活动图进行描述,描述了用户注册、用户检索信息、用户逛论坛三个活动场景。
用户注册
用户注册首先要验证注册信息是否可用,若可用则注册成功;然后用户需要填写个人信息以方便后续的信息分析与推荐。
信息检索
用户进行信息检索,后台进行关键字划分和提取,检索数据库生成检索页面返还给界面,用户可以查看信息,或者进行收藏、评论等操作,这将会更新后台收藏夹信息和个人喜好权重等重要信息,方便个性化推荐。
浏览论坛
论坛的信息根据个人浏览记录生成,用户针对返回结果,可以进行简单的浏览、点赞、收藏、评论等一些列操作,某些操作会触发后台向其他用户推送被评论或被点赞的简要信息。此外用户可以发帖,这将被其他人浏览到。
部署视图
部署视图是将执行实体和计算机资源建立映射关系。这里的执行实体的粒度要与所部署的计算机资源相匹配,比如以进程作为执行实体那么对应的计算机资源就是主机,这时应该描述进程对应主机所组成的网络拓扑结构,这样可以清晰地呈现进程间的网络通信和部署环境的网络结构特点。当然也可以用细粒度的执行实体对应处理器、存储器等。
项目初期可以使用以下简单的部署方式:
数据结构设计
数据库方面采用MySQL关系数据表存储+Redis数据缓存。项目需求分析时期进行了初略的表设计,下面是对其进行扩展之后的结果,添加了更多约束与属性,后期将再根据功能进行扩展。
管理员表
CREATE TABLE `sais_admin` (
`id` int(8) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT '主键',
`account` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '账户',
`password` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '密码',
`loginip` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '上次登录ip',
`logintime` datetime(0) DEFAULT NULL COMMENT '上次登录时间',
PRIMARY KEY (`id`) USING BTREE
);
收藏表
CREATE TABLE `sais_collect` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`user_id` int(11) NOT NULL COMMENT '用户id',
`post_id` int(11) NOT NULL COMMENT '收藏微博id',
`status` tinyint(1) NOT NULL DEFAULT 0 COMMENT '是否收藏:0 否;1 是',
PRIMARY KEY (`id`) USING BTREE
)
学校信息表
CREATE TABLE `sais_college` (
`id` int(8) NOT NULL AUTO_INCREMENT COMMENT '主键',
`college_name` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '学校中文名,不重复',
`college_e_name` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '学校英文名,不重复',
`country` varchar(10) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '国家',
`area` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '地区',
`qs_rank` int(8) NOT NULL COMMENT 'qs排名',
`rate` double(4, 2) NOT NULL COMMENT '录取率',
`local_rank_name` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '本国排名标准',
`local_rank` int(8) NOT NULL COMMENT '本国排名',
`hot_major` json NOT NULL COMMENT '热门专业',
`icon` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '图标',
`introduce` varchar(1024) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '学校介绍',
`sum` int(8) NOT NULL COMMENT '总学生数',
`undergraduate` int(8) NOT NULL COMMENT '本科学生数',
`graduate` int(8) NOT NULL COMMENT '研究生学生数',
`student_staff_ratio` double(4, 2) NOT NULL COMMENT '师生比例',
`undergraduate_international_proportion` double(4, 2) NOT NULL COMMENT '国际生比例(本科)',
`graduate_international_proportion` double(4, 2) NOT NULL COMMENT '国际生比例(研究生)',
`ea` varchar(10) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT 'EA申请截止日期',
`rd` varchar(10) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT 'RD申请截止日期',
`transfer` varchar(10) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '转学申请截止日期',
`undergraduate_gpa` double(4, 2) NOT NULL DEFAULT 6.00 COMMENT '本科平均GPA分数',
`sat` int(8) NOT NULL DEFAULT 9999 COMMENT '本科SAT分数',
`undergraduate_language` double(6, 2) NOT NULL DEFAULT 6.00 COMMENT '本科外语录取最低分',
`graduate_gpa` double(4, 2) NOT NULL COMMENT '研究生平均GPA分数',
`graduate_language` double(6, 2) NOT NULL COMMENT '研究生外语最低分',
`undergraduate_document` json NOT NULL COMMENT '本科生申请材料',
`graduate_document` json NOT NULL COMMENT '研究生申请材料',
`profession` json NOT NULL COMMENT '专业设置',
`tuition_fee` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '学费',
`living_fee` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '生活费',
PRIMARY KEY (`id`) USING BTREE,
UNIQUE INDEX `college_name`(`college_name`) USING BTREE,
UNIQUE INDEX `college_e_name`(`college_e_name`) USING BTREE
)
关注表
CREATE TABLE `sais_friends` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`user_id` int(11) NOT NULL,
`friend_id` int(11) NOT NULL,
`status` tinyint(1) NOT NULL DEFAULT 0 COMMENT '0:未关注;1:已关注',
`addtime` datetime(6) NOT NULL,
PRIMARY KEY (`id`) USING BTREE
)
帖子表
CREATE TABLE `sais_post` (
`id` int(8) NOT NULL AUTO_INCREMENT,
`content` text CHARACTER SET gb2312 COLLATE gb2312_chinese_ci NOT NULL,
`addtime` datetime(0) NOT NULL,
`nickname` varchar(200) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,
`user_id` int(8) NOT NULL,
`pid` int(8) NOT NULL DEFAULT 0 COMMENT '上级id',
`post_type` tinyint(1) NOT NULL DEFAULT 0 COMMENT '微博标示: 0 发布 ;1评论;2转发',
`parent_user_id` int(8) NOT NULL DEFAULT 0 COMMENT '回复人的id',
`forward_num` int(8) NOT NULL DEFAULT 0 COMMENT '转发数量',
`comment_num` int(8) NOT NULL DEFAULT 0 COMMENT '评论数',
`praise_num` int(8) NOT NULL DEFAULT 0 COMMENT '点赞数',
PRIMARY KEY (`id`) USING BTREE
)
点赞表
CREATE TABLE `sais_praise` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`user_id` int(11) NOT NULL COMMENT '用户id',
`post_id` int(11) NOT NULL COMMENT '收藏微博id',
PRIMARY KEY (`id`) USING BTREE
)
幻灯片表
CREATE TABLE `sais_slide` (
`id` int(8) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT '主键',
`college_e_name` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '学校英文名,不重复',
`picture` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '图片地址',
PRIMARY KEY (`id`) USING BTREE,
UNIQUE INDEX `college_e_name`(`college_e_name`) USING BTREE
)
用户表
CREATE TABLE `sais_user` (
`id` int(8) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT '主键',
`account` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '账号',
`password` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '密码',
`nickname` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '昵称',
`loginip` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '上次登录ip',
`logintime` datetime(0) DEFAULT NULL COMMENT '上次登录时间',
`addtime` datetime(0) NOT NULL COMMENT '注册时间',
`comment` tinyint(1) NOT NULL DEFAULT 1 COMMENT '为1可以发言,0被禁言',
`sex` tinyint(1) NOT NULL DEFAULT 0 COMMENT '性别:0保密;1男;2女',
`qq` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL DEFAULT '' COMMENT 'qq号',
`email` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL DEFAULT '' COMMENT '邮箱',
`avatar` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL DEFAULT 'avatar.jpg' COMMENT '头像',
`posts_num` int(8) NOT NULL DEFAULT 0 COMMENT '发微博的数量',
`follows_num` int(8) NOT NULL DEFAULT 0 COMMENT '关注数量',
`fans_num` int(8) NOT NULL DEFAULT 0 COMMENT '粉丝数量',
`phone` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '电话',
`gpa` double(4, 2) NOT NULL DEFAULT 0.00 COMMENT 'gpa
`sat` int(8) NOT NULL DEFAULT 0 COMMENT 'sat',
`ielts` double(6, 2) NOT NULL DEFAULT 0.00 COMMENT '雅思',
`toefl` double(6, 2) NOT NULL DEFAULT 0.00 COMMENT '托福',
`recommend` json NOT NULL COMMENT '意向院校,里面是一个json数组,长度为150,下标为学校的qs排名',
PRIMARY KEY (`id`) USING BTREE
)
实现视图
实现视图是描述软件架构与源文件之间的映射关系。比如软件架构的静态结构以包图或设计类图的方式来描述。当然也可以由软件项目的源文件目录树来呈现。实现视图与软件架构的静态结构之间映射关系越是对应的一致性高,越有利于软件的维护,因此实现视图是一种非常关键的架构视图。
下面是该项目的源文件目录树:
├─base
│ ├─src
│ │ └─test
│ │ └─java
│ │ └─com
│ │ └─sais
│ │ └─saisbase
├─entity
│ ├─src
│ │ └─main
│ │ ├─java
│ │ │ └─com
│ │ │ └─sais
│ │ │ └─saisentity
│ │ └─resources
├─mapper
│ ├─src
│ │ └─main
│ │ ├─java
│ │ │ └─com
│ │ │ └─sais
│ │ │ └─saismapper
│ │ └─resources
│ │ └─mapping
├─service
│ ├─src
│ │ └─main
│ │ └─java
│ │ └─com
│ │ └─sais
│ │ └─saisservice
└─web
├─src
└─main
├─java
│ └─com
│ └─sais
│ └─saisweb
│ ├─admin
│ ├─college
│ ├─common
│ │ ├─kaptcha
│ │ └─utils
│ ├─microblog
│ └─user
└─resources
├─static
│ ├─admin
│ │ ├─css
│ │ └─js
│ ├─college
│ │ ├─css
│ │ └─images
│ │ ├─colleges
│ │ └─square
│ ├─common
│ │ └─images
│ └─microblog
│ ├─css
│ ├─images
│ └─js
└─templates
├─admin
│ ├─change_password
│ ├─common
│ ├─complain_list
│ ├─login
│ ├─slide_list
│ └─user_list
├─college
│ ├─college
│ ├─common
│ ├─guide
│ ├─help
│ └─index
└─microblog
├─comment
├─common
├─forward
├─friend
├─home
├─index
├─login
└─setting
- 软件系统概念原型要具备概念上的完整性和一致性
- 最后举例说明系统概念原型的核心工作机制
概念原型核心工作机制
什么是概念原型?
- 概念是人对能代表某种事物或发展过程的特点及意义所形成的思维结论。
- 概念原型是一种虚拟的、理想化的软件产品形式。
- 概念原型=用例+数据模型。因此基于已得出的用例和数据模型,就可以得出概念原型的工作过程。
软件系统概念原型要具备概念上的完整性和一致性,这是指是指针对于一个领域,不仅了解该领域的所有对象,并且了解所有对象之间的关系。在软件开发的失败原因中,概念的不完整性和不一致性是主要部分。这在《人月神话》这本书中被重点提到过。
保持完整性和一致性的方法主要是:不要尝试融入所有的功能或意见。如果发现某一项功能会破坏概念的完整性,则应主动放弃,而不能牵就于极个别的“我”。在《人月神话》中,提到过解决概念完整性和一致性的方法——外科手术团队式开发方法。在这样的团队中,外科医生(首席程序员)一个人来决定一个软件要做成什么样子,并且去写主要的代码。
下面通过以用户浏览论坛为例说明概念原型的工作机制:
- 用户打开论坛,后台会根据数据库查看该用户平时的浏览偏好选项、收藏点赞的帖子等生成推荐帖子Page
- 用户针对返回结果,可以进行简单的浏览,或者进行点赞、收藏、评论等一些列操作,这一操作不仅会更新用户表的个人资料与偏好权重,还会更改涉及到的其他人(如被点赞的人)的用户表数据。
- 一系列更新完成后后台会将更新后的页面返还给用户,被点赞的人会收到推送消息。
- 此外用户可以发帖,其他查看“推荐帖子”或“所有帖子”的人将有可能收到该条帖子推送。