【产品设计】ToB 增删改查显算传
入职培训时技术leader说:“我不需要你们太聪明,做好基础的增删改查就可以了。”看似很简单的活,要做好并不容易。基础的坑在哪里呢?
一、 增(新增、创建、导入)
1. 明确表字段类型
新增的业务是由不同类型的字段组合而成,每个字段具体的类型应该给出明确定义,这关系到数据库字段存取的设计、后台逻辑的编写以及前端页面的数据输入方式以及展示形式。
常用表字段:
- 文本(中文文本、英文文本等,可统一定义为字符串)
- 数字(整数、小数、正负数、阿拉伯数字、中文数字、罗马数字等)
- 时间、日期(yyyy-MM、yyyy-MM-DD、yyyy-MM-DD hh:mm:ss、hh:mm:ss、hh:00等)
- 字典表(一般用于定义业务状态,如结算状态字典可定义“待结算”、“已结算”)
表字段信息说明:
- 字段必填、非必填;强业务关联的数据或者其他必要信息设为必填字段;
- 字段唯一性;唯一的字段组合设置为表结构的主键;
- 字段长度;表字段长度的限制,主要是为了合理分配客户端的内存资源;
- 字段的默认值;对于固定确认的数据,可设置默认值,减少操作员的数据录入工作量;
- 字段校验;例如手机号、身份证号码、银行卡格式标注校验,可根据业务情况说明校验规则;
- 选项型,说明单选、多选;
- 专有名词解释说明,业务场景描述,协助开发人员理解文档。
输出结果如图一、图二:
小结:
有的项目组可能会要求产品经理进行初级的表结构设计,即以上说明的内容,专业部分的内容由DB进行设计完善。这样做有利于产品经理明确字段的含义,理解表字段的存取路径,设计逻辑,能更深程度的参与到项目开发与沟通协调中。
2. 准确使用信息输入的方式
表字段的类型不同,信息的输入方式对应会有差别(如图三)。若前端页面运用错误的输入样式,则会导致新增报错,业务流程无法继续。
例如应该是下拉选择的字典值,运用了手动填写的文本框,必然会出现人为填写错误,与数据库字典表无法匹配的bug。
3. 设置合理的图片限制
新增业务中,上传图片是很常见的需求。考虑到图片的上传、加载速度,兼容问题,需要对图片的大小、格式进行限制说明。
常规的图片格式包括:jpg、png、gif、bmp、gif,大小限制在500k~2M范围内。
如图四:
4. 设置及时完善的错误信息提示
用户输入的过程中,需要对填写的信息有及时全面的反馈,例如必填字段漏填、有格式校验的数据填写错误等,如图五:
5. 提高长表单的处理效率
- 对于较长的表单,流程分步操作,减轻用户的认知负荷和心理压力;
- 对于相关的信息进行合理分组展示,高效填写;
- 采取高效填写的方式,避免出错;例如银行卡扫码、拍照识别;小结:新增是业务开始的第一个环节,数据进入系统的源头。若新增不顺畅或者总是报错,会导致业务流程顶部断层无法继续、用户体验感极差,甚至有可能会导致项目验收失败。
二、删除(删除、取消、禁用、停用)
数据有新增的路径,就会存在删除的需求。
通常说的删除,包含两种:
- 物理删除:真实删除,从数据库层面删除了数据,查询找不到该条数据,数据不可恢复;一般对于重要的基础数据,不建议设置删除功能,设计中要避免不可逆的操作;
- 逻辑删除:假删除,只是从页面对数据进行了删除,数据库将数据的状态改写为“已删除”,可通过删除后撤回或者数据库备份恢复,产品设计中比较常用。
数据的前后业务关联太强,不适合设计删除功能,那应该如何对数据进行合理的处理呢?
个人理解的删除需求的存在,可能存在以下几种情况:
- 过期无用信息:可以设计数据库定时任务,根据实际的业务情况和指定条件,定期清理垃圾数据,适用于数据量较大的情况;
- 信息录入错误:逻辑删除或者使用编辑功能修改数据;
- 数据状态改变,或需要中止业务:使用字典状态来限制。
最后一种情况,笔者做的TMS物流运输系统中,客户曾提出过这样的需求:车辆出现故障或者正常维修停运,而业务人员在创建订单的时候,可能还是会选到这辆车。对于这种车,我们要在系统中进行删除,以免误选(典型的伪需求)。
经过实际的业务分析,发现直接删除车辆信息会有几个问题:
- 车辆维修保养结束后,需要操作员再次填写车辆信息,用户体验差且浪费人力资源;
- 车辆的维修保养比较常见,若操作员未及时补录恢复运营的车辆,会对运输业务产生影响;
- 车辆的运输里程涉及到财务的结算支付,若删除会需要写大段的逻辑代码来判断车辆关联的业务情况,以及财务结算状态,开发工作量大。
最终处理结果:
设计车辆停用功能,保存车辆的基本信息,维修结束后恢复运营状态;停用期间数据封装,不影响还未结算完的财务数据。
类似的数据需要暂停业务,后期可能需要恢复的,可以采取【删除后撤销】、【停用】、【禁用】等假删除形式进行处理。
小结:
根据业务状况确认信息是否允许删除;允许删除的数据,需要进行二次确认提示,降低误删的可能性。
三、改(修改、编辑、批量修改)
新增的数据维护错误或者业务发生变动,可能会需要修改。
1. 修改的形式
点击列表按钮,进入二级页面/弹窗修改。
在列表单元格内直接编辑修改。
列表内嵌子表格编辑修改,不常用,适用于需要小面积修改的信息。
大范围的数据变动,导入表格批量修改。
数据出错,页面无法修改,进入数据库直接修改数据(很少见,且不建议)。
2. 修改注意事项
- 页面明确区分允许可编辑和不可编辑的内容;
- 构成数据唯一性的字段不允许修改;
- 完成认证闭环的数据不允许修改;例如强制实名认证的信息完成后不允许修改;
- 修改保存后,二次弹窗确认;
- 长表单分步骤录入的信息,选择单独模块编辑修改;
- 长表单信息修改设定本地缓存机制,避免网络中断等原因需重新编辑上传数据;
- 强业务关联的数据,需要确认修改后是否对其他模块列表数据关联变更;
- 敏感数据提供修改日志;
- 不同用户的修改权限设定。
3. 批量修改
- 批量修改应定义数据唯一性的标记;例如批量修改员工信息,可能存在姓名相同的情况如果只判断导入的修改模板,只要姓名相同而其他数据不同,则修改数据,会导致修改失败或者其他后果;
- 批量修改导入了重复数据,应明确是直接覆盖源数据后导入,或提示修改模板后重新导入,或直接跳过重复数据。
四、查(查询、搜索)
合理的查询条件和样式的设计,有助于用户快速准确的找到需要的信息。
常用的查询方式有:
1. 同步查询、组合条件查询
设置默认查询条件,常用有默认查询日期、默认状态查询,有助于用户快速获取需要的信息。
2. 精准查询 or 模糊匹配;
精准查询适用于字段简短准确的数据,用户记忆成本高于模糊匹配,而后者是查询中比常用的形式。
例如根据身份证号码查询用户信息,只需要输入1991,则查询出列表中所有包含1991的身份证数据,可能查询出来的结果为:4280861996054212或者4758261991024483。
按状态值快速过滤,业务流程类比较常用。
自定义设置查询条件;展示高频查询条件,低频查询条件按钮收起隐藏,且允许自定义设置查询字段。
提供查询历史记录,有必要的情况下可根据历史查询词条的热度进行排序。
3. 定时器任务查询
比较专业的范畴,请教了一下开发同学, 我们一般说定时器是指,按照某个特定的时间间隔执行某一段命令(无法深入说明了,抱歉);
笔者项目中目前只运用过定时器请求银行流水,查询余额,有机会可以写一下。
4. 查全局 or 查局部 ?
考虑到数据的安全性问题,可能有些产品设计上会限制查询的界限,限制查询出的结果只展示部分数据。
例如设置某些用户只能查询特定条件下的数据,获取过滤后的数据量。
五、显(显示、回传、列表样式)
后台系统的数据和业务流程,90%以表格的形式展示出来,显示样式是否合理,直接关系到用户对产品的第一印象和日常使用体验。
网上已经有很多优秀的文章专门讲解后台表格设计的样式及使用场景,这里只简要说明一下。
列表按照功能区域,可划分为筛选区、操作区、表头、正文、分页。
【筛选区】主要用于设置数据的筛选条件,进行搜索;已经详细说明过查询,不再赘述。【操作区】主要用于对数据进行功能性的操作,常见的有增删改查、业务功能等。
- 操作按钮较多,建议按照业务的流程排布,避免用户需要不停调转视线寻找按钮;
- 相同的功能划分合理,收起在一个菜单按钮中,避免功能太多,用户要在界面寻找按钮的情况。
- 例如【设置服务费率】和【查看服务费率】属于同一个功能区域,可以设计成下拉展开的形式;
- B端系统的设计,要有堆积木的概念,功能与功能之间,最好是独立的,不互相牵扯;一个按钮代表一个功能操作。
【表头】概括表格要展示的字段信息以及排序、自定义展示字段。
有必要的情况下,可以添加浮窗文本对字段进行解释,协助用户理解字段含义。
数据列比较长的情况下,冻结表头,方便内容对应字段。
信息层级区分,同类型的数据表头合并单元格。
【正文】展示具体的数据内容;正文内容的注意要点有:
数字,一般展示小数点后两位,右对齐展示,减轻用户计算的压力,可以根据数字串的长度很直观的辨别数字的大小;特别是货币类数字的展示。
对齐,可比较的字符串右对齐,固定长度的字符串居中对齐,其他文本类型字符串可选择对齐。
时间格式,补充数字“0”让文本对齐。
空白,没有数据的单元格用“—”符号占位,保持视觉的统一性。
分割,常见表格式分割、横向分割(专注行数据)、纵向分割(专注列数据)、无线条分割(数据量少,干扰信息少,信息页面简洁)、斑马线展示(方便用户定位当前查看的数据行);大家可以对比不同分割样式在视觉上的引导作用。
信息层级,常见的有任务分级或权限分配类采用树状结构进行信息层级的划分。
列表中的数据是对增删改等操作之后的回传结果,如果前端接口对错或者字典取错,很容易导致页面或者单元格数据为空,更有可能会出现奇形怪状的数据。
在项目验收的时候,一定多多留意列表的回显字段,常用F12协助测试及开发人员排查bug原因。
小结:
个人认为excel玩的溜的,表格设计基本妥了。特别是可视化数据展示,excel的各种精美模板可是唾手可得的优秀学习素材。
【分页】分页的样式很多,功能总结为:
- 列表的总数量;
- 每个页面展示的数量条数;
- 当前所处页面;
- 进入上一页下一页首页末页;
- 直接跳转到指定页面。
结语:
标题定的增删改查显算传,实际上算法和传输,都属于比较专业的范畴,希望以后有机会能深入接触,补上这个坑。毕竟现在也是产业互联网化、数字化的时代,学些数据算法、传输技术总没错。
相关文章:

