美文网首页
大型系统重构合并的路径设计

大型系统重构合并的路径设计

作者: goxplanet | 来源:发表于2023-12-25 18:05 被阅读0次

问题场景:

  1. 大型系统在开发过程中,团队数量膨胀,模块数量增加。当系统进入稳定状态后,人员缩减,需要对系统进行重构,系统规模和支持团队要匹配。需要对模块进行合并,合并的目标是降低沟通成本,做到应合尽合。
  2. 系统因为解耦,产生了分离的配置,模块间的依赖关系变成了用户的学习成本,阻碍产品发展。例如isto 1.5的重构就是在尝试解决这个问题。

两种问题场景的核心都需要解决系统模块合并的路径设计问题。

输入:

  1. 模块间存在依赖关系,方向上不应该发生改变
  2. 合并模块本身的大小需要受控,大小的定义可能是接口数,圈复杂度,或者行数,或者支持团队的人数。

方法:
映射到有向无环图的节点合并方案问题。通过约束寻找可以合并的节点对,计算每个节点对合并后,图的整体边数变化,选择节约最多边的节点对合并,生成新的图。持续迭代,寻找下一组可以合并的点对。

输出:
满足约束条件最简结构的图

其他的方法: 和聚类的区别,聚类一般难以给出分组数量,也难以施加一些限制条件,对于重构过程,我们需要采纳半监督监督的方式,进行过程仿真。

实例:

  1. 以一个10个模块的java系统迭代为例,首先通过gradle对工程中的子模块的依赖关系进行分析,通过shell对jar的大小进行统计,这里我们做个简化,将大小的约束函数定义为jar大小,设置为200K,大致对应1w行代码

  2. 先使用mermaid做个基本的绘图,由比较资深的架构师尝试手工合并,合并时采纳的原则是模块耦合度


    image.png
  3. 使用python的networkx进行合并计算,对比架构师合并完的产出


    networkx计算合并结果
架构师人工合并结果
  1. 对比networkx和手工合并的结果,我们发现,两者近似度较高。当模块变成数十个,数百个之后,采用networkx计算的方式和经过专人数月阅读代码的产出结果类似。

总结:
系统重构的前提有两个,明确依赖关系,明确节点大小,这两个前提是图优化的约束。图优化的收敛目标是简化沟通关系,也就是对边数的改进。

相关文章

  • 30 - 重构之代码解耦

    重构可以分为大规模高层重构(简称“大型重构”)和小规模低层次重构(简称“小型重构”)。大型重构是对系统、模块、代码...

  • 当重构遇到糟糕的物理设计

    --- 导语 糟糕的物理设计是对遗留大型系统中进行重构的非常棘手的一个问题,本文相机阐述了遗留系统中存在哪些糟糕的...

  • 大型系统重构的步骤梳理

    目前正在参与公司一个核心大系统的重构工作。本文梳理一下大型系统重构的一些步骤和心得。 概述 随着公司业务不断的发展...

  • 大型系统重构的步骤简单梳理

    目前我正在参与公司一个核心大系统的重构工作。写这篇文章就是梳理一下大型系统重构的一些步骤和所见及心得。 概述 随着...

  • “领域驱动设计”答疑

    过去一年主要在大型嵌入式系统中进行软件重构的咨询工作。对于大规模的遗留系统重构,一方面会借助领域建模帮助深入了解业...

  • 大型系统架构重构经验总结

    注:本文原创,转载请标明出处。欢迎转发、关注微信公众号:Q的博客。不定期发送干货,实践经验、系统总结、源码解读、技...

  • 代码重构流程

    目录 重构功能名称 需求整理 需求评审 设计方案 设计评审 代码重构 重构验收 汇总意见 重构功能名称 待重构功能...

  • arrow v4

    例子:普通路径的基础用法 例子:删除路径 例子:同一组的多条路径合并 例子:不同组的路径不合并 例子:包围(需要至...

  • 第二章 数据重构——6.19

    数据完成清理后,需要进行数据的重构,数据的重构主要包含数据的合并、数据的聚合与运算等。 数据的合并可以通过使用co...

  • 重构Step1——系统代码结构治理

    最近几天给集团做个培训,关于如何重构系统的 记录几个点0,设计模式,代码规范,不是好的重构的办法,太从细节入手,抓...

网友评论

      本文标题:大型系统重构合并的路径设计

      本文链接:https://www.haomeiwen.com/subject/rnpkndtx.html