2013-04-24 2 views
6

Sto lavorando a una funzione che restituisce un oggetto da un contenitore (ad esempio una matrice) per valore (ad esempio, per nome). Se l'oggetto non esiste già, viene creata e restituita una copia predefinita dell'oggetto (costruttore predefinito).Proporre come denominare una funzione "get/create & get"

In questo modo, questa funzione restituisce SEMPRE un oggetto, indipendentemente dal fatto che l'oggetto esistesse prima di chiamare la funzione.

Ora la mia domanda è questa: come denominare questa funzione? GetOrCreateThenGet sembra stupido. Qualche idea?

Edit: mi sento una cosa del genere sarebbe più vicino all'essenza della funzione: GetForSure ...

+2

Vorrei semplicemente rilasciare "ThenGet" – Jay

+0

... che potrebbe anche significare "GetOrCreate (ButDon'tGet)" ... –

+0

No, questa è una convenzione di denominazione tipica per questo scenario, comunque imperfetta. Il metodo restituisce un oggetto; sarebbe molto strano creare un'istanza ma restituire "null". – Jay

risposta

5

Perché è necessario altro che non sia getXXX(). Qualsiasi metodo che ha and/or significa che sta facendo molto e sta mescolando preoccupazioni e rompendo seriamente il Single Responsibility Principle.

Se il chiamante si preoccupa effettivamente se l'oggetto viene creato su richiesta se tutto ciò di cui hanno bisogno dal contratto è ottenere l'oggetto?

getOrCreate implica che lo get l'oggetto or sarà created ma non restituito.

Ancora una volta perché mi interessa la parte create?

Se davvero dovrei cura sarebbe getOrCreateAndGet di essere semanticamente corretto, ma molto poco ortodossa e soggetta a discussioni con i coetanei sui metodi che fanno a molte cose e preoccupazioni di miscelazione e rompere il Single Responsiblity Principle? Solo perché le altre persone nominano le cose folliche e non sensoriali non è una buona scusa per sbagliare anche.

+7

Get non è lo stesso con GetOrCreate, poiché Get potrebbe trovarsi nello stato in cui l'elemento desiderato non esiste. Propongo Getsert per analogia con Upsert. – garkin

-1

GetGuaranteed sembra coprire tutto il chiamante ha bisogno di sapere ...

2

Il nome più adatto per la funzione sarebbe "Fornisci" come se si forniscono beni che è possibile spedire da un magazzino o fare/acquistare uno nuovo e poi consegnare.