[JAVA] Komplizierte bedingte Verzweigung - ich möchte Ihnen die Möglichkeit geben, guten Code zu schreiben. 1 [C # Refactoring-Beispiel]

Komplizierte bedingte Verzweigung

Oben Spezifische Beispiele, die in beschrieben werden, sind wie folgt. (Quellcode ist C #) Spezifikation) Betrachten Sie die Kommentarverwaltung am Schwarzen Brett. Der gepostete Kommentar wird in der Kommentarliste angezeigt, und jeder Kommentar wird bearbeitet, gelöscht, genehmigt, in Untersuchungshaft genommen und detailliert angezeigt. Jede Schaltfläche wird unter den folgenden Bedingungen gesteuert.

  1. Wenn die angemeldete Person das Poster ist, kann der Kommentar bearbeitet, gelöscht und die Details angezeigt werden. Es kann nach Genehmigung nicht mehr bearbeitet oder gelöscht werden.
  2. Der erste Administrator kann den Kommentar genehmigen (primäre Genehmigung) oder nach dem Posten zurückgeben und die Details anzeigen. Nach Genehmigung ist nur eine detaillierte Anzeige möglich.
  3. Der zweite Administrator kann Details nur für vom ersten Administrator genehmigte Kommentare genehmigen (sekundäre Genehmigung), zurückverweisen und anzeigen. Nach Genehmigung ist nur eine detaillierte Anzeige möglich.

Quellcode) * Da ich nur bedingte Verzweigungen sehen möchte, entfällt die Steuerung der Tastenaktivierung.


        private const string AuthorId = "Poster ID";
        private const string FirstManagerId = "Erste Administrator-ID";
        private const string SecondManagerId = "Zweite Administrator-ID";

        /// <summary>
        ///Steuern Sie die Aktivität der Schaltfläche.
        /// </summary>
        /// <param name="loginUserId">Login Person ID</param>
        /// <param name="firstApproverId">ID des primären Genehmigenden(Null, wenn nicht genehmigt)</param>
        /// <param name="secondApproverId">ID des sekundären Genehmigenden(Null, wenn nicht genehmigt)</param>
        private void SetButtonControls(string loginUserId, string firstApproverId, string secondApproverId)
        {
            //Jede Schaltfläche ist inaktiv und initialisiert.

            if (loginUserId == AuthorId && firstApproverId == null && secondApproverId == null)
            {
                //Schaltfläche Bearbeiten, Schaltfläche Löschen, Schaltfläche Detailanzeige, Aktivierung
            }
            else if (loginUserId == FirstManagerId && firstApproverId == null)
            {
                //Genehmigungsschaltfläche, Untersuchungsschaltfläche, Aktivierung der Detailanzeigeschaltfläche
            }
            else if (loginUserId == FirstManagerId && firstApproverId != null)
            {
                //Detaillierte Aktivierung der Anzeigetaste
            }
            else if (loginUserId == SecondManagerId && firstApproverId != null && secondApproverId == null)
            {
                //Schaltfläche "Genehmigung", Schaltfläche "Untersuchungshaft", Aktivierung der Schaltfläche "Detailanzeige"
            }
            else if (loginUserId == SecondManagerId && firstApproverId != null && secondApproverId != null)
            {
                //Detaillierte Aktivierung der Anzeigetaste
            }
        }
java
    private static final String AUTHOR_ID = "Poster ID";
    private static final String FIRST_MANAGER_ID = "Erste Administrator-ID";
    private static final String SECOND_MANAGER_ID = "Zweite Administrator-ID";

    protected void setButtonControls(String loginUserId, String firstApproverId, String secondApproverId) {
        //Jede Schaltfläche ist inaktiv und initialisiert.

        if (AUTHOR_ID.equals(loginUserId) && firstApproverId == null && secondApproverId == null) {
            //Schaltfläche Bearbeiten, Schaltfläche Löschen, Schaltfläche Detailanzeige, Aktivierung
        } else if (FIRST_MANAGER_ID.equals(loginUserId) && firstApproverId == null) {
            //Schaltfläche "Genehmigung", Schaltfläche "Untersuchungshaft", Aktivierung der Schaltfläche "Detailanzeige"
        } else if (FIRST_MANAGER_ID.equals(loginUserId) && firstApproverId != null) {
            //Detaillierte Aktivierung der Anzeigetaste
        } else if (SECOND_MANAGER_ID.equals(loginUserId) && firstApproverId != null && secondApproverId == null) {
            //Genehmigungsschaltfläche, Untersuchungsschaltfläche, Aktivierung der Detailanzeigeschaltfläche
        } else if (SECOND_MANAGER_ID.equals(loginUserId) && firstApproverId == null && secondApproverId != null) {
            //Detaillierte Aktivierung der Anzeigetaste
        }

    }

Es entspricht den Spezifikationen, ist aber schwer zu lesen, da es alles andere ist, wenn. Da die negative Anweisung derselben bedingten Anweisung in der if-Anweisung geschrieben ist, ist sie auch redundant. Es ist besser, if-Anweisungen in derselben Zeile anzuordnen.


        private void SetButtonControls(string loginUserId, string firstApproverId, string secondApproverId)
        {
            //Jede Schaltfläche ist inaktiv und initialisiert.

            //Es gab viele Leute um mich herum, die nicht wussten, wie man das schreibt.
            bool firstApproved = firstApproverId != null;
            bool secondApproved = secondApproverId != null;

            if (loginUserId == AuthorId)
            {
                if (!firstApproved && !secondApproved)
                {
                    //Schaltfläche Bearbeiten, Schaltfläche Löschen, aktiv
                }

                //Detaillierte Aktivität der Anzeigetasten
            }
            else if (loginUserId == FirstManagerId)
            {

                if (!firstApproved)
                {
                    //Schaltfläche "Genehmigen", Schaltfläche "Untersuchungshaft", Aktivierung
                }

                //Aktivierung der Schaltfläche für Genehmigungsdetails
            }
            else if (loginUserId == SecondManagerId)
            {
                if (firstApproved && !secondApproved)
                {
                    //Genehmigungsschaltfläche, Untersuchungsschaltfläche
                }

                //Detaillierte Aktivierung der Anzeigetaste
            }
        }
java
    private static final String AUTHOR_ID = "Poster ID";
    private static final String FIRST_MANAGER_ID = "Erste Administrator-ID";
    private static final String SECOND_MANAGER_ID = "Zweite Administrator-ID";

    protected void setButtonControls(String loginUserId, String firstApproverId, String secondApproverId) {
        //Jede Schaltfläche ist inaktiv und initialisiert.

        boolean firstApproved = firstApproverId != null;
        boolean secondApproved = secondApproverId != null;

        if (AUTHOR_ID.equals(loginUserId)) {

            if (!firstApproved && !secondApproved) {
                //Schaltfläche Bearbeiten, Schaltfläche Löschen, aktiv
            }

            //Aktivierung der Detailanzeigetaste

        } else if (FIRST_MANAGER_ID.equals(loginUserId)) {

            if (!firstApproved) {
                //Schaltfläche "Genehmigen", Schaltfläche "Untersuchungshaft", Aktivierung
            }

            //Aktivierung der Schaltfläche für Genehmigungsdetails

        } else if (SECOND_MANAGER_ID.equals(loginUserId)) {

            if (firstApproved && !secondApproved) {
                //Genehmigungsschaltfläche, Untersuchungsschaltfläche
            }

            //Detaillierte Aktivierung der Anzeigetaste
        }
    }

Probleme beim Schreiben von Quellcode treten grundsätzlich aufgrund individueller Unterschiede in den Fähigkeiten auf, z. B. "Ich kann mir keine solche Schreibweise vorstellen". Ich möchte regelmäßig Beispielcode schreiben, einschließlich der Bedeutung der Überprüfung des Quellcodes.

Refactoring-Code 2

Ich habe im Kommentarbereich einen Referenzcode erhalten, daher werde ich ihn veröffentlichen. Darüber hinaus wurden einige Variablennamen geändert, damit die Behandlung des Bool-Typs mit anderen Artikeln vereinheitlicht werden kann. Es gibt keine if-Anweisung, und die Steuerung der Schaltflächenaktivität ist leicht zu verstehen.

        private void SetButtonControls(string loginUserId, string firstApproverId, string secondApproverId)
        {
            //Zuerst genehmigt
            bool firstApproved = firstApproverId != null;

            //Zweite genehmigt
            bool secondApproved = firstApproved && secondApproverId != null;

            //Gleich kann für den Zeichenfolgenvergleich verwendet werden.==Ein Zeichenfolgenvergleich ist jedoch möglich.
            bool isAuthor = AuthorId == loginUserId;
            bool isFirstManager = FirstManagerId == loginUserId;
            bool isSecoundManager = SecondManagerId == loginUserId;

            //Steuerung der Tastenaktivierung

            //Schaltfläche Bearbeiten
            bool editButtonEnabled = isAuthor && !firstApproved;

            //Schaltfläche Löschen
            bool deleteButtonEnabled = isAuthor && !firstApproved;

            //Schaltfläche "Genehmigung"
            bool approvalButtonEnabled = (isFirstManager && !firstApproved) || (isSecoundManager && !secondApproved);

            //Schaltfläche Details
            bool detailButtonEnabled = isAuthor || isFirstManager || isSecoundManager;
        }

java
    private static final String AUTHOR_ID = "Poster ID";
    private static final String FIRST_MANAGER_ID = "Erste Administrator-ID";
    private static final String SECOND_MANAGER_ID = "Zweite Administrator-ID";

    protected void setButtonControls(String loginUserId, String firstApproverId,
            String secondApproverId) {

        //Zuerst genehmigt
        boolean firstApproved = firstApproverId != null;

        //Zweite genehmigt
        boolean secondApproved = firstApproved && secondApproverId != null;

        boolean isAuthor = AUTHOR_ID.equals(loginUserId);
        boolean isFirstManager = FIRST_MANAGER_ID.equals(loginUserId);
        boolean isSecoundManager = SECOND_MANAGER_ID.equals(loginUserId);

        //Steuerung der Tastenaktivierung

        //Schaltfläche Bearbeiten
        boolean editButtonEnabled = isAuthor && !firstApproved;

        //Schaltfläche Löschen
        boolean deleteButtonEnabled = isAuthor && !firstApproved;

        //Schaltfläche "Genehmigung"
        boolean approvalButtonEnabled = (isFirstManager && !firstApproved) || (isSecoundManager && !secondApproved);

        //Schaltfläche Details
        boolean detailButtonEnabled = isAuthor || isFirstManager || isSecoundManager;
    }

Nächster Artikel (eine etwas besorgniserregende Codesammlung)

Inhaltsverzeichnis

Recommended Posts

Komplizierte bedingte Verzweigung - ich möchte Ihnen die Möglichkeit geben, guten Code zu schreiben. 1 [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]
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