别再给每个指标写一套代码了!这一行配置 JSON, 帮我省掉了未来 80% 的维护工作量

0 评论 178 浏览 0 收藏 8 分钟

当面对看似简单的数据管理需求时,复制粘贴可能是最诱人的解决方案。但本文深度剖析了一位开发者如何破除业务名词的迷雾,通过参数化改造和元数据驱动设计,将一个可能演变为代码『屎山』的系统重构为灵活可扩展的数据引擎。从『出货量』管理到动态图表展示,这些实战经验揭示了如何用第一性原理思考复杂问题。

这事儿得从上周那个让人头大的需求说起。

当时我正盯着那个大宗商品系统的后台发呆(就是你给我看的那几张图),产品经理火急火燎地跑过来说:“我们要加个‘出货量’的数据管理!跟‘月度产量’长得一模一样,就是表头改改名字。”

老实说,那一瞬间我脑子里的第一个念头就是:Ctrl+C,Ctrl+V

真的,这诱惑太大了。把 产量栏目模块复制一份改成 出货量管理模块,前端页面也粘过来,全局替换一下关键词,半天搞定,还能准点下班去撸串。

但也就是那一瞬间,我瞅了一眼左边的菜单栏——好家伙,产量、进出口、库存、成本、利润……这也太多了。要是按这个“复制粘贴”的搞法,每加一个指标就多一套代码,这系统不出半年就得变成屎山,维护起来绝对让人想死。

于是我硬生生忍住了复制的冲动,点了根烟(呃,虽然我不抽烟,你懂那个意思),开始琢磨这事儿的本质。

咱别被“名字”给忽悠了

我们搞技术的,容易被业务名词带着跑。业务说“这是产量”、“那是出货量”,我们就在数据库建两张表。

但你仔细剥开来看看,这俩玩意儿在底层有区别吗?

完全没有!它们都是:某个商品 + 某个时间点 + 一个数值 + 一个单位

这就是所谓的“第一性原理”——把那些花里胡哨的业务外壳扒掉,剩下的一定是通用的骨架。

所以,我没建新模块。我在现有的逻辑里加了个参数 type。

传 type=production,它就是产量管理。

传 type=shipment,它就是出货量管理。

这招“参数化改造”一用,以后就算老板明天脑洞大开要加什么“开工率”、“表观消费量”,我也就是在字典表里加行配置的事儿,代码一行都不用动。这感觉,爽。

哑巴表格怎么开口说话?

搞定了录入,前台展示又是个大坑。

你看咱们那个“自定义数据模板”,本质上就是在网页上搞了个 Excel。用户哐哐哐录了一堆列:R22产量、责任编辑、备注……后台看着挺美,到了前台要画折线图的时候,傻眼了。

程序是死的,它哪知道哪一列是 X 轴?哪一列是数值?哪一列是拿来看的文字?如果这时候还在前端硬写代码:“如果是甲醇模板,就取第三列画图……” 那这前端代码得写到猴年马月去。

这里有个特别骚的操作,也是我后来想通的:给数据挂个“说明书”

我不改表结构,我就在模板定义里偷偷塞一段 JSON 配置。我就告诉前端:“哎,听好了啊,在这个模板里,xx字段 是 X 轴,xx字段 是拿来画线的,别的你别管。”

这就好比给哑巴表格装了个声带。前端组件拿到这个 JSON,不管你录的是甲醇还是乙醇,它照着说明书渲染就行。这就是所谓的“元数据驱动”,听着挺高大上,其实就是把硬编码变成了配置文件。

最头疼的“省份切全国”

最后还有个让很多兄弟翻车的点:维度切换。比如现在的图是分省显示的(江苏、山东、浙江……),用户非要点一下变成“全国总计”。

很多人第一反应是:前端拿到 30 个省的数据,自己算个 Sum 加起来嘛。别!千万别!这要是数据量一大,或者带了分页,前端算出来的数绝对是错的,而且浏览器搞不好直接卡死。

这里有三个路子,咱们得挑最聪明的那个:

最笨的办法:写两套模板,一套存分省,一套存全国。点击按钮就是跳转页面。能用,但土。

比较累的办法:后端实时聚合。发个请求告诉后端“把这堆省给我加起来”。这考验数据库性能。

最鸡贼(也最推荐)的办法:筛选法。其实录数据的时候,往往已经录了一条 province=’全国’ 的数据了。那这个切换按钮,本质上就不是在“计算”,而是在“筛选”。

  • 选“分省” -> 筛选出所有地区不等于 “全国”的数据,也就是各个省份的数据
  • 选“全国” -> 筛选出所有地区等于 “全国”的数据,也就是汇总后的全国数据

你看,把问题想透了,复杂的计算就变成了简单的查询。

哪怕多花两小时思考

回头看这一路折腾,从想复制粘贴,到最后搞出这套“元数据引擎”,虽然刚开始多花了点时间设计 JSON 结构,但这属于“磨刀不误砍柴工”。

咱们做大数据的,最忌讳的就是把自己做成“表单生成器”。业务要什么字段我就加什么字段,那是 CRUD Boy 干的事儿。真正的系统设计,是你看透了它们都是一回事儿,然后造了一个能应付所有变化的引擎。

下次再遇到这种需求,别急着动键盘。先问自己一句:这玩意儿的骨架,到底是什么?想清楚了再动手,那种掌控全局的感觉,真的太迷人了。

本文由 @尤里卡高 原创发布于人人都是产品经理。未经作者许可,禁止转载

题图来自Unsplash,基于CC0协议

更多精彩内容,请关注人人都是产品经理微信公众号或下载App
评论
评论请登录
  1. 目前还没评论,等你发挥!