【产品设计】ToB 增删改查显算传
入职培训时技术leader说:“我不需要你们太聪明,做好基础的增删改查就可以了。”看似很简单的活,要做好并不容易。基础的坑在哪里呢? 一、 增(新增、创建、导入) 1. 明确表字段类型 新增的业务是由不同类型…...

MySQL(二)视图、锁、存储过程、触发器、锁以及常用工具
MySQL进阶视图检查选项视图的更新存储过程存储过程基本语法变量系统变量用户自定义变量局部变量if判断参数casewhile循环repeat循环loop循环cursor游标handler条件处理程序存储函数触发器锁全局锁表级锁表锁元数据锁意向锁行级锁行锁间隙锁&临键锁InnoDB引擎逻辑存储结构事…...

CorelDRAW Graphics Suite2023更新内容介绍
懂设计的职场人都知道这款软件,CorelDRAW是一款非常高效的矢量图形设计软件。CorelDRAW操作界面简洁易懂,能够为用户提供精确地创建物体的尺寸和位置的功能,减少点击步骤,提高设计效率,节省设计时间。功能比普通的美图…...

2021牛客OI赛前集训营-提高组(第三场) T1变幻
2021牛客OI赛前集训营-提高组(第三场) 题目大意 对于一个大小为nnn的数组aaa的任意一点iii,若满足ai−1>aia_{i-1}>a_iai−1>ai且ai<ai1a_i<a_{i1}ai<ai1,则称iii为山谷点。111和nnn不可能为山谷点。…...

