2016-08-15 78 views
1

我有多个用户需要搜索的数据库。用户可以有多个实例,应用程序会检查用户是否在不同的数据库中重复。方法签名重构

因此,每个用户都与一个客户端关联,并且这些字段根据客户端的不同而被填充。 (我知道这是不对的,但这是继承的应用程序)我的想法是通过将客户端作为参数添加到getUserData方法中来重构它。但是我意识到这是一种防止变味的气味。有很多包装方法会传递默认值。我还必须遍历调用层次结构,以便我可以访问要传入的客户端对象。这可能是五个或五个方法调用,所以我将不得不更改这些调用。在这一点上,应用程序开发(由其他开发人员)的方式非常僵化,我期待着改进它。

的getUserData方法:包装方法的

public User getUserData(String userId, boolean fullUserRecord, Date userStartDate){ 
    //retrive userdata from db 
    //attach client specific data for user 

} 

例子:

public User getUserData(String userId, Date userStartDate){ 
    getUserData(userId, false, userStartDate) 

} 

我的问题是,我该如何最好地处理这个。目前我正在改变方法签名的兔子洞,但如果这需要再次改变,我将不得不做同样的事情,这将不会很有趣。

回答

1

包装方法没有任何用途。 引入一个参数对象,并在可能的情况下内联包装器方法。

“引入参数对象”重构:

+0

所以,因为我有一个链接到我想改变方法签名许多链式调用,我应该使用保存整个对象并在调用链的开始处重新开始重构? – ephemeralCoder

+0

我会做相反的事情:从底部开始,您可以看到所有参数,然后逐渐内联。此外,如果许多参数是可选的,则可以为参数对象创建专门的构造函数或方法工厂。如果这有助于可读性,您甚至可以进一步创建流畅的构建器。 – JnRouvignac

+0

我最终创建了带有专门构造函数的参数对象。现在代码更易于管理。我可能会考虑为该对象创建一个构建器,使其更具可读性。谢谢! – ephemeralCoder