0
votes

Comment refracteur pour réduire si des déclarations?

Compte tenu de cette classe de configuration, l'odeur de code est là, qu'il y a beaucoup de déclarations. Il y aura également beaucoup plus de variables de classe qui seront ajoutées. En fait, je crée cet objet mailconfig avec une méthode statique de l'usine de produits de base qui prendra une liste d'attributs. Maintenant, comme vous pouvez le constater dans la carteConfig, il est de la même manière que définissez les valeurs de la messagerie. Mais il y aura également des attributs spéciaux qui ont besoin d'une manipulation plus complexe. Comment puis-je refrorcer cela pour réduire la quantité d'IFS? Par exemple, comme suit, il y aura un nouveau xxx pré>

ceci nécessaire pour ajouter un nouveau si dans la méthode MapToconfig aussi ... P>

    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());
            }
        }
    }


0 commentaires

3 Réponses :


0
votes

Vous pouvez utiliser si / sinon, pour partir lorsque l'une des conditions est vraie ou utilisez un étui de commutation pour faire de même.

Vous devez vérifier que ATTNAMEIS n'est pas null, et AttribValueis non nulle non plus. xxx

ne passe que les attributs nécessaires, pas l'objet d'attribut entier.


0 commentaires

1
votes

Utilisez-vous Java 8+? Si oui, vous pouvez utiliser une carte xxx


0 commentaires

0
votes

Vous pouvez utiliser une carte statique de type mappe > code> pour vous débarrasser du bloc IF Sincer

import lombok.Builder;
import lombok.Data;

import java.util.List;
import java.util.Map;
import java.util.HashMap;
import java.util.Objects;
import java.util.function.BiConsumer;

@Data
@Builder
public class MailConfig {

    private final String subject;
    private final String mailserver;
    private final String message;

    private static final Map<String, BiConsumer<MailConfigBuilder, Attribute>> map = new HashMap<>();

    static {
        map.put("subject",    (mailConfBuil, atr) -> {mailConfBuil.subject(atr.getAttribValue());});
        map.put("mailserver", (mailConfBuil, atr) -> {mailConfBuil.mailserver(atr.getAttribValue());});
        map.put("message",    (mailConfBuil, atr) -> {mailConfBuil.message(atr.getAttribValue());});
    }

    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) {
        map.get(att.getAttribName()).accept(config, att);
    }
}


1 commentaires

semble intéressant, n'a pas utilisé de biconsumer auparavant, jettera un coup d'œil à.