Учитывая этот класс конфигурации, чувствуется запах кода, так как здесь слишком много операторов if. Также будет добавлено намного больше переменных класса. На самом деле я создаю этот объект MailConfig с помощью фабричного метода stati c fromAttributes, который будет принимать список атрибутов. Теперь, как вы можете видеть в mapToConfig, это то же самое, поэтому установите значения MailConfig. Но будут также специальные атрибуты, требующие более сложной обработки. Как я могу провести рефакторинг, чтобы уменьшить количество «если»? Например, следующим будет новый
private final String mailServer
, это потребует добавления нового if в метод mapToConfig ...
import lombok.Builder;
import lombok.Data;
import java.util.List;
import java.util.Objects;
@Data
@Builder
public class MailConfig {
private final String subject;
private final String mailserver;
private final String message;
public static MailConfig fromAttributes(List<Attribute> listofAttributes) {
Objects.requireNonNull(listofAttributes, "list of attributes must not be null");
MailConfigBuilder config = MailConfig.builder();
listofAttributes.stream()
.forEach(att -> mapToConfig(config, att));
return config.build();
}
private static void mapToConfig(MailConfigBuilder config, Attribute att) {
if (att.getAttribName().equalsIgnoreCase("subject")){
config.subject(att.getAttribValue());
}
if (att.getAttribName().equalsIgnoreCase("mailserver")){
config.mailserver(att.getAttribValue());
}
if (att.getAttribName().equalsIgnoreCase("message")){
config.message(att.getAttribValue());
}
}
}