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