你还在使用if-else写代码吗,今天带你领略下策略模式的魅力!
1、什么是策略模式 策略模式其实也是在解耦,把策略的定义、创建、使用这三个部分解耦开来,因为本身策略模式也是基于接口编程,这样其实可以简单的理解客户端调用使用接口进行编程,可以通过工厂方法创建对应的策略模式,…...

Leetcode. 21 合并两个有序列表
尾插 核心思路:依次比较 ,取经过比较后较小值进行尾插 cur1 指向list1 ,cur 2指向list2 ,当cur1走完list1 或者cur2 走完list2 后停止 如果cur1走完list1 ,可以将cur2 整个拿下来尾插 如果cur2走完list2 ,可以将cur1 整个拿下来尾插 特殊情况 ࿱…...

使用 Wall 教你搭建 照片墙 和 视频墙
下载 Github:https://github.com/super-tongyao/wall 国内仓库(不推荐,只做加速访问,无编译包和发行版,以github仓库为准):https://gitee.com/Super_TongYao/wall 推荐github仓库,下载最新版…...

0103 MySQL06
1.事务 1.一个事务其实就是一个完整的业务逻辑 如:转账,从A账户向B账户转账10000,将A账户的钱减去10000(update),将B账户的钱加上10000(update),这就是一个完整的业务逻…...

