In che modo questo esempio del libro di Robert Martin viola il Principio di Responsabilità Unica? [duplicare]

3

Secondo il libro "Codice pulito" a pagina 38, le seguenti righe di codice violano il principio della responsabilità unica. Tuttavia, non riesco a capire come ci siano "molteplici" ragioni per cui cambiare?

public Money CalculatePay(Employee e) 
throws InvalidEmployeeType {
    switch (e.type) {
        case COMMISSIONED:
            return calculateCommissionedPay(e);
        case HOURLY:
            return calculateHourlyPay(e);
        case SALARIED:
            return calculateSalariedPay(e);
        default:
            throw new InvalidEmployeeType(e.type);
    }
}

Mi sembra che lo scopo di questa classe sia singolare: calcolare la retribuzione degli impiegati, orari o salariati - e queste tre funzioni sono allo stesso livello di astrazione e un livello al di sotto della percentuale più alta codice%. Si riferisce al fatto che possono essere aggiunti più tipi di dipendenti?

    
posta fibono 11.09.2015 - 22:42
fonte

1 risposta

1

Qui ci sono cinque problemi:

  • Determina quale tipo di pagamento calcolare.
  • Calcola il pagamento commissionato.
  • Calcola retribuzione oraria.
  • Calcola retribuzione salariale.
  • Convalida il tipo di impiegato.

Cosa potrebbe obbligarci a modificare la classe che contiene questo metodo?

  • Forse aggiungiamo un nuovo tipo di dipendente. Ora dobbiamo aggiungere una nuova logica di calcolo.
  • Forse modifichiamo un tipo di dipendente esistente. Ora dobbiamo modificare la logica di un tipo di dipendente esistente.

Diversi tipi di dipendenti hanno i loro calcoli nella stessa classe . Ogni tipo di dipendente è un motivo per cui questa classe deve cambiare. Quindi, viola il principio di responsabilità Single .

Spostare ciascun tipo di pagamento nella propria classe (pensa: modello di strategia) localizzerebbe i motivi per cambiare in una classe per tipo di dipendente, dando ad ognuno una ragione per cambiare.

Infine, l'uso di dispacciamento dinamico per selezionare il calcolo della retribuzione separa ulteriormente le preoccupazioni scaricando la logica di selezione e di convalida stessa nel compilatore.

    
risposta data 11.09.2015 - 23:01
fonte

Leggi altre domande sui tag