我可以编写一些单元测试和重构。我们正在使用Hybris。您经常可以看到的是Trainwrecks。例如:null[D]
null[D]
null[D]
等等。
现在编写单元测试并模拟响应,在这种情况下,我会首先模拟一个CurrentSite并声明cmsSiteService.getCurrentSite().getSlaveSalesOrganization()
然后doReturn(currentSite).when(cmsSiteService.getCurrentSite)
。
这个例子相当简短,但是使用cmsSiteService它会在整个项目中发生。由于cmsSiteService是第三方Hybris类,我认为编写一个继承CMSSiteService-Class中所有内容的包装类会很好。在那里,我可以编写一个方法getSlaveSalesOrganizationFromCurrentSite(CMSSiteService cmsSiteService),我将调用上面的所有内容。
这是推荐还是设计出更好的解决方案?
答案 0 :(得分:1)
听起来你走在正确的轨道上。您正在做的是重构您的代码以更好地遵守Law of Demeter,也称为“最少知识原则”。像你说的那样挖掘对象链是一种反模式,正是你遇到的原因:当对象紧密耦合时,它们很难修改和测试。
理想情况下,如果您允许修改该代码,则可以向getSlaveSalesOrganizationFromCurrentSite
类添加CMSSiteService
方法。我认为创建一个包装器来简化丑陋的界面是一个很好的第二选择。那将是Adapter pattern的实现。这是防止你自己的代码紧密耦合到(别人的)糟糕代码的好方法。