【问题标题】:Duplicate Code with different object types具有不同对象类型的重复代码
【发布时间】:2018-08-17 04:58:36
【问题描述】:

我必须多次编写以下代码,这违反了“DRY”原则(在 IntelliJ 中收到有关重复代码的警告)。唯一改变的是传入objectMapper.writeValueAsString()

我如何将它放在一个可以接受不同对象类型的函数中,这样我就不会违反 DRY?我不知道要查找什么概念,所以如果这是重复的帖子,我深表歉意。谢谢。

try(CloseableHttpClient client = HttpClients.createDefault()){
    ObjectMapper objectMapper = new ObjectMapper();
    String bodyRequest = objectMapper.writeValueAsString(id);
    StringEntity entity = new StringEntity(bodyRequest, ContentType.APPLICATION_JSON);
    HttpPut request = new HttpPut(url);
    request.setEntity(entity);

    try(CloseableHttpResponse response = client.execute(request)){
        int statusCode = response.getStatusLine().getStatusCode();

        if(statusCode != HttpStatus.SC_OK){
            System.err.println(statusCode + ": " + response.getStatusLine().getReasonPhrase());
        }
    }
}
catch(Exception e){
    throw new RuntimeException(e);
}

【问题讨论】:

  • 编写一个方法来完成大部分样板工作,您可以将所需的信息传递给该方法

标签: java rest web-services java-8 code-duplication


【解决方案1】:

只要把它变成一个方法。确保传递给该方法的任何内容实际上都是可序列化的。

public Object doSomething(Object id) {
    try(CloseableHttpClient client = HttpClients.createDefault()){
        ObjectMapper objectMapper = new ObjectMapper();
        String bodyRequest = objectMapper.writeValueAsString(id);
        StringEntity entity = new StringEntity(bodyRequest, ContentType.APPLICATION_JSON);
        HttpPut request = new HttpPut(url);
        request.setEntity(entity);

        try(CloseableHttpResponse response = client.execute(request)){
            int statusCode = response.getStatusLine().getStatusCode();

            if(statusCode != HttpStatus.SC_OK){
                System.err.println(statusCode + ": " + response.getStatusLine().getReasonPhrase());
            }
        }
    }
    catch(Exception e){
        throw new RuntimeException(e);
    }
}

【讨论】:

  • 不确定这个答案是不是太厚脸皮了。
  • 接近我的想法,虽然我想让这个方法接受一个字符串,但有其他方法,可以convert在调用此方法之前,String 的一些对象。
  • 但这不是假设我传入的是同类型的对象吗?
  • 所有对象都继承自Object
  • @ScaryWombat 有一个很好的观点。在将对象传递给此方法之前将对象转换为 String 请求主体会更明确,因此对维护者来说更容易(不那么令人惊讶)。
猜你喜欢
  • 2018-06-05
  • 2015-06-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-10-11
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多