【UE4 RTS游戏】04-摄像机运动_鼠标移动到视口边缘时移动Pawn
效果可以看到当鼠标移动到视口边缘时,Pawn就会向这个方向移动。步骤打开项目设置,添加两个操作映射打开“CameraPawnController”,在事件图表中添加两个浮点型变量,一个为公有一个为私有。分别命名为“ZoomSensitivity”、“MaxAr…...

147597-66-8,p-SCN-Bn-NOTA,NOTA-P-苯-NCS新型双功能螯合剂
p-SCN-Bn-NOTA | NOTA-P-苯-NCS | CAS:147597-66-8 | 纯度:95%1.p-SCN-Bn-NOTA试剂信息:CAS号:147597-66-8外观:白色固体分子量:C20H26N4O6S分子式:448.4928溶解性:溶于有机溶剂&…...

JDK解压安装及idea开发工具配置
1. 安装JDK 1.1 下载安装包 下载安装包,直接解压,注意,解压的路径不要有中文 1.2 配置环境变量 右键点击我的电脑,选择属性 选择高级系统设置 选择环境变量 选择新建 在变量名中输入JAVA_HOME,变量值就是1.1中压缩包…...

使用Ubuntu中的Docker部署Remix
一、简介1.博主这里使用的是腾讯云的服务,然后使用Docker进行部署Remix。2.踩了几个坑,没有花费过多时间,所以这篇文章会记录踩过的坑。然后避免你们掉进去,然后花费过多时间。3.这里就不写怎么安装Docker了,因为博主上…...

【MySQL】P9 多表查询(3) - 子查询
子查询子查询基本概念(公式)子查询分类按照结果分类标量 子查询列 子查询行 子查询表 子查询子查询 基本概念(公式) SQL查询语句中嵌套Select语句,称为嵌套查询,亦称为子查询; select * from…...

