Nel mio team, lavoriamo a stretto contatto con alcuni architetti del software. Approvano tutte le decisioni di progettazione dei nostri progetti, fanno alcune revisioni del codice, ecc.
I nostri progetti consistono principalmente in funzionalità back-end implementate in PHP usando il framework Symfony 2. Quindi sintatticamente, il codice, le convenzioni di denominazione e la struttura del progetto sembrano quasi identici a come sarebbe Java (Symfony 2 incoraggia tale struttura). Lo menziono perché nel nostro caso si applicano anche convenzioni specifiche di Java (se possibile).
Di recente, hanno suggerito qualcosa che trovo molto strano: tutti i metodi dovrebbero avere congiunzioni nel loro nome getEntityOrNull
, ad esempio , setValueOrException
ecc.
Una simile convenzione di denominazione mi sembra molto sbagliata, ma non riesco a trovare argomenti concreti o articoli / pagine online che lo mettano in discussione.
L'unica cosa che mi è venuta in mente è:
- tali informazioni dovrebbero essere presenti nelle annotazioni del metodo, come
@return
o@throws
- l'uso di congiunzioni ("e", "o" ecc.) nei nomi dei metodi di solito suggerisce che il principio di responsabilità singola non è adeguatamente rispettato
Quali sono alcuni altri argomenti concreti contro questa convenzione di denominazione?
the use of conjunctions ("and", "or" etc.) in method names usually suggest that the Single Responsibility Principle is not properly respected
Questo non è il caso degli esempi che hai elencato, in cui la congiunzione viene utilizzata per chiarire il meccanismo utilizzato per gestire i guasti, non per indicare che potrebbe fare una cosa o l'altra. Anche la funzione più definita può avere condizioni di errore legittime, ad esempio fare scoppiare uno stack vuoto.
Int32.TryParse
e Int32.Parse
- entrambi analizzano una stringa in un numero intero, ma il primo restituisce un valore booleano che indica il successo e il secondo genera un errore.
Try...
, ...OrNull
, ...OrDefault
. @EricLippert Questa non è l'unica convenzione in .net. Considerare Single
vs. SingleOrDefault
, che è molto vicino OrNull
all'OP suggerito.