我正在考虑重构一些非常复杂的代码,这是我正在工作的项目的子系统。我对这段代码的部分检查是它非常复杂,并且包含大量输入、中间值和输出,具体取决于某些核心业务逻辑。
我想重新设计这段代码,使其更易于维护,并且执行得更快,所以一开始我一直在尝试查看每个参数及其相互依赖关系。这导致了一个相当大而复杂的图,我想要一种简化这个图的机制。
不久前,我在一本名为“矩阵设计分解”的关于 SOA 设计的书中遇到了一种技术,它使用输出矩阵以及它们对输入的依赖关系,应用某种形式的矩阵代数,并且可以为这些依赖关系生成业务流程图.
我知道http://www.designdecomposition.com/上有一个可用的网络工具,但是它在您可以拥有的输入/输出依赖项的数量方面受到限制。我曾尝试四处寻找该工具的算法来源(因此我可以尝试自己实现它而不受大小限制),但是我没有运气。
有人知道我可以使用的类似技术吗?目前我什至正在考虑采用依赖矩阵并应用一些遗传算法来看看进化是否可以提出一个更简单的工作流程......
干杯,
艾多斯
编辑:
我将解释动机:
原始代码是为每次用户执行操作(添加、删除或修改项目的某些属性)时计算所有值(大约 60)的系统编写的。这段代码是十多年前写的,而且肯定显示出老化的迹象——其他人在系统中添加了更复杂的计算,现在我们得到了完全不合理的性能(在控制权返回给用户之前最多 2 分钟)。已决定将计算从用户操作中分离出来,并提供一个按钮来“重新计算”这些值。
我的问题出现了,因为有太多的计算正在进行,并且它们基于这样一个假设,即所有必需的数据都可用于计算 - 现在当我尝试重新实现计算时,我一直遇到问题,因为我没有'没有得到这个计算所依赖的不同计算的结果。
这是我想使用矩阵分解方法的地方。MD 方法允许我指定所有输入和输出,并为我提供可用于生成所有输出的“最简单”工作流程。
然后我可以使用这个“工作流程”来了解我需要执行的计算的优先级以获得相同的结果而不会产生任何异常。它还向我展示了我可以并行化计算系统的哪些部分以及分叉点和连接点的位置(我暂时不会担心那部分)。目前我所拥有的只是一个非常大的矩阵,其中显示了许多依赖项,不知道从哪里开始。
我将从我的评论中详细说明:
我不想在实际程序中使用 EA 流程中的解决方案。我想获取依赖矩阵并将其分解为模块,然后我将手动编码——这纯粹是一种设计辅助——我只是对这些模块的输入/输出感兴趣。基本上是这些计算之间复杂的相互依赖关系的表示,以及一些优先级的概念。
假设我有 A 需要 B 和 C。D 需要 A 和 E。F 需要 B、A 和 E,我想有效地将问题空间从一组复杂的依赖项划分为一个“工作流程”,我可以检查它以获得更好的理解。一旦我有了这种理解,我就可以提出一个更好的设计/实现,它仍然是人类可读的,所以对于这个例子,我知道我需要计算 A,然后是 C,然后是 D,然后是 F。
--
我知道这看起来有点奇怪,如果你看一下我在基于矩阵的分解之前链接到的网站,应该会让你对我的想法有所了解......