Sono andato avanti e indietro tra C# e Java negli ultimi 8 anni.Usi il modello Metodo del modello nei linguaggi di programmazione con chiusure/delegati/puntatori di funzione?
Una cosa che mi colpisce è che ho completamente smesso di utilizzare il modello di progettazione "Metodo modello" in C#. In realtà, in C# sono arrivato a pensare a questo modello come a un anti-modello.
http://en.wikipedia.org/wiki/Template_method_pattern
Tornando a Java, trovo il modello è vivo e vegeto. Continuo a pensare che abbia un aspetto antico, ma mi rendo conto che non c'è altro modo per farlo in java. Anche Java sembra antiquato;)
Dato che questo sta per accadere comunque, perché è un antipattern?
- Un sacco di volte che utilizza la gerarchia di ereditarietà per "le ragioni sbagliate".
- Le classi base hanno la tendenza a essere disseminate di tutti i tipi di codice non correlato.
- Ti costringe a bloccare il design, spesso molto presto nel processo di sviluppo. (Blocco prematuro in molti casi)
- Cambiare questo in una fase successiva diventa solo sempre più difficile.
Quindi con chiusure/delegati/puntatori di funzione, si passa di solito a una funzione anziché a una sottoclasse.
Ma torniamo alla domanda:
Se la vostra lingua ha le chiusure/delegati/funzione, si usa il Template Method, e quando?
È interessante leggere la risposta. Potresti dare un esempio di dove il modello del metodo template è "assolutamente" il migliore, in particolare dove l'accoppiamento è buono ?? L'accoppiamento presunto è sempre male! – rpattabi
@ragu: il punto non è se l'accoppiamento è buono o cattivo. Il punto è se è necessario o non necessario. Se è necessario, allora IMHO il modo più semplice per esprimerlo è il metodo template. – dsimcha
Capisco che punti per rispondere alla domanda in mano. La mia domanda è generica. Per me l'accoppiamento in modello è un effetto collaterale negativo. Qualche esempio di accoppiamento è buono? – rpattabi