最佳的结构转换方法

时间:2018-12-04 15:40:56

标签: java

如何最好地构造以下代码,以使其读得最好。

我有一个方法,该方法接受一条Message,然后将其转换为MyMessage对象。

public MyMessage convertToMyMessage(Message message){
    MyMessage myMessage = new MyMessage();
    myMessage.setId(message.getId() + "1");
    ...
    ...
    etc
    if(message instanceOf TheMessage){
        myMessage.setNode((TheMessage)message).getNode2());
        ...
        ...
        etc - converting from TheMessage to MyMessge
    }
}

我不喜欢的部分是 TheMessage 的细节。由于此方法很长,因此如何对其进行重构以使其更具可读性。

在我考虑的情况下,仅 Message TheMessage 不会有很多消息类型,因此我认为重构为一种模式可能非常极端。

我考虑过的一个重构是提取方法

public MyMessage convertToMyMessage(Message message){
    MyMessage myMessage = new MyMessage();
    myMessage.setId(message.getId() + "1");
    ...
    ...
    etc
    convertTheMessageToMyMessage(myMessage, message);
}

private void convertTheMessageToMyMessage(MyMessage myMessage, Message message){
    if(message instanceOf TheMessage){
        myMessage.setNode((TheMessage)message).getNode2());
        ...
        ...
        etc - converting from TheMessage to MyMessge
    }
}

这不是很好,因为我们在方法范围之外更改了对象。

为了使该方法更具可读性,我需要选择什么选项。

1 个答案:

答案 0 :(得分:3)

我建议将其外部化为接口:

raw

如果您真的很聪明,可以考虑使用Java JDK 8 functional interfaces。 Lambda就是这样向您开放的。我建议的接口不过是public interface MessageConverter<S, T> { T convert(S source); } 的另一个名称。可以组成一个-非常有用。