[JAVA] Ist es möglich, Funktionsaufrufe und bedingte Verzweigungen zu trennen? -Ich möchte eine gute Gelegenheit zum Schreiben von Code geben. 9 [C # Refactoring-Beispiel]

Funktion, die nach bedingter Verzweigung aufgerufen wird

Gelegentlich sehe ich Code, der dieselbe Funktion hat, die in der if-Anweisung aufgerufen wird, sich jedoch nur in den Argumenten unterscheidet. Überlegen Sie, ob Sie es in der if-Anweisung wirklich aufrufen müssen.

Beispielcode

Betrachten Sie ein Beispiel für einen Protokollverwaltungsbildschirm. Detaillierte Protokollinformationen werden dem Systemadministrator angezeigt, detaillierte Protokolle werden jedoch nur dem Systemadministrator angezeigt.

        public void Main(bool isManager, string detail)
        {
            //Zeigen Sie dem Administrator detaillierte Protokolle an.
            if (isManager)
            {
                SetSummary("Ein unerwarteter Fehler ist aufgetreten. Bitte überprüfen Sie das detaillierte Protokoll.");
                SetDetail(detail);
            }
            else
            {
                SetSummary("Ein unerwarteter Fehler ist aufgetreten.");
                SetDetail("Bitte kontaktieren Sie den Administrator für Details.");
            }
        }

        private void SetSummary(string summary)
        {
            System.Console.WriteLine("Stellen Sie den Umriss auf dem Bildschirm ein." + summary);
        }

        private void SetDetail(string detail)
        {
            System.Console.WriteLine("Stellen Sie Details auf dem Bildschirm ein." + detail);
        }

java
    public void main(boolean isManager, String detail) {
        //Zeigen Sie dem Administrator detaillierte Protokolle an.
        if (isManager) {
            setSummary("Ein unerwarteter Fehler ist aufgetreten. Bitte überprüfen Sie das detaillierte Protokoll.");
            setDetail(detail);

        } else {
            setSummary("Ein unerwarteter Fehler ist aufgetreten.");
            setDetail("Bitte kontaktieren Sie den Administrator für Details.");
        }
    }

    private void setSummary(String summary) {
        System.out.println("Stellen Sie den Umriss auf dem Bildschirm ein." + summary);
    }

    private void setDetail(String detail) {
        System.out.println("Stellen Sie Details auf dem Bildschirm ein." + detail);
    }

Dinge, über die man sich Sorgen machen muss

Was in diesem Code besorgniserregend ist, ist, dass der einzige Unterschied in der if-Anweisung darin besteht, dass die Funktionsaufrufe gleich sind, nur die Argumente. Es ist sauberer, nur das Argument zu ändern und einen Funktionsaufruf durchzuführen.

Nach dem Refactoring

            //Zeigen Sie detaillierte Protokolle für Administratoren an.
            string summary = null;
            string detail = null;
            if (isManager)
            {
                summary = "Ein unerwarteter Fehler ist aufgetreten. Bitte überprüfen Sie das detaillierte Protokoll.";
                detail = detailLog;
            }
            else
            {
                summary = "Ein unerwarteter Fehler ist aufgetreten.";
                detail = "Bitte kontaktieren Sie den Administrator für Details.";
            }

            //Trennt den Funktionsaufrufteil vom bedingten Zweig.
            SetSummary(summary);
            SetDetail(detail);

java
    public void main(boolean isManager, String detailLog) {
        //Zeigen Sie dem Administrator detaillierte Protokolle an.
        String summary = null;
        String detail = null;
        if (isManager) {
            summary = "Ein unerwarteter Fehler ist aufgetreten. Bitte überprüfen Sie das detaillierte Protokoll.";
            detail = detailLog;

        } else {
            summary = "Ein unerwarteter Fehler ist aufgetreten.";
            detail = "Bitte kontaktieren Sie den Administrator für Details.";
        }

        setSummary(summary);
        setDetail(detail);
    }

    private void setSummary(String summary) {
        System.out.println("Stellen Sie den Umriss auf dem Bildschirm ein." + summary);
    }

    private void setDetail(String detail) {
        System.out.println("Stellen Sie Details auf dem Bildschirm ein." + detail);
    }

Zusammenfassung

In allen Fällen können Funktionsaufrufe nicht getrennt werden, aber ich denke, es gibt Raum für Überlegungen. Was mich mit diesem Fix glücklich macht, ist, dass der Nachrichtengenerierungsprozess und der Nachrichteneinstellungsprozess getrennt werden können. Beispielsweise ist ersichtlich, dass der nachfolgende Nachrichteneinstellungsprozess immer aufgerufen wird, selbst wenn die Nachrichtengenerierung weiter verzweigt und geändert wird, um eine andere Nachricht auszugeben.

Vorheriger Artikel (zu viele Funktionsargumente)

Nächster Artikel (Getter, Setter Reverse Problem)

Inhaltsverzeichnis

Recommended Posts

Ist es möglich, Funktionsaufrufe und bedingte Verzweigungen zu trennen? -Ich möchte eine gute Gelegenheit zum Schreiben von Code geben. 9 [C # Refactoring-Beispiel]
Zu viele Funktionsargumente - ich möchte Ihnen die Möglichkeit geben, guten Code zu schreiben. 8 [C # Refactoring-Beispiel]
Easy Null Check - Ich möchte Ihnen die Möglichkeit geben, guten Code zu schreiben. 6 [C # Refactoring-Beispiel]
Eine etwas besorgniserregende Codesammlung - ich möchte Ihnen die Möglichkeit geben, guten Code zu schreiben. 2 [C # Refactoring Sample]
Bool-Typ-Handling - Ich möchte Ihnen die Möglichkeit geben, guten Code zu schreiben. 7 [C # Refactoring-Beispiel]
Eine flüssige Schnittstelle? -Ich möchte Ihnen die Möglichkeit geben, guten Code zu schreiben. 3 [C # Refactoring Sample]
Verschwenderische Verarbeitung von Sammlungen - ich möchte Ihnen die Möglichkeit geben, guten Code zu schreiben. 5 [C # Refactoring Sample]
Easy Null Check - Ich möchte Ihnen die Möglichkeit geben, guten Code zu schreiben. 6 [C # Refactoring-Beispiel]
Eine etwas besorgniserregende Codesammlung - ich möchte Ihnen die Möglichkeit geben, guten Code zu schreiben. 2 [C # Refactoring Sample]
Bool-Typ-Handling - Ich möchte Ihnen die Möglichkeit geben, guten Code zu schreiben. 7 [C # Refactoring-Beispiel]
Zu viele Funktionsargumente - ich möchte Ihnen die Möglichkeit geben, guten Code zu schreiben. 8 [C # Refactoring-Beispiel]
Verschwenderische Verarbeitung von Sammlungen - ich möchte Ihnen die Möglichkeit geben, guten Code zu schreiben. 5 [C # Refactoring Sample]
Eine flüssige Schnittstelle? -Ich möchte Ihnen die Möglichkeit geben, guten Code zu schreiben. 3 [C # Refactoring Sample]
Ist es möglich, Funktionsaufrufe und bedingte Verzweigungen zu trennen? -Ich möchte eine gute Gelegenheit zum Schreiben von Code geben. 9 [C # Refactoring-Beispiel]
Wie man guten Code schreibt
Ich möchte ein schönes build.gradle schreiben
Ich möchte einen Unit Test schreiben!
Ich möchte eine einfache Wiederholung einer Zeichenkette schreiben
7 Dinge, die du behalten sollst, damit es kein verdammter Code wird
Ich möchte Apache Wicket 8 zusammenfassen, weil es eine gute Idee ist
7 Dinge, die du behalten sollst, damit es kein verdammter Code wird
Ich möchte eine Funktion mit Kotlin und Java erstellen!
Ich möchte ein schönes build.gradle schreiben
Ich möchte einen Unit Test schreiben!
Ich möchte eine einfache Wiederholung einer Zeichenkette schreiben
Wenn in Ruby Hash [: a] [: b] [: c] = 0 ist, möchten wir, dass Sie rekursiv erweitern, auch wenn der Schlüssel nicht vorhanden ist