如何最好地构造以下代码,以使其读得最好。
我有一个方法,该方法接受一条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
}
}
这不是很好,因为我们在方法范围之外更改了对象。
为了使该方法更具可读性,我需要选择什么选项。
答案 0 :(得分:3)
我建议将其外部化为接口:
raw
如果您真的很聪明,可以考虑使用Java JDK 8 functional interfaces。 Lambda就是这样向您开放的。我建议的接口不过是public interface MessageConverter<S, T> {
T convert(S source);
}
的另一个名称。可以组成一个-非常有用。