运维开发中数据模型的流程化管理

这是学习笔记的第 1842篇文章

一个系统里面存在几十张表是很正常的事情,如果表数据量巨大,而且随着业务场景的结合,越来越复杂的时候,就会发现原本对于模型的处理就是一种捏橡皮泥的感觉,你得自己手工捏出来它预期的效果,每改一处就需要重新塑造,伤筋动骨。从可持续的迭代改进来说,是到了要重构的阶段了,而如果忍住了坚持下去,会发现规避的问题比带来的问题更多。

对于模型的管理,一种经典的设计思想就是ORM,当然行业内也有很多成熟的方案,在这方面我暂且以基于Django为基础来简单说下,其实和Django的技术细节无关。

首先我们创建了多个model,从数据库层面就会映射出多张表,有的是一对多,有的是多对多。从设计的角度来说,我对model的使用是一种单一的需求,即不希望存在外键,不追求极度设计,允许部分冗余。

当然这对model的管理本身没有变化,基于model的处理有以下的集中设计思路,一种是原生的API方式,比如Django API等。还有一类是作为RESTful API使用比较轻量的方式,基于序列化方案的设计,这类方案相对来说比较精巧,代码量小,没有Django API的功能全面,主要是做模型映射,通常会和API结合使用,不适合一些定制化数据格式的场景。还有一类是raw sql,这是API和序列化之外的下下策。如果确认难以通过上述两种方案满足,使用原生SQL也是支持的,不过不推荐首选。

最硬伤的,如果添加字段,修改字段名等,raw sql方式就很难以扩展。

当然这些都是底层偏技术的事情,如果再上升一层就会发现,问题的复杂度远比这些要高很多。 为此我画了一个图。

640?wx_fmt=png

比如model1的数据变化会联动引起model2的数据变化,就跟一层麦浪一样,其实这种场景是很多的。所以如果要把这些关联联动起来,着实是一件很繁琐的事情。 

而对于数据的管理不只有正向的联动,如果反向的联动,也是有的,比如刚刚是model1的变更联动model2的变更,反之model2的变更也会联动model1的变更,随着业务场景的组合,会发现这个部分会越来越复杂,所以我们要抽象出一个DAO层来统一处理业务层的数据联动。 

而且对于业务层的数据联动,需要通过可配置化的方式实现联动,这样的形式算是一种扩展而且易定制的方案。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

jeanron100

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值