Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/400.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 方法签名重构_Java_Refactoring - Fatal编程技术网

Java 方法签名重构

Java 方法签名重构,java,refactoring,Java,Refactoring,我有多个需要搜索的用户数据库。用户可以有多个实例,应用程序会检查该用户在不同数据库中是否重复 因此,每个用户都与一个客户机关联,并且根据它是什么客户机来填充不同的字段。(我知道这不对,但这是继承的应用程序)我的想法是通过将客户机作为参数添加到getUserData方法中来重构它。然而我意识到这是一种改变预防的气味。有许多包装器方法将传递默认值。我还必须遍历调用层次结构,以便能够访问要传入的客户机对象。这可能是for或5个方法调用,因此我也必须更改它们。在这一点上,应用程序的开发方式(由其他开发人

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

因此,每个用户都与一个客户机关联,并且根据它是什么客户机来填充不同的字段。(我知道这不对,但这是继承的应用程序)我的想法是通过将客户机作为参数添加到getUserData方法中来重构它。然而我意识到这是一种改变预防的气味。有许多包装器方法将传递默认值。我还必须遍历调用层次结构,以便能够访问要传入的客户机对象。这可能是for或5个方法调用,因此我也必须更改它们。在这一点上,应用程序的开发方式(由其他开发人员开发)在这方面非常严格,我希望改进它

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)

}

我的问题是,我如何最好地处理这个问题。目前我正在修改方法签名,但如果需要再次修改,我将不得不做同样的事情,这一点都不好玩。

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

“引入参数对象”重构:


因此,由于我有许多链接到我想要更改的方法签名的链接调用,我应该使用“保留整个对象”,并在调用链的开始处开始重构?我会做相反的操作:从底部开始,在底部可以看到所有参数,然后逐渐内联。此外,如果许多参数是可选的,则可以为参数对象创建专门的构造函数或方法工厂。如果这有助于可读性的话,你甚至可以更进一步,创建一个流畅的构建器。现在代码更易于管理。我可能会考虑为对象创建一个生成器,使其更具可读性。谢谢我能够创建用于创建对象的生成器,并在代码中删除了创建param对象所需的构造函数。现在优雅多了!很高兴这对你有帮助:)