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

相关文章

JS常用组件收集

收集了一些平时遇到的前端比较优秀的组件,方便以后开发的时候查找!!! 函数工具: Lodash 页面固定: stickUp、jQuery.Pin 轮播: unslider、swiper 开关: switch 复选框: icheck 气泡: grumble 隐藏元素: Headroom

大模型研发全揭秘:客服工单数据标注的完整攻略

在人工智能(AI)领域,数据标注是模型训练过程中至关重要的一步。无论你是新手还是有经验的从业者,掌握数据标注的技术细节和常见问题的解决方案都能为你的AI项目增添不少价值。在电信运营商的客服系统中,工单数据是客户问题和解决方案的重要记录。通过对这些工单数据进行有效标注,不仅能够帮助提升客服自动化系统的智能化水平,还能优化客户服务流程,提高客户满意度。本文将详细介绍如何在电信运营商客服工单的背景下进行

不懂推荐算法也能设计推荐系统

本文以商业化应用推荐为例,告诉我们不懂推荐算法的产品,也能从产品侧出发, 设计出一款不错的推荐系统。 相信很多新手产品,看到算法二字,多是懵圈的。 什么排序算法、最短路径等都是相对传统的算法(注:传统是指科班出身的产品都会接触过)。但对于推荐算法,多数产品对着网上搜到的资源,都会无从下手。特别当某些推荐算法 和 “AI”扯上关系后,更是加大了理解的难度。 但,不了解推荐算法,就无法做推荐系

基于MySQL Binlog的Elasticsearch数据同步实践

一、为什么要做 随着马蜂窝的逐渐发展,我们的业务数据越来越多,单纯使用 MySQL 已经不能满足我们的数据查询需求,例如对于商品、订单等数据的多维度检索。 使用 Elasticsearch 存储业务数据可以很好的解决我们业务中的搜索需求。而数据进行异构存储后,随之而来的就是数据同步的问题。 二、现有方法及问题 对于数据同步,我们目前的解决方案是建立数据中间表。把需要检索的业务数据,统一放到一张M

关于数据埋点,你需要了解这些基本知识

产品汪每天都在和数据打交道,你知道数据来自哪里吗? 移动app端内的用户行为数据大多来自埋点,了解一些埋点知识,能和数据分析师、技术侃大山,参与到前期的数据采集,更重要是让最终的埋点数据能为我所用,否则可怜巴巴等上几个月是常有的事。   埋点类型 根据埋点方式,可以区分为: 手动埋点半自动埋点全自动埋点 秉承“任何事物都有两面性”的道理:自动程度高的,能解决通用统计,便于统一化管理,但个性化定

使用SecondaryNameNode恢复NameNode的数据

1)需求: NameNode进程挂了并且存储的数据也丢失了,如何恢复NameNode 此种方式恢复的数据可能存在小部分数据的丢失。 2)故障模拟 (1)kill -9 NameNode进程 [lytfly@hadoop102 current]$ kill -9 19886 (2)删除NameNode存储的数据(/opt/module/hadoop-3.1.4/data/tmp/dfs/na

异构存储(冷热数据分离)

异构存储主要解决不同的数据,存储在不同类型的硬盘中,达到最佳性能的问题。 异构存储Shell操作 (1)查看当前有哪些存储策略可以用 [lytfly@hadoop102 hadoop-3.1.4]$ hdfs storagepolicies -listPolicies (2)为指定路径(数据存储目录)设置指定的存储策略 hdfs storagepolicies -setStoragePo

Hadoop集群数据均衡之磁盘间数据均衡

生产环境,由于硬盘空间不足,往往需要增加一块硬盘。刚加载的硬盘没有数据时,可以执行磁盘数据均衡命令。(Hadoop3.x新特性) plan后面带的节点的名字必须是已经存在的,并且是需要均衡的节点。 如果节点不存在,会报如下错误: 如果节点只有一个硬盘的话,不会创建均衡计划: (1)生成均衡计划 hdfs diskbalancer -plan hadoop102 (2)执行均衡计划 hd

hdu1171(母函数或多重背包)

题意:把物品分成两份,使得价值最接近 可以用背包,或者是母函数来解,母函数(1 + x^v+x^2v+.....+x^num*v)(1 + x^v+x^2v+.....+x^num*v)(1 + x^v+x^2v+.....+x^num*v) 其中指数为价值,每一项的数目为(该物品数+1)个 代码如下: #include<iostream>#include<algorithm>

【Prometheus】PromQL向量匹配实现不同标签的向量数据进行运算

✨✨ 欢迎大家来到景天科技苑✨✨ 🎈🎈 养成好习惯,先赞后看哦~🎈🎈 🏆 作者简介:景天科技苑 🏆《头衔》:大厂架构师,华为云开发者社区专家博主,阿里云开发者社区专家博主,CSDN全栈领域优质创作者,掘金优秀博主,51CTO博客专家等。 🏆《博客》:Python全栈,前后端开发,小程序开发,人工智能,js逆向,App逆向,网络系统安全,数据分析,Django,fastapi