(凯思奥)思考记录3:表设计,类插槽和高阶组件|函数,多级选项卡replace跳转,复用函数注入,代码特异性,形参的解构,后端报错设计,领域实体,数据的关联,相等|严格运算符,redis数据设计问题

本文主要是介绍(凯思奥)思考记录3:表设计,类插槽和高阶组件|函数,多级选项卡replace跳转,复用函数注入,代码特异性,形参的解构,后端报错设计,领域实体,数据的关联,相等|严格运算符,redis数据设计问题,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

0、思考小结

1、表设计
之前因为才两张表,用户而言业务外键是phone 而不是ID,随着业务和数据库复杂起来,发现phone并不是好的选择,最好还是id为外键,但是考虑到前期多处耦合phone修改起来有些麻烦,故之后与用户连表的外键均为id,之前则不论。(2020年3月,已通过自动化将外键调整为id)

2、关于删除资源
对于资源删除,真实的删除操作会引起资源的危险,以及占用服务器资源,还会影响关联数据的读取异常。相较这么高风险操作,那么硬盘的价格很低,所以还是选择扩充硬盘比较好。

3、类插槽和高阶组件|函数
写代码久了,容易生搬硬套,朝着业务的实现走,没有维度。
1.vue的插槽,即react组件包裹标签(<Com> <h1>我是组件内的标签</h1><Comp>)。2.高阶组件 3.高阶函数。而上述三个概念都可以用于组件的复用抽象上。
但是思索后,发现场景是不同的,得区分。

插槽:焦轻量,仅传递一段DOM而已。
高阶组件:侧重组件的DOM/UI,各种状态的管理与传递。
高阶函数:侧重逻辑过程,每一级函数干了什么事情。

4、多级选项卡&replace跳转
一般情况只有单级或者二级,而且选项也不多,那么可以直接写死onClick写push逻辑跳入hash,然后通过副作用检测hash的值,进行索引修改。
那么若三级以上,且选项很多,直接写死onClick非常麻烦,而且后期非常难维护,最好是动态生成。这就需要数组的形式进行遍历,动态添加onClick字段,传入统一方法进行hash读取并覆盖或添加。
replace和push 均为跳转,前者会覆盖历史栈,就适用选项卡的跳转。

5、复用函数注入
比如点击用户名称和点击用户头像,应该跳转的都是UserPage,那么这部分逻辑可以抽离入根组件,并注入props中。
但是问题是App组件并未包裹在Router内,故我审视了下,绝对将该部分复用函数,写入PrivateRoute中。
但是在PrivateRoute又不得不使用withRouter,问题产生了,withRouter似乎限制了路由的动态变化,也就是子组件路由参数永不变化。
因此,我卡住了。。。。
后来看到其实routeProps参数是通过回调函数传入的,那么可以设计成高阶函数的形式。
在这里插入图片描述
在这里插入图片描述
不过其实还是有点丑,但是至少是注入在根级组件的。

6、代码特异性
名称是我语义化定义的。在开发阶段肯定会出现有差异性甚至较特异的代码,但是随着开发的推进,此类代码很难进行修正,所以,我们应该考虑宽放管理它们,也就是按照代码的初衷去写逻辑,代码可以不服从管理。
emmmmmmmmm…
不过一定程度上,还是尽量减少特异性代码的出现,毕竟维护的复杂度就上去了。

7、对形参的解构
最好是大一统情况,如果针对ajax的异步返回,在没有合理的数据结构和默认参数下,最好先抓明确的参数(比如 data),然后在代码体内进行data解耦,避免产生解构报错。

8、后端报错设计
之前我没有针对异常进行代码的逻辑书写,现在发现有这个必要了,目前规则应如下。
后端接口逻辑 resolve和reject ,promise任务链出现问题均以reject或者 return Promise.reject() 去返回。通过 SuccessModel(errno = 0) 或ErrolModel(errno = -1)返回。
前端判断则通过 errno的值。
因为,我觉得非复杂业务,没有必要对错误的捕获做太细致的设计。只要能知道接口返回状态是否正确即可。

9、领域实体
redux为状态管理,其中一种专用于缓存已访问的产品数据,称之为领域实体,
entity,而entity和普通的state需区分。entity通常缓存字典类型的数据集合,比如用户1,用户2,产品1,产n…

10、数据的关联
比如用户10001 用户中心页,有 作品,收藏,关注
而某一作品 work/46,作品被该10001收藏了吗?
第一反应就是在作品返回的时候,去查用户&作品关联表,将映射返回。
其实不用,后端仅返回作品数据即可,而关系数据,通过用户自身的数据,进行一个代理,或者说映射。(前端拿到UserPageInfo,Info内有collect,collect 内包含作品id)我们通过此id,与当前路由paramId匹配即可。

11、相等|严格运算符
比如 react中的 props.match.params 匹配出来的id是字符串,所以要小心,将其Number再进行严格运算符===
在这里插入图片描述

