当值需要不同而不是方法时,方法中的代码重复
Code duplication in methods when a value needs to be different but not the method
我有一个 class 来处理属性文件(最终用户将在其中使用 OAuth2 消费者密钥和消费者秘密值)。
在这个class中我有一个这样的方法:
// Get the consumer key or secret value
public String getConsumerKeyOrSecret(String keyOrSecret)
{
String value = properties.getProperty(keyOrSecret);
if ( value == null || value.isEmpty())
{
value = null;
}
return value;
}
这是实现它的最佳方式吗?在我看来,在另一个 class 中获取这些值的更方便的方法是为您需要的密钥调用两个单独的方法,并且方法实现如下:
public String getConsumerKey()
{
String consumerKey = properties.getProperty("consumer_key");
if ( consumerKey == null || consumerKey.isEmpty())
{
consumerKey = null;
}
return consumerKey;
}
public String getConsumerSecret()
{
String consumerSecret = properties.getProperty("consumer_secret");
if ( consumerSecret == null || consumerSecret.isEmpty())
{
consumerSecret = null;
}
return consumerSecret;
}
但这不会被认为是代码重复吗?解决这个问题的最佳方法是什么?
您为用户提供了这两种零参数的方法。
您将第一个方法保留为私有方法,用于执行该查找一次。
换句话说:避免代码重复,同时也给代码的用户最易用的界面。
你可以通过引入一个公共的私有方法来使用第二种解决方案而不重复。
public String getKey(){
return getPropertyValueOrNull("key");
}
public String getSecret(){
return getPropertyValueOrNull("secret");
}
private String getPropertyValueOrNull(String property){
String value = properties.getProperty(property);
if (value == null || value.isEmpty()){
return null;
}
return value;
}
我有一个 class 来处理属性文件(最终用户将在其中使用 OAuth2 消费者密钥和消费者秘密值)。
在这个class中我有一个这样的方法:
// Get the consumer key or secret value
public String getConsumerKeyOrSecret(String keyOrSecret)
{
String value = properties.getProperty(keyOrSecret);
if ( value == null || value.isEmpty())
{
value = null;
}
return value;
}
这是实现它的最佳方式吗?在我看来,在另一个 class 中获取这些值的更方便的方法是为您需要的密钥调用两个单独的方法,并且方法实现如下:
public String getConsumerKey()
{
String consumerKey = properties.getProperty("consumer_key");
if ( consumerKey == null || consumerKey.isEmpty())
{
consumerKey = null;
}
return consumerKey;
}
public String getConsumerSecret()
{
String consumerSecret = properties.getProperty("consumer_secret");
if ( consumerSecret == null || consumerSecret.isEmpty())
{
consumerSecret = null;
}
return consumerSecret;
}
但这不会被认为是代码重复吗?解决这个问题的最佳方法是什么?
您为用户提供了这两种零参数的方法。
您将第一个方法保留为私有方法,用于执行该查找一次。
换句话说:避免代码重复,同时也给代码的用户最易用的界面。
你可以通过引入一个公共的私有方法来使用第二种解决方案而不重复。
public String getKey(){
return getPropertyValueOrNull("key");
}
public String getSecret(){
return getPropertyValueOrNull("secret");
}
private String getPropertyValueOrNull(String property){
String value = properties.getProperty(property);
if (value == null || value.isEmpty()){
return null;
}
return value;
}