Language agnostic 模块的自动重构思想
我经常遇到这样的问题:函数和类型定义会随着时间的推移聚集在单个模块中(我们可以假设一个模块对应于一个源文件)。在某一点上,源文件是如此之大,以至于几乎无法再维护。例如,人们意识到模块包含许多逻辑上与少数几个不同主题相关的功能,并且认为它们应该在自己的模块中 我们的想法是要有一个工具来建议如何分割这样一个模块。然后,可以自动从旧的源文件创建新的源文件 我有以下几点:Language agnostic 模块的自动重构思想,language-agnostic,module,functional-programming,refactoring,Language Agnostic,Module,Functional Programming,Refactoring,我经常遇到这样的问题:函数和类型定义会随着时间的推移聚集在单个模块中(我们可以假设一个模块对应于一个源文件)。在某一点上,源文件是如此之大,以至于几乎无法再维护。例如,人们意识到模块包含许多逻辑上与少数几个不同主题相关的功能,并且认为它们应该在自己的模块中 我们的想法是要有一个工具来建议如何分割这样一个模块。然后,可以自动从旧的源文件创建新的源文件 我有以下几点: 函数和数据类型的列表,以及它们对模块中其他函数和类型的直接依赖关系 由此,我们可以计算每个项目的所有依赖项 我们可以进行拓扑排序,
- 函数和数据类型的列表,以及它们对模块中其他函数和类型的直接依赖关系
- 由此,我们可以计算每个项目的所有依赖项
- 我们可以进行拓扑排序,生成依赖组。比如说
(a,(b,c,d),e)
- 外部列表中较左的项不依赖于较右的项
- 像(b,c,d)这样的内部分组项递归地相互依赖
(B,c,d)
不得在不同模块之间拆分
现在我不知何故陷入了困境,正在寻找一种策略,根据迄今为止发现的信息提出明智的建议
当然,一种可能是根据拓扑排序的依赖组列表进行拆分。然而,让我们假设列表是这样开始的:
(a, b, c, ....)
其中c依赖于b和a,b依赖于a,a不依赖于任何东西。在这里,我们可以执行以下操作:
- 定义a、b和c的模块ABC
- 模块A定义A,模块BC导入A并定义b和c
- 模块C导入A和B并定义C,模块B导入A并定义B
欢迎提供任何建议,以及指向执行类似操作的现有软件的指针。听起来您在描述传出和传入耦合
这是一个语言无关的问题,但我知道java中的一些工具,比如JDepend(),将计算这些度量值来帮助指导未来的重构。
当你投票关闭时,考虑一下这是否可能被迁移到程序员,也许。