Qual è l'uso migliore dell'annotazione Java @Deprecated per un codice server monolitico con più client?

1

Esiste quell'annotazione @Deprecated che si adatta bene alle librerie Java. Una modifica di versione minore non interromperà un codice esistente se rimane un metodo di libreria deprecato. La compilazione della libreria non segnalerà avvisi di utilizzo del codice deprecati perché la libreria stessa non chiama i suoi metodi deprecati.

Ma cosa succede se il metodo deprecato si trova in un codice di classe del server monolitico, in cui una migrazione del codice altamente riutilizzata è un processo lento eseguito da un numero di sviluppatori in sequenza?

Diciamo che abbiamo un metodo originale che viene utilizzato in più parti del codice del server per più client e un giorno abbiamo deciso di introdurre un nuovo metodo per sostituirlo. Rimangono tuttavia alcuni usi del metodo originale nel nostro codice server perché la migrazione del codice è un processo incrementale lungo. Dovremmo contrassegnare il metodo originale immediatamente con l'annotazione @Deprecated ?

I professionisti sono che le future implementazioni eviteranno di usarlo perché il metodo è contrassegnato con l'annotazione e quindi con lo stile di linea barrato in IDE.

Gli svantaggi sono che anche le restanti implementazioni vengono contrassegnate con lo stile della linea barrata e il compilatore Java segnala gli avvertimenti sugli utilizzi rimanenti, fino a quando tutti gli sviluppatori assegnati aggiornano le rispettive parti del codice monolitico per sbarazzarsi dell'uso del metodo deprecato.

Quindi, quale sarebbe l'approccio alla deprecazione del metodo migliore per un'applicazione monolitica con processo di migrazione del codice lento?

    
posta KoichiSenada 21.06.2017 - 16:32
fonte

1 risposta

5

A mio parere, se una base di codice è monolitica o distribuita, o se la migrazione dovrebbe essere lenta o veloce, non ha alcuna influenza sull'uso di @Deprecated . L'unica distinzione rilevante è se controlli l'intero codice base oppure no.

Fondamento logico: la deprecazione è un concetto inventato per fornire un incentivo a migrare da un determinato codice senza interrompere immediatamente i suoi attuali utenti. Se le persone impiegano molto tempo per seguire l'incentivo, dovranno vivere con avvertenze per un lungo periodo, ma non con errori, e questo è esattamente il trade-off che l'annotazione dovrebbe fornire. Allo stesso tempo, le persone che migrano rapidamente saranno ricompensate con build "verdi" precedenti, che forniscono l'incentivo che volevamo.

Se il codice base è monolitico o distribuito è anche irrilevante. L'unica differenza è se gli avvertimenti risultanti si verificano in un progetto o distribuiti su molti progetti. Per qualsiasi organizzazione che persegue un I.T. strategia, questo non dovrebbe fare una grande differenza.

Ciò che è molto rilevante è se il tuo codice è usato solo da te o se ci sono utenti esterni (nel caso estremo, potenzialmente qualsiasi utente di Internet). Questo fa una grande differenza: se non controlli il comportamento degli utenti del tuo codice, non puoi mai essere sicuro del costo che la rimozione o la rimozione del vecchio codice avrebbe comportato, il che richiede che tu sia molto, molto più prudente nella rimozione del codice . Se gli unici utenti del codice in questione sono responsabili della stessa gestione che decide in merito alla modernizzazione, è possibile considerare lo sforzo di migrare tutti i client e i benefici del miglioramento delle librerie allo stesso tempo, che ha il potenziale di molto meglio -informed-decisioni.

    
risposta data 21.06.2017 - 16:42
fonte

Leggi altre domande sui tag