12、redis数据设计问题
在使消息未读条目持久化时,我并非考虑到分类去管理未读条目。而去全部丢入userId: count。
开发MsgPage后,突然发现,其实必须做到条目的分类,对于用户体验才能进行提升。
但是目前来看,如果重新设计unreadCount有些吃力,影响较小,故,容忍。

这篇关于(凯思奥)思考记录3:表设计,类插槽和高阶组件|函数,多级选项卡replace跳转,复用函数注入,代码特异性,形参的解构,后端报错设计,领域实体,数据的关联,相等|严格运算符,redis数据设计问题的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/692348

相关文章

Java注解之超越Javadoc的元数据利器详解

《Java注解之超越Javadoc的元数据利器详解》本文将深入探讨Java注解的定义、类型、内置注解、自定义注解、保留策略、实际应用场景及最佳实践,无论是初学者还是资深开发者,都能通过本文了解如何利用... 目录什么是注解?注解的类型内置注编程解自定义注解注解的保留策略实际用例最佳实践总结在 Java 编程

Pandas中统计汇总可视化函数plot()的使用

《Pandas中统计汇总可视化函数plot()的使用》Pandas提供了许多强大的数据处理和分析功能,其中plot()函数就是其可视化功能的一个重要组成部分,本文主要介绍了Pandas中统计汇总可视化... 目录一、plot()函数简介二、plot()函数的基本用法三、plot()函数的参数详解四、使用pl

电脑找不到mfc90u.dll文件怎么办? 系统报错mfc90u.dll丢失修复的5种方案

《电脑找不到mfc90u.dll文件怎么办?系统报错mfc90u.dll丢失修复的5种方案》在我们日常使用电脑的过程中,可能会遇到一些软件或系统错误,其中之一就是mfc90u.dll丢失,那么,mf... 在大部分情况下出现我们运行或安装软件,游戏出现提示丢失某些DLL文件或OCX文件的原因可能是原始安装包

电脑显示mfc100u.dll丢失怎么办?系统报错mfc90u.dll丢失5种修复方案

《电脑显示mfc100u.dll丢失怎么办?系统报错mfc90u.dll丢失5种修复方案》最近有不少兄弟反映,电脑突然弹出“mfc100u.dll已加载,但找不到入口点”的错误提示,导致一些程序无法正... 在计算机使用过程中,我们经常会遇到一些错误提示,其中最常见的就是“找不到指定的模块”或“缺少某个DL

一文教你Python如何快速精准抓取网页数据

《一文教你Python如何快速精准抓取网页数据》这篇文章主要为大家详细介绍了如何利用Python实现快速精准抓取网页数据,文中的示例代码简洁易懂,具有一定的借鉴价值,有需要的小伙伴可以了解下... 目录1. 准备工作2. 基础爬虫实现3. 高级功能扩展3.1 抓取文章详情3.2 保存数据到文件4. 完整示例

解决IDEA报错:编码GBK的不可映射字符问题

《解决IDEA报错:编码GBK的不可映射字符问题》:本文主要介绍解决IDEA报错:编码GBK的不可映射字符问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录IDEA报错:编码GBK的不可映射字符终端软件问题描述原因分析解决方案方法1:将命令改为方法2:右下jav

使用Java将各种数据写入Excel表格的操作示例

《使用Java将各种数据写入Excel表格的操作示例》在数据处理与管理领域,Excel凭借其强大的功能和广泛的应用,成为了数据存储与展示的重要工具,在Java开发过程中,常常需要将不同类型的数据,本文... 目录前言安装免费Java库1. 写入文本、或数值到 Excel单元格2. 写入数组到 Excel表格

redis中使用lua脚本的原理与基本使用详解

《redis中使用lua脚本的原理与基本使用详解》在Redis中使用Lua脚本可以实现原子性操作、减少网络开销以及提高执行效率,下面小编就来和大家详细介绍一下在redis中使用lua脚本的原理... 目录Redis 执行 Lua 脚本的原理基本使用方法使用EVAL命令执行 Lua 脚本使用EVALSHA命令

MyBatis模糊查询报错:ParserException: not supported.pos 问题解决

《MyBatis模糊查询报错:ParserException:notsupported.pos问题解决》本文主要介绍了MyBatis模糊查询报错:ParserException:notsuppo... 目录问题描述问题根源错误SQL解析逻辑深层原因分析三种解决方案方案一:使用CONCAT函数(推荐)方案二:

Python中的Walrus运算符分析示例详解

《Python中的Walrus运算符分析示例详解》Python中的Walrus运算符(:=)是Python3.8引入的一个新特性,允许在表达式中同时赋值和返回值,它的核心作用是减少重复计算,提升代码简... 目录1. 在循环中避免重复计算2. 在条件判断中同时赋值变量3. 在列表推导式或字典推导式中简化逻辑