Modo corretto per rifattorizzare più condizioni se basate [duplicato]

2

Ho rilevato una grande base di codice legacy. Ha un codice come questo:

if ($route == 'login' || $route == 'logout' || $route == 'forgot-password') {
    return;
} 

if ($loggedInUser == false && $currentRoute !== 'login') {
    redirectTo('login', 'You need login');
    return;
}

if ($loggedInUser) {
    if ($loggedInUser['passwordChanged'] == false && $currentRoute !== 'change-password') {
        redirectTo('change-password', 'You need change your password');
        return;
    }

    if ($loggedInUser['profileUpdated'] == false && $currentRoute !== 'update-profile') {
        redirectTo('update-profile');
        return;
    }

    if ($loggedInUser['role'] !== 'admin') {
        redirectTo('logout');
        return;
    }
}

Penso di poter rendere ogni condizione una funzione di chiusura. Mettili tutti in un array e loop su array ed esegui ciascuna funzione.

Mi chiedo se esiste un modo più elegante per eseguire questi controlli.

    
posta Cnkt 27.01.2015 - 13:15
fonte

1 risposta

1

Le Karnaugh Maps sono un ottimo modo per ridurre la complessità della logica. Karnaugh Maps nonostante tu voglia definire chiaramente i vari stati e la loro logica di transizione di base. Indipendentemente da quanto è possibile ridurre il numero e la complessità delle espressioni logiche, è necessario analizzare attentamente gli stati (ad esempio "UpdatingProfile") e definire i metodi di conseguenza.

L'idea di chiusura può andare bene se il tuo progetto generale è più funzionale di quello orientato agli oggetti. Tuttavia potrebbe essere solo un inutile esercizio di spazzare la terra sotto il tappeto; Non peggiorare la manutenzione del codice.

    
risposta data 27.01.2015 - 14:26
fonte

Leggi altre domande sui tag