CSDN-Bink社交圈模块设计业务逻辑

网友投稿 721 2022-05-30

【辰兮要努力】:hello你好我是辰兮,很高兴你能来阅读,昵称是希望自己能不断精进,向着优秀程序员前行!

博客来源于项目以及编程中遇到的问题总结,偶尔会有读书分享,我会陆续更新Java前端、后台、数据库、项目案例等相关知识点总结,感谢你的阅读和关注,希望我的博客能帮助到更多的人,分享获取新知,大家一起进步!

吾等采石之人,应怀大教堂之心,愿你们奔赴在各自的热爱中…

文章目录

一、文章序言

二、圈子首页

三、评论相关

一、文章序言

最近真的太忙了,两个星期没有更新了,想了想来整理一下我自己做的最感兴趣的一个项目相关业务吧—社交圈版块,留给自己,分享给以后涉及这版块的朋友们。

关于社交圈版块是一个挺有意思的版块,相对于传统的业务,这就更加接近我们生活!我们生活的APP也常常发现社交圈版块的例子:比如CSDN-Bink就是。

在这个版块我们可以发布自己的心情动态,也可以看到别人的动态,可以评论、转发等等,接下来为整理一下相关业务知识点。

二、圈子首页

1、关于帖子显示的基础业务

作为JAVA后台做的第一个逻辑就是查询出所有已经发布的动态,当然可以分为好几种查询条件:最新,最热,最近(距离)等等。

像正常的朋友圈一样,打开可以看到我们发布的帖子和帖子下面的评论

这里简单的来说就是做了一个查询帖子列表集合

起初就觉得是简单的查询帖子与评论集合vo返回 其实后期还要封装很多 属性

CSDN-Bink社交圈模块设计业务逻辑

比如

数,是否(帖子和评论),帖子评论总数,用户是否关注这个圈子,用户头像,用户昵称,职位,学校

等属性

弊端:查询帖子后根据帖子ID,查询用户信息,以及评论,for循环封装用户信息和评论,数据量过多的时候会造成查询数据库次数过多,封装相关信息会照常接口速度慢。

优化第一版:因为帖子表中有useId用户ID,也有reviewId评论ID,所以可以使用join on 直接查询帖子的时候连接用户表将用户等信息(头像、昵称)带出来,不会多次访问数据库,

使用collection集合用每次查询出帖子的ID嵌套查询出评论,类比你查询商品带出商品的套餐。

优化第二版:帖子以及帖子的评论要人为封装数,和判断是否,这就相当于封装了四个属性,至少是查询redis或者数据库四次,依然会造成接口速度下降

解决方案:帖子表中是有一个总数的,我们可以后台设置一个定时器,比如一小时将redis的总数持久化到数据库中,这样的话就算redis挂掉也可以查询到总数。其实正常查看CSDN的博客 总数和观看人数都是无法做到完全同步化的比如说实际总数是100个但是显示70个很正常,这个是关于持久化的问题。

相关我们也可以自行进入相关博客页面进行感受

优化第三版:帖子查询出来相关的属性不可避免被封装,那如何更快的封装呢?这里我们用到了Java -stream流的相关用法,相比于传统的方法进入帖子页面基本上是秒刷新。

2、关于社交圈版块的进一步优化

我们登录进去CSDN-bink的首页–热门这个版块,关于热门我们的评价标准是什么?

我们根据 ,评论,转发,这个在前端页面可以通过相关的公式记录出相关的观看人数值,当然能做到像博客这样的自行记录当然更好。

热门版块:第一次做热门版块我们把相关权重的值写死了,当然也是根据评论转发算出来的,如果每次热门排序的权重被后台写死了,那么我们刷新出来的都是一样的帖子,ps:因为查询条件一样

热门版块优化:学习一下CSDN-bink,我们发现在最热版块每次刷新都会出现不一样的帖子,这样会带给用户已新鲜感,这个肯定是在后台做出相关的算法,这样每次刷新都能带给用户不一样的帖子。

三、评论相关

1.评论要做权限判定

反思一下平常的项目正常帖子只要我们能够获取帖子的接口我们就可以直接访问查看到相关的数据

首先controller层逻辑,你是否要判断用户是否登录,如果未登录用户可以查看帖子,但是如果发布帖子和评论帖子要返回失败。

思路一:在controller层上加上权限校验的相关注解;

思路二:在controller层内掉登录获取userid的方法,判定一下是否登录;

2.评论一定要做安全校验

比如说你做微信小程序,你的帖子和评论都是要是符合国家法律的,这里要调用微信的评论图片安全检测接口和图片检测接口,具体的要查看微信小程序相关的API文档。

因为我做的是和微信小程序相关的,所以可以直接参考微信小程序的文档,访问微信的一个自定义接口,当数量较大的时候会收费,当然访问量少就免费。

关于外部提供的共用接口好像用到JSONObject类较多;

3.评论业务

如果没做个这个很容易以为评论就是传个评论给后台就结束了。

业务一:评论后返回评论,就好比我们博客,当你给某个人或者某个帖子评论完成后,你会直接看到你的评论,这就是后台做的一系列业务

①比如评论只有帖子ID 和用户ID 以及评论内容传入即可,但是你评论的时候评论是否会显示出来,这个显示是不是带着你的用户昵称和头像,此时评论A如果它的评论ID是数据库自增的,此时是不是应该数据库做一个返回自增主键的相关配置,因为评论A的子评论再对这个评论,进行评论的时候需要用到父级评论的ID。

在这里学到了两种返回自增主键的方法。

业务二:互动互动互动,我们我可以看到我们给别人的评论和也可以看到别人给我们的,正是因为如此有趣我们才能更长久的停留正在这个版块,这里就是涉及到信息表

②消息表,关于社交圈板块,在朋友圈是否别人给你你会收到这个信息,别人回复你的评论,你是不是可以查看到这个信息,这个就是有一个中间表,要记录相关信息,在个人中心与我相关处可以查看到相关信息。所以一定要记得做这个业务操作。

好了今天就先整理到这里下一期关于社交圈版块相关业务逻辑,等我想到了优化的方案就再整理一期。

希望自己努力的成为一名热爱产品的程序员!

The best investment is to invest in yourself.

2020.11.08 愿你们奔赴在自己的热爱里!

小程序 数据库

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:java入门学习(第二章)
下一篇:【Flutter】Flutter 布局组件 ( Opacity 组件 | ClipRRect 组件 | Padding 组件 )
相关文章