[JAVA] Wenn die Verarbeitung nach der bedingten Verzweigung redundant ist-12 [C # Refactoring Sample]

Wenn die Verarbeitung nach der bedingten Verzweigung redundant ist

Nach dem Verzweigen mit der if-Anweisung treten häufig Fälle auf, in denen derselbe Code in der Verarbeitung vorhanden ist. Insbesondere beim Schreiben eines Registrierungsprozesses durch Klicken auf die Registrierungsschaltfläche gibt es viele Prozesse, die Bildschirminformationen in DTO konvertieren. Betrachten wir also den Beispielcode in diesem Beispiel.

Beispielcode

        /** 
         *Konvertieren Sie Bildschirminformationen in Dto.
         *ID und Name nehmen den Wert der Text-Eigenschaft von Label und TextBox an.
         *Die ID ist für eine neue Registrierung null.
         **/
        public Dto CreateDto(string id, string name, string updateUserId)
        {
            if (id == null)
            {
                var dto = new Dto();
                dto.Id = -1;
                dto.Name = name;
                dto.RegistUser = updateUserId;
                dto.RegistDate = DateTime.Now;
                dto.UpdateUserId = updateUserId;
                dto.UpdateDate = DateTime.Now;
                return dto;
            }
            else
            {
                var dto = GetDto(int.Parse(id));
                dto.Name = name;
                dto.UpdateUserId = updateUserId;
                dto.UpdateDate = DateTime.Now;
                return dto;
            }
        }

        /**Holen Sie sich Dto vom Tisch. Code weggelassen**/
        private Dto GetDto(int id)
        {
            return new Dto();
        }

        /**Tabelle Dto. Wenn neu, ist id-Auf 1 setzen.**/
        public class Dto
        {
            public int Id { get; set; }
            public string Name { get; set; }
            public string RegistUser { get; set; }
            public DateTime? RegistDate { get; set; }
            public string UpdateUserId { get; set; }
            public DateTime? UpdateDate { get; set; }
        }
java
    /**
     *Konvertieren Sie Bildschirminformationen in Dto.
     *ID und Name nehmen den Wert der Text-Eigenschaft von Label und TextBox an.
     *Die ID ist für eine neue Registrierung null.
     **/
    public Dto createDto(String id, String name, String updateUserId) {
        Dto dto = null;

        if (id == null) {
            dto = new Dto();
            dto.setId(-1);
            dto.setName(name);
            dto.setRegistUser(updateUserId);
            dto.setRegistDate(new Date());
            dto.setUpdateUserId(updateUserId);
            dto.setUpdateDate(new Date());
        } else {
            dto = getDto(Integer.parseInt(id));
            dto.setName(name);
            dto.setUpdateUserId(updateUserId);
            dto.setUpdateDate(new Date());
        }

        return dto;
    }

    /**Holen Sie sich Dto vom Tisch. Code weggelassen.**/
    private Dto getDto(int id) {
        //Holen Sie sich Dto vom Tisch. Code weggelassen.
        return new Dto();
    }

    /**Tabelle Dto. Wenn neu, ist id-Auf 1 setzen.**/
    public class Dto {
        private int id;
        private String name;
        private String registUser;
        private Date registDate;
        private String updateUserId;
        private Date updateDate;

        public int getId() {
            return id;
        }

        public void setId(int id) {
            this.id = id;
        }

        public String getName() {
            return name;
        }

        public void setName(String name) {
            this.name = name;
        }

        public String getRegistUser() {
            return registUser;
        }

        public void setRegistUser(String registUser) {
            this.registUser = registUser;
        }

        public Date getRegistDate() {
            return registDate;
        }

        public void setRegistDate(Date registDate) {
            this.registDate = registDate;
        }

        public String getUpdateUserId() {
            return updateUserId;
        }

        public void setUpdateUserId(String updateUserId) {
            this.updateUserId = updateUserId;
        }

        public Date getUpdateDate() {
            return updateDate;
        }

        public void setUpdateDate(Date updateDate) {
            this.updateDate = updateDate;
        }
    }

Problem

Ich verstehe, dass die Verarbeitung zwischen neu und aktualisiert aufgeteilt ist, aber es gibt einige des gleichen Codes. Wenn beispielsweise eine Telefonnummer hinzugefügt wird, erfordert dieser Code zwei zusätzliche Codes, um die Telefonnummer Dto zuzuweisen. Dieses Problem kann gelöst werden, indem nur die Prozesse getrennt werden, die durch die if-Anweisung verzweigt werden sollen.

Refactoring-Einschränkungen

Beschreiben der Einschränkungen für die Refactoring-Richtlinie. Wenn es keine Einschränkungen gibt, gibt es viele Möglichkeiten, dies zu beheben. Daher möchte ich vermeiden, vom Hauptthema abzuweichen.

  1. Um das Verständnis der Entsprechung des Codes zu erleichtern, machen Sie ihn nicht zu einer Funktion.
  2. Die Bildschirminformationen sollten ViewModel sein, und es werden keine Änderungen vorgenommen, die die Annahmen ändern.
  3. Nehmen Sie keine wesentlichen Änderungen am Code vor.

Nach dem Refactoring

       /** 
         *Konvertieren Sie Bildschirminformationen in Dto.
         *ID und Name nehmen den Wert der Text-Eigenschaft von Label und TextBox an.
         *Die ID ist für eine neue Registrierung null.
         **/
        public Dto CreateDto(string id, string name, string updateUserId)
        {
            Dto dto = null;

            if (id == null)
            {
                dto = new Dto();
                dto.Id = -1;
                dto.RegistUser = updateUserId;
                dto.RegistDate = DateTime.Now;
            }
            else
            {
                dto = GetDto(int.Parse(id));
            }

            dto.Name = name;
            dto.UpdateUserId = updateUserId;
            dto.UpdateDate = DateTime.Now;

            return dto;
        }

        /**Holen Sie sich Dto vom Tisch. Code weggelassen**/
        private Dto GetDto(int id)
        {
            return new Dto();
        }

        /**Tabelle Dto. Wenn neu, ist id-Auf 1 setzen.**/
        public class Dto
        {
            public int Id { get; set; }
            public string Name { get; set; }
            public string RegistUser { get; set; }
            public DateTime? RegistDate { get; set; }
            public string UpdateUserId { get; set; }
            public DateTime? UpdateDate { get; set; }
        }

java
    /**
     *Konvertieren Sie Bildschirminformationen in Dto.
     *ID und Name nehmen den Wert der Text-Eigenschaft von Label und TextBox an.
     *Die ID ist für eine neue Registrierung null.
     **/
    public Dto createDto(String id, String name, String updateUserId) {
        Dto dto = null;

        if (id == null) {
            dto = new Dto();
            dto.setId(-1);
            dto.setRegistUser(updateUserId);
            dto.setRegistDate(new Date());
        } else {
            dto = getDto(Integer.parseInt(id));
        }

        dto.setName(name);
        dto.setUpdateUserId(updateUserId);
        dto.setUpdateDate(new Date());

        return dto;
    }

    /**Holen Sie sich Dto vom Tisch. Code weggelassen.**/
    private Dto getDto(int id) {
        return new Dto();
    }

    /**Tabelle Dto. Wenn neu, ist id-Auf 1 setzen.**/
    public class Dto {
        private int id;
        private String name;
        private String registUser;
        private Date registDate;
        private String updateUserId;
        private Date updateDate;

        public int getId() {
            return id;
        }

        public void setId(int id) {
            this.id = id;
        }

        public String getName() {
            return name;
        }

        public void setName(String name) {
            this.name = name;
        }

        public String getRegistUser() {
            return registUser;
        }

        public void setRegistUser(String registUser) {
            this.registUser = registUser;
        }

        public Date getRegistDate() {
            return registDate;
        }

        public void setRegistDate(Date registDate) {
            this.registDate = registDate;
        }

        public String getUpdateUserId() {
            return updateUserId;
        }

        public void setUpdateUserId(String updateUserId) {
            this.updateUserId = updateUserId;
        }

        public Date getUpdateDate() {
            return updateDate;
        }

        public void setUpdateDate(Date updateDate) {
            this.updateDate = updateDate;
        }
    }

Zusammenfassung

Durch die Trennung des von Neuem und Aktualisierungen abhängigen Codes vom Rest wurde die Wartbarkeit verbessert. In vielen Fällen befindet es sich in einem Zustand wie dem Beispielcode oder ist häufig in eine neue Funktion und eine Aktualisierungsfunktion unterteilt. Bitte überprüfen Sie, ob redundanter Code vorhanden ist, bevor Sie ihn zu einer Funktion machen.

Dieser Refactoring-Standpunkt ist der gleiche wie in einem anderen Artikel "Können Funktionsaufrufe und bedingte Verzweigungen getrennt werden?".

Vorheriger Artikel (Alles arrangieren)

Nächster Artikel (Probleme bei der Verwendung von Bildschirmanzeigewerten)

Inhaltsverzeichnis

Recommended Posts

Wenn die Verarbeitung nach der bedingten Verzweigung redundant ist-12 [C # Refactoring Sample]
Ob die bedingte Verzweigung eine frühzeitige Rückkehr verwendet oder sicher in der bedingten Abdeckung 15 geschrieben ist [C # -Refactoring-Beispiel]
Anything Arrangement-11 [C # Refactoring-Beispiel]
Wenn die von JNA an C ++ übergebene Zeichenfolge verstümmelt ist
Wann umgestalten?
Ändern Sie die Verarbeitung, wenn Sie für jede Liste auf die Schaltfläche in RecyclerView klicken