在新公司的旧代码基础上遇到了问题。
基本上,他们有2个大型代码库/项目或组件,我会说组装A和组件B。而且,我们还进行了组装测试A和组装测试B。
我在这里遇到的问题是组装测试A使用来自组装测试B的某些类。组装测试B正在使用Assembly测试A中的某些类。但没有完成,组装测试A使用了Assembly B中的某些类。它确实令人讨厌。 , 我知道。这就是从技术上讲,这就是我们有2个单独的项目,但实际上我们将它们放在一个包中。然后,您可以想象,每次我们部署A时,我们都必须部署B。
我的任务是将这些组件解除或将它们分成2个单独的组件/项目,以便对将来的部署和测试以及其他任何东西都有益。
我遇到了一个缓慢的过程,但它可以确保我们仍然保证了功能。我的最初策略是,我将在测试组件A中慢慢删除组件B的依赖性,并通过测试组件A进行测试。这意味着我正在删除Assembly A中的组装B的依赖。 B,最后我们将有2个完成的单独的组件。
对我来说,我相信这不是一件容易的事,但我不介意为此而努力。但是,我需要您的意见或建议我的最初策略。我不想冒着在这种项目中间重新开始的风险。
那么,你们能给我关于该任务的任何诚实意见或建议吗?
我非常感谢。
谢谢
看答案
老实说,我发现描述有些混乱。因此,我会一点点一点。
基本上,他们有2个大型代码基础/项目或组件,我会说组装A和集会B。
另外,我们还进行了组装测试A和组装测试B。
我会假设 Test A
取决于 A
和 Test B
取决于 B
:
测试A使用来自组装测试B的某些类
测试B正在使用装配测试中的一些类
测试A使用汇编B中的某些类
好的,我可以推理该图:
A
和B
是水槽(如果愿意的话,叶子)。从理论上讲,您可以分开部署它们。我猜你部署了Test A
和A
和Test B
和B
这引起了问题。快速修复:请勿部署测试。- 有一个周期:
Test A
- >Test B
- >Test A
最初我对 Test A
- > Test B
- > B
, Test A
- > B
,我正在划清率,这与这种情况无关。
循环依赖性 Test A
- > Test B
- > Test A
是主要问题。如何解决它是一个经济问题。
我在评论中说,您可以允许代码重复,以后您必须重构。 那只是想到的第一件事。 这样做会增加技术债务,但允许您在更少的时间内对分离进行存档。如果您需要分开项目 马上,我会说你这样做。如果有时间,您可能会更务实。
要修复循环依赖性,您需要了解 Test A
不需要 Test B
, 反而 Test A
只需要一个 子集 的 Test B
。相似地 Test B
只需要一个 子集 的 Test A
.
此外,我们可以说 Test A
和 Test B
需要这个 子集。借钱 布拉德利·乌夫纳的评论 我会打电话 TestCommon
.
您可能首先创建一个空 TestCommon
组装,将依赖项添加到两者 Test A
和 Test B
并开始在那里移动代码。最终您将能够从中删除依赖项 Test A
至 Test B
并来自 Test B
至 Test A
。在内部有循环依赖性的可能性继续存在 TestCommon
(没有详细的依赖图,我无法分辨)。无论如何,提取 TestCommon
将导致代码更容易维护和重复使用。
提取 TestCommon
将导致这一点:
为此:
完整图:
这是 更好的。现在您可以部署 Test B
和 B
(和 TestCommon
)没有重大问题。但是,您仍然需要部署 B
和 Test A
因为它直接引用它。
有一个链接来自 Test A
至 B
。我会假设有更多细微差别的情况,这就是 Test A
用途 B
(我将稍后探索其他案例)。遵循我们提取的相同方法 TestCommon
我们需要介绍另一个集会。我会称呼它 Utility
(我不知道那里有什么,只是 Test A
需要它),并可以让您摆脱困境:
为此:
在这一点上,我们已经成功地将项目分开了。我们可以在全图中看到可以部署 Test A
和 A
没有 Test B
和 B
,反之亦然。
完整图:
部署一个:
部署b:
什么是 Utility
?
记住这一点 Utility
最初是 B
。这是 B
我们需要做 Test A
工作。尽管我对 Utility
。但是,我知道我不知道的...
答:我不知道是否 Test A
使用或测试 Utility
,我认为它使用它。
B.我不知道是否 Test B
使用或测试 Utility
C.我不知道是否 B
是否需要 Utility
让我们探索可能的情况:
Test A
用途Utility
,Test B
用途Utility
,B
需要Utility
Utility
必须是每个人都用来使事情变得更轻松的一些适用性代码。缺陷Utility
在两个项目中都将是一个缺陷。在新的Test Utility
.Test A
用途Utility
,Test B
用途Utility
,B
不需要Utility
Utility
仅需要测试。将其合并成TestCommon
.Test A
用途Utility
,Test B
测试Utility
,B
需要Utility
这是所有案件的细微差别...
B
和Test A
仍然都需要此代码...此代码为两个主人服务Test A
和B
。这没错。您可以保持原样。将来有一种风险,您可能想引入更改
Utility
对于其中一个项目,但这种变化在另一个项目中引入了一个错误。现在的测试
Utility
在Test B
,人们从事的人A
可能不必担心。因此分开Test Utility
从Test B
是个好主意。如果将来,
Test A
和B
不同的是,他们需要两种不同的解决方案(在这一点上,您可以将它们合并到各自的项目中)。Test A
用途Utility
,Test B
测试Utility
,B
不需要Utility
删除依赖性
B
有Utility
并将测试分开Utility
从Test B
进入新Test Utility
.Test A
测试Utility
,Test B
用途Utility
,B
需要Utility
Test A
不应从中测试代码B
。将该代码迁移到Test B
并从中删除依赖关系Test A
至Utility
。您现在可以合并Utility
回到B
.Test A
测试Utility
,Test B
用途Utility
,B
不需要Utility
删除依赖性
B
有Utility
并将测试分开Utility
从Test A
进入新Test Utility
.Test A
测试Utility
,Test B
测试Utility
,B
需要Utility
测试
Utility
分为两分。提取它们并将它们放入新的Test Utility
.Test A
测试Utility
,Test B
测试Utility
,B
不需要Utility
Utility
不使用。您可以将其及其测试删除。
未经允许不得转载:迪欧吧_技术交流_资源分享_热点资讯_免费VPS空间 » 什么是去耦合组件的最佳策略