方法签名重构
Method Signature Refactoring
我有多个用户数据库需要搜索。用户可以有多个实例,应用程序会检查用户是否在不同数据库中重复。
所以每个用户都与一个客户相关联,并且根据客户的不同填充字段。 (我知道这是不对的,但这是继承的应用程序)我的想法是通过将客户端作为参数添加到 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)
}
我的问题是,我该如何最好地处理这个问题。目前我正陷入更改方法签名的困境,但如果这需要再次更改,我将不得不做同样的事情,这不会很有趣。
包装方法毫无用处。
引入参数对象并在可能的情况下内联包装器方法。
"Introduce parameter object"重构:
我有多个用户数据库需要搜索。用户可以有多个实例,应用程序会检查用户是否在不同数据库中重复。
所以每个用户都与一个客户相关联,并且根据客户的不同填充字段。 (我知道这是不对的,但这是继承的应用程序)我的想法是通过将客户端作为参数添加到 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)
}
我的问题是,我该如何最好地处理这个问题。目前我正陷入更改方法签名的困境,但如果这需要再次更改,我将不得不做同样的事情,这不会很有趣。
包装方法毫无用处。 引入参数对象并在可能的情况下内联包装器方法。
"Introduce parameter object"重构: