我可以编写一些单元测试并进行重构。我们正在使用Hybris。您经常看到的是Trainwrecks。例如:cmsSiteService.getCurrentSite().getSlaveSalesOrganization()等。

现在编写单元测试并模拟响应,在这种情况下,我将首先模拟CurrentSite并声明doReturn(currentSite).when(cmsSiteService.getCurrentSite),然后声明doReturn(slaveSalesOrganization).when(currentSite).getSlaveSalesOrganization()

该示例相当简短,但是使用cmsSiteService可以在整个项目中进行。由于cmsSiteService是第三方Hybris类,因此我认为编写一个包装类来继承CMSSiteService-Class的所有内容会很好。在那里,我可以编写一个方法getSlaveSalesOrganizationFromCurrentSite(CMSSiteService cmsSiteService),在这里我可以调用上面的所有方法。

是推荐还是在设计上有更好的解决方案?

最佳答案

听起来您在正确的轨道上。您正在做的是重构代码,使其更好地遵守Law of Demeter,也称为“知识最少原理”。就像您所说的那样,通过对象链进行挖掘是一种反模式,这正是您遇到的原因:当对象紧密耦合时,很难对其进行修改和测试。

理想情况下,如果允许修改该代码,则可以在getSlaveSalesOrganizationFromCurrentSite类中添加一个CMSSiteService方法。我认为创建包装器来简化丑陋的界面是第二种不错的选择。那将是Adapter pattern的实现。这是防止您自己的代码与(别人的)糟糕代码紧密耦合的好方法。

09-05 04:58