Oltre alla risposta accettata, desidero menzionare un altro esempio per una preoccupazione trasversale: il servizio remoto. Supponiamo che io voglia chiamare gli altri componenti del mio ecosistema localmente come se fossero in esecuzione. Forse in alcuni casi lo fanno anche loro. Ma ora voglio eseguire i miei servizi distribuiti in un cloud o cluster. Perché dovrei preoccuparmi di questo aspetto come sviluppatore di applicazioni? Un aspetto potrebbe occuparsi di scoprire chi chiamare e come, serializzare i dati trasmessi se necessario e effettuare una chiamata remota. Se tutto fosse in esecuzione in corso, l'aspetto semplicemente inoltrerebbe la chiamata locale. Dal lato del destinatario l'aspetto deserializza i dati, effettua la chiamata locale e restituisce il risultato.
Ora lascia che ti racconti una piccola storia di cose "banali" come l'output dei registri: solo poche settimane fa ho rifattorizzato un codice, ma non troppo grande, di codice (circa 250.000 righe di codice) per un client. In poche centinaia di classi è stato utilizzato un tipo di struttura di registrazione, in altre poche centinaia. Poi c'erano diverse migliaia di righe di System.out.println(*)
dove in realtà doveva esserci stato l'output del registro. Così ho finito con il fissare migliaia di righe di codice sparse per il codice base. Fortunatamente potrei usare alcuni trucchi intelligenti in IntelliJ IDEA (ricerca strutturale & sostitutiva) per accelerare l'intera azione, ma ragazzo non pensi che sia stato banale! Certo, la registrazione di debug fortemente dipendente dal contesto si verifica sempre all'interno di un corpo del metodo, ma molti tipi importanti di registrazione come le chiamate al metodo di traccia (anche gerarchicamente con un output ben rientrato), la registrazione di eccezioni gestite o non gestite, il controllo dell'utente (registrazione delle chiamate a metodi ristretti basati su ruoli utente) e così via possono essere facilmente implementati in aspetti senza che essi inquinino il codice sorgente.Lo sviluppatore di applicazioni di tutti i giorni non ha bisogno di pensarci o persino di vedere le chiamate del registratore sparse sul codice base. Qualcuno è responsabile di mantenere aggiornato l'aspetto e può anche cambiare la strategia di registrazione o l'intera infrastruttura di registrazione centralmente in un unico posto.
Posso trovare spiegazioni simili per altri problemi trasversali. Mantenere il codice pulito e libero da dispersione e aggrovigliamento IMO è una questione di professionalità, non di nulla facoltativo. Ultimo ma non meno importante mantiene il codice leggibile, mantenibile, rifattorizzabile. Amen.
L'immagine dice tutto. Bello! – RBT
"Il problema trasversale è una preoccupazione che è applicabile a tutta l'applicazione" ➤ Non sono sicuro su questo dato che la gestione delle transazioni non è applicabile "a tutta l'applicazione ma è ancora una preoccupazione trasversale. E l'immagine non mi dice nulla di essere onesto, è solo confuso .. –