(凯思奥)思考记录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

相关文章

Python获取中国节假日数据记录入JSON文件

《Python获取中国节假日数据记录入JSON文件》项目系统内置的日历应用为了提升用户体验,特别设置了在调休日期显示“休”的UI图标功能,那么问题是这些调休数据从哪里来呢?我尝试一种更为智能的方法:P... 目录节假日数据获取存入jsON文件节假日数据读取封装完整代码项目系统内置的日历应用为了提升用户体验,

Kotlin 作用域函数apply、let、run、with、also使用指南

《Kotlin作用域函数apply、let、run、with、also使用指南》在Kotlin开发中,作用域函数(ScopeFunctions)是一组能让代码更简洁、更函数式的高阶函数,本文将... 目录一、引言:为什么需要作用域函数?二、作用域函China编程数详解1. apply:对象配置的 “流式构建器”最

Java利用JSONPath操作JSON数据的技术指南

《Java利用JSONPath操作JSON数据的技术指南》JSONPath是一种强大的工具,用于查询和操作JSON数据,类似于SQL的语法,它为处理复杂的JSON数据结构提供了简单且高效... 目录1、简述2、什么是 jsONPath?3、Java 示例3.1 基本查询3.2 过滤查询3.3 递归搜索3.4

MySQL大表数据的分区与分库分表的实现

《MySQL大表数据的分区与分库分表的实现》数据库的分区和分库分表是两种常用的技术方案,本文主要介绍了MySQL大表数据的分区与分库分表的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有... 目录1. mysql大表数据的分区1.1 什么是分区?1.2 分区的类型1.3 分区的优点1.4 分

Mysql删除几亿条数据表中的部分数据的方法实现

《Mysql删除几亿条数据表中的部分数据的方法实现》在MySQL中删除一个大表中的数据时,需要特别注意操作的性能和对系统的影响,本文主要介绍了Mysql删除几亿条数据表中的部分数据的方法实现,具有一定... 目录1、需求2、方案1. 使用 DELETE 语句分批删除2. 使用 INPLACE ALTER T

SpringBoot启动报错的11个高频问题排查与解决终极指南

《SpringBoot启动报错的11个高频问题排查与解决终极指南》这篇文章主要为大家详细介绍了SpringBoot启动报错的11个高频问题的排查与解决,文中的示例代码讲解详细,感兴趣的小伙伴可以了解一... 目录1. 依赖冲突:NoSuchMethodError 的终极解法2. Bean注入失败:No qu

Python Dash框架在数据可视化仪表板中的应用与实践记录

《PythonDash框架在数据可视化仪表板中的应用与实践记录》Python的PlotlyDash库提供了一种简便且强大的方式来构建和展示互动式数据仪表板,本篇文章将深入探讨如何使用Dash设计一... 目录python Dash框架在数据可视化仪表板中的应用与实践1. 什么是Plotly Dash?1.1

springboot报错Invalid bound statement (not found)的解决

《springboot报错Invalidboundstatement(notfound)的解决》本文主要介绍了springboot报错Invalidboundstatement(not... 目录一. 问题描述二.解决问题三. 添加配置项 四.其他的解决方案4.1 Mapper 接口与 XML 文件不匹配

Redis 中的热点键和数据倾斜示例详解

《Redis中的热点键和数据倾斜示例详解》热点键是指在Redis中被频繁访问的特定键,这些键由于其高访问频率,可能导致Redis服务器的性能问题,尤其是在高并发场景下,本文给大家介绍Redis中的热... 目录Redis 中的热点键和数据倾斜热点键(Hot Key)定义特点应对策略示例数据倾斜(Data S

Android Kotlin 高阶函数详解及其在协程中的应用小结

《AndroidKotlin高阶函数详解及其在协程中的应用小结》高阶函数是Kotlin中的一个重要特性,它能够将函数作为一等公民(First-ClassCitizen),使得代码更加简洁、灵活和可... 目录1. 引言2. 什么是高阶函数?3. 高阶函数的基础用法3.1 传递函数作为参数3.2 Lambda