
迎靠近看似浅陋的数据管制需求时,复制粘贴可能是最诱东说念主的解决决议。但本文深度明白了一位建造者如何拔除业务名词的迷雾,通过参数化转变和元数据驱动想象,将一个可能演变为代码『屎山』的系统重构为生动可膨大的数据引擎。
———— / BEGIN / ————
这事儿得从上周阿谁让东说念主头大的需求提及。
那时我正盯着阿谁巨额商品系统的后台怔住(即是你给我看的那几张图),家具司理火急火燎地跑过来说:“我们要加个‘出货量’的数据管制!跟‘月度产量’长得一模相似,即是表头改更名字。”
老诚说,那刹那间我脑子里的第一个念头即是:Ctrl+C,Ctrl+V。
的确,这诱骗太大了。把 产量栏目模块复制一份改成 出货量管制模块,前端页面也粘过来,全局替换一下关节词,半天治理,还能准点放工去撸串。
但也即是那刹那间,我瞅了一眼左边的菜单栏——好家伙,产量、出进口、库存、老本、利润……这也太多了。若是按这个“复制粘贴”的搞法,每加一个主义就多一套代码,这系统不出半年就得酿成屎山,珍重起来所有让东说念主想死。
于是我硬生生忍住了复制的冲动,点了根烟(呃,天然我不吸烟,你懂阿谁道理),启动计议这事儿的内容。
咱别被“名字”给忽悠了
我们搞技巧的,容易被业务名词带着跑。业务说“这是产量”、“那是出货量”,我们就在数据库建两张表。
但你仔细剥开来望望,这俩玩意儿在底层有辩别吗?
完全莫得!它们齐是:某个商品 + 某个时刻点 + 一个数值 + 一个单元。
这即是所谓的“第一性道理”——把那些花里胡梢的业务外壳扒掉,剩下的一定是通用的骨架。
是以,我没建新模块。我在现存的逻辑里加了个参数 type。
传 type=production,它即是产量管制。
传 type=shipment,它即是出货量管制。
这招“参数化转变”一用,以后就算雇主来日脑洞开放要加什么“开工率”、“表不雅挥霍量”,我也即是在字典内外加行成立的事儿,代码一瞥齐无用动。
这嗅觉,爽。
哑巴表格怎么启齿话语?
治理了录入,前台展示又是个大坑。
你看我们阿谁“自界说数据模板”,内容上即是在网页上搞了个 Excel。用户哐哐哐录了一堆列:R22产量、背负剪辑、备注……后台看着挺好意思,到了前台要画折线图的时候,傻眼了。
设施是死的,它哪知说念哪一列是 X 轴?哪一列是数值?哪一列是拿来看的笔墨?如果这时候还在前端硬写代码:“如果是甲醇模板,就取第三列绘画……” 那这前端代码得写到驴年马月去。
这里有个相等骚的操作,米兰app官方网站亦然我自后想通的:给数据挂个“讲解书”。
我不改表结构,我就在模板界说里暗暗塞一段 JSON 成立。我就告诉前端:“哎,听好了啊,在这个模板里,xx字段 是 X 轴,xx字段 是拿来画线的,别的你别管。”
这就好比给哑巴表格装了个声带。前端组件拿到这个 JSON,无论你录的是甲醇照旧酒精,它照着讲解书渲染就行。这即是所谓的“元数据驱动”,听着挺渊博上,其实即是把硬编码酿成了成立文献。
最头疼的“省份切天下”
终末还有个让好多昆玉翻车的点:维度切换。比如当今的图是分省露馅的(江苏、山东、浙江……),用户非重点一下酿成“天下共计”。
好多东说念主第一反映是:前端拿到 30 个省的数据,我方算个 Sum 加起来嘛。别!千万别!这若是数据量一大,大要带了分页,前端算出来的数所有是错的,况兼浏览器搞不好径直卡死。
这里有三个门道,我们得挑最贤慧的阿谁:
最笨的见解:写两套模板,一套存分省,一套存天下。点击按钮即是跳转页面。能用,但土。
相比累的见解:后端及时团员。发个央求告诉后端“把这堆省给我加起来”。这推行数据库性能。
最鸡贼(也最推选)的见解:筛选法。其实录数据的时候,通常也曾录了一条 province=’天下’ 的数据了。那这个切换按钮,内容上就不是在“估量打算”,而是在“筛选”。
选“分省” -> 筛选出通盘地区不等于 “天下”的数据,也即是各个省份的数据
选“天下” -> 筛选出通盘地区等于 “天下”的数据,也即是汇总后的天下数据
你看,把问题想透了,复杂的估量打算就酿成了浅陋的查询。
哪怕多花两小时念念考
回头看这一齐折腾,从想复制粘贴,到终末搞出这套“元数据引擎”,天然刚启动多花了点时刻想象 JSON 结构,但这属于“磨刀不误砍柴工”。
我们作念大数据的,最忌讳的即是把我方作念成“表单生成器”。业务要什么字段我就加什么字段,那是 CRUD Boy 干的事儿。确切的系统想象,是你识破了它们齐是一趟事儿,然后造了一个能嘱咐通盘变化的引擎。
下次再碰到这种需求,别急着动键盘。先问我方一句:这玩意儿的骨架,到底是什么?想明晰了再动手,那种掌控全局的嗅觉,的确太迷东说念主了。
{jz:field.toptypename/}本文来自公众号:尤里卡高 作家:尤里卡高
想要第一时刻了解行业动态、口试技能、买卖学问等等等?加入家具司理进化营,跟优秀的家具东说念主全部疏导成长!
