树-图架构(TGA)

树-图架构(TGA)

前言

本文描述一种软件架构思路灵感来源思维导图,这是人类普遍接受信息组织方式。以下内容涵盖了数据设计范式模块依赖的设计范式。本架构适用于百分之91需要人工编码业务系统不适用于基于大模型、AI的系统

树网的形状

对于信息组织处理具象化到逻辑图上面,人们更容易使用思维导图来描述。思维导图一种树形结构然而大部分实际业务逻辑包含少量复杂的耦合结构这也是易于bug混乱部分这些思维逻辑反馈图上是一种多对多关联的网状结构因为大部分业务系统还是树形结构为主所以这种设计树图架构(Tree and Graph Architecture ,简称TGA)。

下面反应一种基于RBAC用户体系树网架构系统最为最上层节点子节点分为RBAC用户体系RBAC用户体系用户角色菜单部门权限是一个对多关系即为结构出口为用户切换部门和角色各个功能关系各个功能RBAC用户体系子表树状结构我们可以看到整个系统主要形状还是一个清晰的树状结构较为复杂的用户体系已经RBAC这样成熟用户体系作为一个独立支撑模块

数据库设计

数据库设计的前提条件是要满足BCNF范式每一个职能单一比如用户信息用户信息不能用户信息放在用户角色关系表中这样目的为了避免逻辑混乱谬误耦合然而对于高并发型系统或者联结系统不可避免数据冗余冗余也可以避免程序连接查询SQL语句经过这么多年实践观察数据库连接查询极易造成业务系统性能瓶颈严格符合BCNF数据库设计范式(主外键关联)的情况查询数据常常是不准确维护SQL成本出错所以在这宁可冗余推荐关联查询

既然冗余无法避免我们可以约定以下几点即可解决冗余弊端

  1. 冗余数据作为前端系统查询使用严格保证冗余数据一致性
  2. 逻辑业务处理根据键值实时查询业务表不可使用冗余值
  3. 冗余字段要加表名前缀这样整个系统我们只要看到字段名称就能知道哪个冗余数据

综合以上几点我们发现即使使用冗余我们依然可以看到符合BCNF范式设计初衷结构依然清晰结构为了区分这种设计我们称之为BCNF冗余范式英文简写BCNF-R范式。

下面是一个点对点的任务通知系统的ER图,满足BCNF-R数据库范式这种字段前缀命名方式在整个系统不会产生命名冲突具有唯一性原则我们可以清晰得知这个字段冗余哪个业务表哪个字段

模块设计

软件开发循环依赖或互相耦合是非常不友好,不仅会造成业务逻辑复杂,维护困难,也不易产品化,复用不友好。诸如此类问题的根本原因通常不在需求,大多是没有很好归纳信息导致以下列举一些循环依赖或互相耦合的例子

假设我们有某百万级级大型保险系统中3个模块用户体系模块,联盟商城模块,保单模块。起初这是依赖简单的模块,商城模块和保单模块依赖于用户体系模块,用户体系模块独立。某天产品经理提了一个需求:凡2025年注册并购买保单用户在春节期间的关键的时间点给用户派发亿点点商城现金返利福利并给其家人发送新年祝福短信,且同类福利只发送一次,系统针对新注册用户使用同系统发放其他组合福利。

到这里我们看看A同学的做法:A同学一看需求,这简单我数据学的好,一个SQL搞定用户群体的查询,于是左一个连接一个连接商城模块就把用户查询出来或许觉得只是用户应该放在用户模块需求很快完成正式环境项目经理刚想这位同学干活效率高业务部门抱怨已经错过用户热情于是咔咔一顿索引优化sql服务器,最后还是慢,甚至经历了锁表,给公司造成了经济损失,让运维部研发部等多个部门蒙上深深的阴影,最后得出结论用户量太大,只能分库分表最后程序这堆复杂sql分库分表适配增加一堆复杂逻辑最后整个系统乱成谁来骂娘,此时已经积弊良多,系统只能在这帮“老专家”的手里艰难的创造业绩。

我们看看B同学做法B同学要比A同学考虑B同学考虑为了避免出现循环依赖一个模块依赖保单模块查询购买保单用户ID,依赖用户模块查询2025注册用户详细信息依赖联盟商城模块调用派发购物券API根据用户等级家人信息发送祝福短信息最后B同学结合分布式事务缓存技术费了九牛二虎之力终于搞定了这个需求系统稳健运行老板还看到了B如此努力辛苦不禁感慨有一个好员工,业务完成过后是财务部门对账时刻,一顿咔咔编码终于八九不离十最后成果也是可喜可贺

最后我们看看C做法C同样懂得模块依赖合理性重要同时他觉得查询用户信息就是用户模块职责没必要耦合其他模块写复杂耦合逻辑(都是研发维护成本),只需要用户模块加一个标签的API即可保单模块写一个逻辑批量用户已购买保单标签面对百万条保单也是几分钟轻松打完了一个面对新保单数据也是实时标签商城模块用户某某福利标签最后根据用户标签我们可以轻松得出想要用户数据

综上比较A同学设计灾难性的B同学3个关联需求迭代的平均研维成本是大概是3人天,C同学成本半人不到

最后总结当下大环境百分之70软件研发公司没有架构专职或合适的人员担任这一职务,所以或多或少的遭受A困境因为大家起跑线环境各不相同,所以软件研发成本难以比较,且造成困境的问题原因专业人才不能得知不易老板理解所以大部分老板蒙在鼓里,只能重金聘请架构,然后重金聘请来的架构也只是尽力的解决当下的问题或表面的问题,因为技术在表述和boss的理解都有困难,且这一职级调动资源不是那么的容易,所以重构这一说起来挺难笔者也是看到领域诸多问题尽力寻找一个普适架构设计量化工作流程降低沟通成本于是架构便应运而生然后AI发展另我感到一丝深深的不安AI现在已经在信息组织能力逻辑严谨性超越了人类现在已经出现自动化无人驾驶客车相信不久将来AI编程将会取代百分99程序员这个时间不会太久,5左右届时老板还是反正架构师程序员PEPM都得当然啦时代在发展总会改变机遇,因噎废食岂有道理之乎

原文链接:树-图架构(TGA)
https://docs.qq.com/doc/DWGRWY3ZSVnhTRXlG

  • 15
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值