SpringMVC中的拦截器不生效的问题解决以及衍生出的WebMvcConfigurationSupport继承问题思考
文章目录SpringMVC中的拦截器不生效的问题解决WebMvcConfigurationSupport继承问题思考SpringMVC中的拦截器不生效的问题解决 过滤器代码(被Spring扫描并管理): Component public class StuInterceptor implements HandlerInterceptor {Overridepublic boolean pr…...

【量化交易笔记】3.实现数据库保存数据
上一节,我们通过下载相关的 pandas 数据保存为 本地csv文件,这一节将上节的数据以数据库方式保存。 数据库保存 采集数据部分前一节已做说明,这里就直接用采用前面的内容。这里着重说明的事数据库连接。对与 python 相连接的数据库有很多&a…...

[数据结构]:15-堆排序(顺序表指针实现形式)(C语言实现)
目录 前言 已完成内容 堆排序实现 01-开发环境 02-文件布局 03-代码 01-主函数 02-头文件 03-PSeqListFunction.cpp 04-SortCommon.cpp 05-SortFunction.cpp 结语 前言 此专栏包含408考研数据结构全部内容,除其中使用到C引用外,全为C语言代码…...

蓝桥 卷“兔”来袭编程竞赛专场-02破解曾公亮密码 题解
赛题介绍 挑战介绍 曾公亮编撰的《武经总要》中记载了一套严谨的军事通信密码,这也是目前发现我国古代战争中最早使用的军用密码表。将战场上可能常用到的情况,用 40 个短语归纳表示,且每个短语前编有固定的数字代码,这 40 个短…...

CSS定位
🍓个人主页:bit.. 🍒系列专栏:Linux(Ubuntu)入门必看 C语言刷题 数据结构与算法 HTML和CSS3 目录 1.1为什么需要定位? 1.2定位组成 1.3静态定位static(了解) 1.4相对定位 relative …...

python sympy库
sympy库是python的符号运算库,是电脑辅助简单数学函数计算的好工具。本文简单记录了一下有关sympy的方法。建议使用jupyter notebook,这样输出的函数很好看。 文章目录sympy基础安装自变量(Symbols)函数表达式(Expr&am…...

达梦数据库统计信息的导出导入
一、统计信息对象统计信息描述了对象数据的分布特征。统计信息是优化器的代价计算的依据,可以帮助优化器较精确地估算成本,对执行计划的选择起着至关重要的作用。统计信息的收集频率是一把双刃剑,频率太低导致统计信息滞后,频率太…...

信息系统基本知识(六)
大纲 信息系统与信息化信息系统开发方法常规信息系统集成技术软件工程新一代信息技术信息系统安全技术信息化发展与应用信息系统服务管理信息系统服务规划企业首席信息管及其责任 1.7 信息化发展与应用 我国在“十三五”规划纲要中,将培育人工智能、移动智能终端…...

<C++>智能指针
1. 智能指针 #define _CRT_SECURE_NO_WARNINGS #include<iostream> #include<memory> using namespace std;int div() {int a, b;cin >> a >> b;if (b 0)throw invalid_argument("除0错误");return a / b; }void func() {int* p1 new in…...

1.分析vmlinux可执行文件是如何生成的? 2.整理内核编译流程:uImage/zImage/Image/vmlinx之间关系
一、分析vmlinux可执行文件是如何生成的? 1、分析内核的底层 makefile 如下: vmlinux: scripts/link-vmlinux.sh vmlinux_prereq $(vmlinux-deps) FORCE$(call if_changed,link-vmlinux)vmlinux_prereq: $(vmlinux-deps) FORCE发现vmlinux的生成主要依…...

数据结构4——线性表3:线性表的链式结构
基本概念 链式存储结构用一组物理位置任意的存储单元来存放线性表的数据元素。 这组存储单元既可以是连续的又可以是不连续的甚至是零散分布在任意位置上的。所以链表中元素的逻辑次序和物理次序不一定相同。而正是因为这一点,所以我们要利用别的方法将这些…...

weblogic 忘记密码重置密码
解决:weblogic 忘记密码 weblogic安装后,很久不用,忘记访问控制台的用户名或者密码,可通过以下步骤来重置用户名密码。 版本:WebLogic Server 11g 说明:%DOMAIN_HOME%:指WebLogic Server 域(…...

安卓开发之动态设置网络访问地址
之前开发程序联测测接口的时候,因为要和不同的后台人员调接口,所以经常要先把程序里的ip地址改成后台人员给我的。每次都要先修改ip地址,之后编译运行一下,才能测试。但要是换了个后台人员,或者同时和2个后台人员测接口…...

深度学习模型训练工作汇报(3.8)
进行数据的初始整理的准备 主要是进行伪序列字典的设置,以及训练数据集的准备。 期间需要的一些问题包括在读取文件信息的时候,需要跳过文件的第一行或者前两行,如果使用循环判断的话,会多进行n次的运算,这是不划算的…...

【ns-3】添加nr(5G-LENA)模块
文章目录前言1. 下载5G-LENA源代码2. 配置并重新构建ns-3项目参考文献前言 本篇以ns-3.37为例介绍如何在ns-3中添加nr(5G-LENA)模块 [1]。5G-LENA是一个由Mobile Networks group CTTC(Centre Tecnolgic de Telecomunicacions de Catalunya&a…...

(枚举)(模拟)(前缀和)(数组模拟哈希)(可二分)1236. 递增三元组
目录 题目链接 一些话 流程 套路 ac代码 题目链接 1236. 递增三元组 - AcWing题库 一些话 int f[N]; memset(f,0,sizeof f)影响不到f[N] 所以尽量不要对f[N]赋值,不要用f[N]操作 流程 //由三重暴力i,j,k因为三重暴力底下是分别用i和j,j和k作比较…...

mysql五种索引类型(实操版本)
为什么使用索引 最近学习了Mysql的索引,索引对于Mysql的高效运行是非常重要的,正确的使用索引可以大大的提高MySql的检索速度。通过索引可以大大的提升查询的速度。不过也会带来一些问题。比如会降低更新表的速度(因为不但要把保存数据还要保…...