我经常遇到功能和类型定义在单个模块中随时间聚合的问题(我们可以假设模块对应于源文件)。在某些时候,源文件是如此之大,以至于它几乎不再可维护。例如,一个人意识到该模块包含许多逻辑上与少数不同主题相关的函数,并且有人认为它们应该在自己的模块中。
这个想法是有一个工具,建议分割这样一个模块的方法。然后可以自动地从旧的源文件中实际创建新的源文件。
我有下列内容:
我们可以进行拓扑排序,制作依赖组。例如
(a,(b,c,d),e)
模块必须形成非循环层次结构,即当B或其导入的模块之一已导入A时,模块A不可能导入模块B.从此可以看出,上面示例中的(b, c, d)
必须不要在不同的模块之间分开。
现在我陷入困境并寻找一种策略,根据迄今为止发现的信息提出合理的建议。
当然,一种可能性是根据拓扑排序的依赖关系组列表进行拆分。但是,让我们假设列表开始如此:
(a, b, c, ....)
其中c取决于b和a,b取决于a和a取无处理。在这里,我们可以做到以下几点:
如果我们只是将函数之间的依赖关系映射到模块之间的依赖关系,那么我们最终可能会得到一个过于复杂和细粒度的模块层次结构。
不知何故,我必须考虑更多因素。也许是一些所需的模块大小或进口数量。
任何建议,以及指向现有软件的指示都是非常受欢迎的。
答案 0 :(得分:1)
听起来你正在描述传出和传入耦合http://en.wikipedia.org/wiki/Software_package_metrics
这是一个与语言无关的问题,但我知道Java中的一些工具,例如JDepend(http://clarkware.com/software/JDepend.html),它们将为您计算这些指标,以帮助指导未来的重构。