Comprensione del principio di alta coesione per i metodi nella progettazione orientata agli oggetti

2

So che l'idea della coesione strong si applica ai metodi quanto vale per le classi. Per essere chiari quando dico coesione strong di un metodo intendo un metodo che fa solo un compito e lo fa bene. Questa idea funziona davvero per semplici getter e setter . Ma a volte di solito ci imbattiamo in metodi che fanno più di un compito internamente, anche se sembra che stia facendo una singola attività se si guarda ad un livello più alto di astrazione. Un esempio di tale metodo può essere:

 public void startUp() {
        List<SubSystem> subSystems = getSubSystems();
        sychronized(subSystems) {
            for (SubSystem subSystem : subSystems) {
                subSystem.initialize();
            }
        }
    }

E all'interno di quei metodi di subSystem#initialize() sta succedendo molto. Quindi questa è una violazione del principio alta / strong coesione ?

    
posta Geek 03.03.2013 - 17:43
fonte

1 risposta

4

No. Sembra che sia un metodo coesivo. Potresti rinominare il metodo "initializeAllSubsystemsOnStartup" e probabilmente è più descrittivo di "startUp". Ecco un esempio non coeso:

public void updateCustomerOrders(Customer customer, Orders newOrders) {
    if(!customer.isPersisted()) { customer.save(); }
    else if(customer.inGoodStanding() { 
        customer.setOrders(); 
        for(Order order in Orders) { order.setCustomer(); }
        customer.save(); 
    } else {
        updateUi("Invalid customer");
    }
}

Non è coeso perché il metodo afferma di aggiornare gli ordini dei clienti (le righe nel blocco else if, ma fa molte cose, incluso possibilmente l'aggiornamento dell'interfaccia utente che non sembra dovrebbe preoccupare questo livello.

    
risposta data 03.03.2013 - 18:06
fonte