项目实战7——在线人员列表逻辑混乱反例

简介: 项目实战7——在线人员列表逻辑混乱反例

在线人员列表逻辑混乱的七个问题:

1.类中写了公共变量导致数据混乱现象

2.保存数据没有考虑业务的隔夜覆盖导致的逻辑漏洞

3.如果涉及到继承,你这个this,如果父类有同样的成员,你最终用哪个呢?

4.参数传递问题

5.参数不一致导致后续维护混乱

6.雪花算法的外键使用varchar类型,后续级联导致类型不一致而产生的索引失效问题;进而产生慢SQL

7.SQL不考虑业务导致的明确的逻辑漏洞

问题分析:

1.类中写了公共变量导致数据混乱现象

既然是公共变量,那么在业务中就是共享的,涉及到修改这个变量的地方可能有很多,同时在可能存在的高并发多线程的状态下,作为线程共享的全局变量。容易出现数据显示混乱的问题

2.保存数据没有考虑业务的隔夜覆盖导致的逻辑漏洞

考虑问题不能只被当前的时间所局限,如果查询加入了createDate,那么如果出现了一个学生从第一天到第二天一直在线的话,那么就查询不到第二天的在线数据。然后导致重复插入的连锁反应。

3.如果涉及到继承,你这个this,如果父类有同样的成员,你最终用哪个呢?

这个问题体现了一个边界是否清晰的问题,成员变量和全局变量之间的边界是要清晰的,否则容易导致数据混乱。如果涉及到继承,这个this,如果父类有同样的成员你最终用的是哪个呢?

5.参数不一致导致后续维护混乱

原本入参里面已经包括了所有需要传的参数,而实体里的参数可以赋不同的值,比如红框里表示状态的参数是“1”,但涉及到了不同的状态也可能是0或者2,那么这里参数写1就不合适了,所以要保持和方法传进来的入参一致。这也可以理解为一种对数据的抽象,支持变化和拓展。

6.雪花算法的外键使用varchar类型,后续级联导致类型不一致而产生的索引失效问题;进而产生慢SQL

7.SQL不考虑业务导致的明确的逻辑漏洞

问题1:update_time=NOW(),在这里的作用是,把所有人的最近登陆时间都修改成了当前时间,表里的最近登录时间变成了一样的,显然这样是不符合逻辑的。

问题2:create_date与接收的createDate一致的时候,条件才成立,但是问题来了,这个字段的值是具体到日期的时间,所以只有在当天两个值才相等,超过24点,则createDate日期加一,那么就不会满足这个条件了,所有在线的人就无法下线了

思想总结:

在做项目的时候,不能只顾着逻辑实现,还要从需求的角度,实际使用的角度,结合业务场景来思考。毕竟项目最终是需要现实中的用户使用的,要避免不合常理的逻辑问题。

相关文章
|
存储 缓存 算法
【CMake 基础教程 】深入理解CMake变量:类型、原理及最佳实践
【CMake 基础教程 】深入理解CMake变量:类型、原理及最佳实践
434 0
|
XML 前端开发 JavaScript
前端图形学实战: 从零实现编辑器的图层管理面板和实时缩略图(vue3 + vite版)
前端图形学实战: 从零实现编辑器的图层管理面板和实时缩略图(vue3 + vite版)
303 0
|
网络协议 Windows
Windows Server 2019 DHCP服务器搭建
Windows Server 2019 DHCP服务器搭建
358 3
|
数据采集 数据安全/隐私保护 开发者
|
11月前
|
Ubuntu 计算机视觉 C++
Ubuntu系统下编译OpenCV4.8源码
通过上述步骤,你可以在Ubuntu系统上成功编译并安装OpenCV 4.8。这种方法不仅使你能够定制OpenCV的功能,还可以优化性能以满足特定需求。确保按照每一步进行操作,以避免常见的编译问题。
165 12
在 setup 函数中使用 computed 计算属性
【10月更文挑战第23天】在 Vue3 中,`computed` 计算属性为我们提供了一种方便且高效的方式来处理基于其他响应式数据的派生数据。在 `setup` 函数中使用 `computed` 计算属性,可以让我们更好地组织和管理组件的逻辑。
|
Linux
【Linux 或Mac系统】自动生成项目结构目录并放在README.md文件中
如何在Linux或Mac系统中使用tree命令自动生成项目结构目录,并将其格式化后放入项目的README.md文件中以展示项目结构。
431 1
|
Linux
linux播放器
Linux系统提供多种音乐和视频播放器,如Iceplayer(原Splayer),支持多种音频格式及丰富功能,被誉为Linux版千千静听;Amarok是KDE桌面的强大音乐播放器;Rhythmbox是GNOME的默认播放器,简洁实用;Clementine是跨平台且源自Amarok 1.4的播放器;VLC是跨平台的强大播放器,支持众多音频和视频格式;Audacious则是一款简约轻便的播放器,适合喜欢Winamp风格的用户。每款播放器都有其特色,用户可根据需求选择。
389 3
linux播放器
|
数据挖掘 语音技术
3D-Speaker说话人任务的开源项目问题之视觉信息在说话人日志技术中的问题如何解决
3D-Speaker说话人任务的开源项目问题之视觉信息在说话人日志技术中的问题如何解决
185 0