终于知道为什么我们开发的时候要把用户当白痴了

2022-11-11 16:41:54 +08:00
 itechnology

最近在内部系统开发一个 Excel 导入的功能,用于给公司内部的运营人员导入历史数据,因为这个功能的使用频率不高,历史数据导完就不需要用了,领导决定用存储过程来处理,具体步骤就是先把 Excel 导入到一张临时表中,再在存储过程中将其保存的对应的表里。

产品跟运营人员确定好导入的模板之后,我就开干了,昨天提供了第一批 Excel 数据,这个时候问题来了:

1 、运营提供的 Excel 数据比模板多了一列,比如原本模板中是 ABCDE 五列,结果他们在中间插了一列,变成 ABCFDE

2 、运营提供的 Excel 数据的列的顺序跟模板的不一致,比如原本模板中的顺序是 ABCDE ,他们把顺序变成了 ACBED ;

3 、有些列是下拉选择的,运营提供的 Excel 数据中部分下拉的值跟模板不一致,比如模板中有个下拉值是“身份证”,运营给改成了“个人身份证”;

想想连公司内部人员都这样,普通用户估计更“白痴”了。

11119 次点击
所在节点    程序员
81 条回复
Jessun
2022-11-12 09:51:13 +08:00
1. 程序逻辑上对表格有检查,告诉用户哪里格式不对
2. 文档写好,告诉别人说,就按照文档的格式来,其余格式一律不管。
abuabu
2022-11-12 09:56:01 +08:00
难道你这么自信,自己不是别人的用户?
chrosing
2022-11-12 09:57:01 +08:00
@dudubaba 前端就做了一个上传导入按钮 其他的逻辑判断全是我们后端在做 :doge
hahaayaoyaoyao
2022-11-12 09:58:43 +08:00
@kwh 可能你们不在同一个宇宙或说的不是一个几何学 [表情]
morgan1freeman
2022-11-12 10:43:38 +08:00
很正常,所以 excel 导入这种 一般都是坑,你把模板 丢给 运营或者用的人来填,都会有各种意外的填写,程序再怎么健壮,都没办法预测到所有的情况,因为编写程序的都是人,执行程序的也不是一台高智能机器,所以不可能覆盖到所有情况,,而且说白了 60%以上的代码分支 本身就没什么用,都是为了防止使用者犯傻,
iAIR
2022-11-12 10:48:22 +08:00
根据列头来导入表列,而不是根据列顺序导入,这应该是最基本的设计。
你所用的导入方法只适合导入原本导出且未更改的文件,或固定程序自动生成的文件,不适合人工填制的文件。

另外你缺少一个足够配合的用户,我以前遇到 SAP 上传各种限制(而且不报错、或报错但不给原因),最后我作为用户自己撸了 VBA 确保生成的文件能直接上传。限制或问题比如:
* 必须是分号(;)分隔的 csv 格式
* 数字不能带千分号(或者可以千分号用点、小数点用逗号)
* 必须是 UTF-8 without BOM 编码
* 不能少列多列
* 数据里特定字符会被默默替换掉
* 末尾不能多空行
* 一开始 IT 随手给了个旧模板,上传出错才发现有新模板
* 模板 Excel 有些单元格被设置成错误格式
* 模板里部分示例是错误的
* 币种列为特定值时,金额列的对应值会被乘以 100 (文档没提,IT 查看代码才确认有这设计)
Torpedo
2022-11-12 10:51:40 +08:00
导入要提供模板,然后导入的时候一定要强校验表头的

这种需求很常见,做多了就有经验了
hahaFck
2022-11-12 11:06:01 +08:00
楼主本是想吐槽一下,结果被喷傻了吧,哈哈。
tuutoo
2022-11-12 11:31:57 +08:00
很正常的 见多了 Excel 里给你多个空格 少个空格 中英文逗号 各种格式 日期处理 一会文本 一会日月年 年月日的
kwh
2022-11-12 11:33:48 +08:00
@hahaayaoyaoyao 也不是说他们不知道平行线不相交,他们知道,初中知识谁不会知道,但是他们无法将这个初中知识应用于荒野行动这个游戏,放到游戏里面他们就理解不了了。
那两个反应不过来的,说好听点是打游戏真 TM 不带脑子,至于那个 B 则完全无法理解 平行线不相交这个规则 在游戏中是如何存在的,可以说真的是智力偏低。
说真的,以前我真不认为有人会智商低,充其量就是 脑子里面的知识不如别人 而导致的不知道,但是现实告诉我真的有人智力偏低。
sarices
2022-11-12 11:56:20 +08:00
不常用的我都是建议用户把文件发给我,我来自己导入,经常用的,当然要写程序再导入前验证所有格式,然后让用户预览后再确认导入
jaggle
2022-11-12 12:35:50 +08:00
优秀的程序应该是:程序不需要帮用户做任何事情,你们用数据库导表,就不满足这一点。

你帮用户做事,意味着你们需要处理异常-沟通-处理异常-继续沟通

你们至少需要弄一个简单的页面,在上面让用户上传表格,如果出错了,及时显示错误信息在界面上,例如“第三列应当为 身份证号码”


只要你 catch 到了足够的异常,用户就可以自己去解决异常。
uvwlab
2022-11-12 12:44:35 +08:00
产品开发,不要太自我
mmdsun
2022-11-12 13:58:38 +08:00
我是先查询表格头做成 map, 再去匹配用户的 excel 的 即使列顺序不一样也可以。
imydou
2022-11-12 14:10:47 +08:00
@mmdsun #74 用户把表头改了名
Chisel
2022-11-12 14:19:05 +08:00
我一般会在第一行弄一个大的单元格,把注意事项写到里面。
shaojz2005
2022-11-12 15:28:07 +08:00
要看投入时间和成本,内部使用,我倾向于给运营培训,而不是把这个程序写得很复杂。

如果外部使用,给 C 端用户用,可以慢慢研究完善。
690135443
2022-11-12 17:03:09 +08:00
所以我在和业务部门的大佬们沟通需求的时候把用户可能会出的问题都提前说明了,业务部门的大佬就会去和用户说必须这样必须那样,严禁这样严禁那样,我自己做的时候就方便多了。
imycc
2022-11-12 17:26:38 +08:00
这种事情,只是约定了格式还不够,参数校验能解决很多麻烦。列数不对的、顺序错误的、表头名称错误的、取值范围错误的,通通在用户提交数据的时候报错,能极大减少沟通、排错的成本。

让程序兼容、自动纠错、培训用户,都是费时费力的事情,而且也不能阻断后续的错误。
fox0001
2022-11-12 17:39:29 +08:00
还不如让运营提供数据,你们自己导进系统。可能代码都不用写。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/894527

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX