[JAVA] Branchement conditionnel compliqué - je veux vous donner une chance d'écrire du bon code. 1 [Exemple de refactoring C #]

Branchement conditionnel compliqué

Ce qui précède Les exemples spécifiques décrits dans sont les suivants. (Le code source est C #) spécification) Pensez à la gestion des commentaires sur le babillard. Le commentaire publié est affiché dans la liste des commentaires et chaque commentaire est modifié, supprimé, approuvé, renvoyé, affichage détaillé, et chaque bouton est contrôlé dans les conditions suivantes.

  1. Si la personne de connexion est l'affiche, le commentaire peut être modifié, supprimé et les détails peuvent être affichés. Il ne peut pas être modifié ou supprimé après approbation.
  2. Le premier administrateur peut approuver le commentaire après sa publication (approbation principale), le renvoyer et afficher les détails. Seul un affichage détaillé est possible après approbation.
  3. Le deuxième administrateur peut approuver (approbation secondaire), renvoyer et afficher les détails uniquement pour les commentaires approuvés par le premier administrateur. Seul un affichage détaillé est possible après approbation.

Code source) * Puisque je ne veux voir que le branchement conditionnel, le contrôle d'activation du bouton est omis.


        private const string AuthorId = "ID de l'affiche";
        private const string FirstManagerId = "ID du premier administrateur";
        private const string SecondManagerId = "Deuxième ID administrateur";

        /// <summary>
        ///Contrôlez l'activité du bouton.
        /// </summary>
        /// <param name="loginUserId">Identifiant de la personne de connexion</param>
        /// <param name="firstApproverId">ID d'approbateur principal(Nul si non approuvé)</param>
        /// <param name="secondApproverId">ID d'approbateur secondaire(Nul si non approuvé)</param>
        private void SetButtonControls(string loginUserId, string firstApproverId, string secondApproverId)
        {
            //Chaque bouton est inactif et initialisé.

            if (loginUserId == AuthorId && firstApproverId == null && secondApproverId == null)
            {
                //Bouton d'édition, bouton de suppression, bouton d'affichage des détails, activation
            }
            else if (loginUserId == FirstManagerId && firstApproverId == null)
            {
                //Bouton d'approbation, bouton de renvoi, activation du bouton d'affichage des détails
            }
            else if (loginUserId == FirstManagerId && firstApproverId != null)
            {
                //Activation détaillée du bouton d'affichage
            }
            else if (loginUserId == SecondManagerId && firstApproverId != null && secondApproverId == null)
            {
                //Bouton d'approbation, bouton de renvoi, activation du bouton d'affichage des détails
            }
            else if (loginUserId == SecondManagerId && firstApproverId != null && secondApproverId != null)
            {
                //Activation détaillée du bouton d'affichage
            }
        }
java
    private static final String AUTHOR_ID = "ID de l'affiche";
    private static final String FIRST_MANAGER_ID = "ID du premier administrateur";
    private static final String SECOND_MANAGER_ID = "Deuxième ID administrateur";

    protected void setButtonControls(String loginUserId, String firstApproverId, String secondApproverId) {
        //Chaque bouton est inactif et initialisé.

        if (AUTHOR_ID.equals(loginUserId) && firstApproverId == null && secondApproverId == null) {
            //Bouton d'édition, bouton de suppression, bouton d'affichage des détails, activation
        } else if (FIRST_MANAGER_ID.equals(loginUserId) && firstApproverId == null) {
            //Bouton d'approbation, bouton de renvoi, activation du bouton d'affichage des détails
        } else if (FIRST_MANAGER_ID.equals(loginUserId) && firstApproverId != null) {
            //Activation détaillée du bouton d'affichage
        } else if (SECOND_MANAGER_ID.equals(loginUserId) && firstApproverId != null && secondApproverId == null) {
            //Bouton d'approbation, bouton de renvoi, activation du bouton d'affichage des détails
        } else if (SECOND_MANAGER_ID.equals(loginUserId) && firstApproverId == null && secondApproverId != null) {
            //Activation détaillée du bouton d'affichage
        }

    }

C'est conforme aux spécifications, mais c'est difficile à lire car c'est tout le reste. De plus, puisque l'instruction négative de la même instruction conditionnelle est écrite dans l'instruction if, elle est redondante. Il est préférable d'organiser les instructions if dans la même ligne.


        private void SetButtonControls(string loginUserId, string firstApproverId, string secondApproverId)
        {
            //Chaque bouton est inactif et initialisé.

            //Il y avait beaucoup de gens autour de moi qui ne savaient pas comment écrire ça.
            bool firstApproved = firstApproverId != null;
            bool secondApproved = secondApproverId != null;

            if (loginUserId == AuthorId)
            {
                if (!firstApproved && !secondApproved)
                {
                    //Bouton Modifier, bouton Supprimer, actif
                }

                //Activité détaillée des boutons d'affichage
            }
            else if (loginUserId == FirstManagerId)
            {

                if (!firstApproved)
                {
                    //Bouton d'approbation, bouton de renvoi, activation
                }

                //Activation du bouton des détails d'approbation
            }
            else if (loginUserId == SecondManagerId)
            {
                if (firstApproved && !secondApproved)
                {
                    //Bouton d'approbation, bouton de renvoi
                }

                //Activation détaillée du bouton d'affichage
            }
        }
java
    private static final String AUTHOR_ID = "ID de l'affiche";
    private static final String FIRST_MANAGER_ID = "ID du premier administrateur";
    private static final String SECOND_MANAGER_ID = "Deuxième ID administrateur";

    protected void setButtonControls(String loginUserId, String firstApproverId, String secondApproverId) {
        //Chaque bouton est inactif et initialisé.

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

        if (AUTHOR_ID.equals(loginUserId)) {

            if (!firstApproved && !secondApproved) {
                //Bouton Modifier, bouton Supprimer, actif
            }

            //Activation du bouton d'affichage des détails

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

            if (!firstApproved) {
                //Bouton d'approbation, bouton de renvoi, activation
            }

            //Activation du bouton des détails d'approbation

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

            if (firstApproved && !secondApproved) {
                //Bouton d'approbation, bouton de renvoi
            }

            //Activation détaillée du bouton d'affichage
        }
    }

Les problèmes liés à la façon d'écrire le code source se produisent essentiellement en raison de différences de compétences individuelles telles que "Je ne peux pas penser à une telle façon d'écrire". Je voudrais écrire régulièrement des exemples de code, y compris la signification de la révision du code source.

Refactoring code 2

J'ai reçu un code de référence dans la section commentaire, je vais donc le poster. De plus, certains noms de variables ont été modifiés afin que la gestion du type Bool puisse être unifiée avec d'autres articles. Il n'y a pas d'instruction if et le contrôle d'activité des boutons est facile à comprendre.

        private void SetButtonControls(string loginUserId, string firstApproverId, string secondApproverId)
        {
            //Premier approuvé
            bool firstApproved = firstApproverId != null;

            //Deuxième approuvé
            bool secondApproved = firstApproved && secondApproverId != null;

            //Equals peut être utilisé pour la comparaison de chaînes,==Mais la comparaison de chaînes de caractères est possible.
            bool isAuthor = AuthorId == loginUserId;
            bool isFirstManager = FirstManagerId == loginUserId;
            bool isSecoundManager = SecondManagerId == loginUserId;

            //Commande d'activation des boutons

            //Bouton Modifier
            bool editButtonEnabled = isAuthor && !firstApproved;

            //Bouton Supprimer
            bool deleteButtonEnabled = isAuthor && !firstApproved;

            //Bouton d'approbation
            bool approvalButtonEnabled = (isFirstManager && !firstApproved) || (isSecoundManager && !secondApproved);

            //Bouton Détails
            bool detailButtonEnabled = isAuthor || isFirstManager || isSecoundManager;
        }

java
    private static final String AUTHOR_ID = "ID de l'affiche";
    private static final String FIRST_MANAGER_ID = "ID du premier administrateur";
    private static final String SECOND_MANAGER_ID = "Deuxième ID administrateur";

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

        //Premier approuvé
        boolean firstApproved = firstApproverId != null;

        //Deuxième approuvé
        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);

        //Commande d'activation des boutons

        //Bouton Modifier
        boolean editButtonEnabled = isAuthor && !firstApproved;

        //Bouton Supprimer
        boolean deleteButtonEnabled = isAuthor && !firstApproved;

        //Bouton d'approbation
        boolean approvalButtonEnabled = (isFirstManager && !firstApproved) || (isSecoundManager && !secondApproved);

        //Bouton Détails
        boolean detailButtonEnabled = isAuthor || isFirstManager || isSecoundManager;
    }

Article suivant (collection de code un peu inquiétante)

Table des matières

Recommended Posts

Branchement conditionnel compliqué - je veux vous donner une chance d'écrire du bon code. 1 [Exemple de refactoring C #]
Easy Null Check-Je veux vous donner une chance d'écrire du bon code. 6 [Exemple de refactoring C #]
Une petite collection de code inquiétante - je veux vous donner une chance d'écrire du bon code. 2 [Exemple de refactoring C #]
Gestion des types booléens - Je veux vous donner une chance d'écrire du bon code. 7 [Exemple de refactoring C #]
Trop d'arguments de fonction - je veux vous donner une chance d'écrire du bon code. 8 [Exemple de refactoring C #]
Traitement inutile des collections - je veux vous donner une chance d'écrire du bon code. 5 [Exemple de refactoring C #]
Une interface fluide? -Je veux vous donner l'occasion d'écrire du bon code. 3 [Exemple de refactoring C #]
Est-il possible de séparer les appels de fonction et les branches conditionnelles? - Je veux vous donner une chance d'écrire du bon code. 9 [Exemple de refactoring C #]
Comment écrire du bon code
Je veux écrire un joli build.gradle
Je veux écrire un test unitaire!
Je veux écrire une simple répétition d'une chaîne de caractères
7 choses que je veux que tu gardes pour que ça ne devienne pas un putain de code