Nome del metodo di interfaccia "perdita" dettagli di implementazione

3

Ho una classe che implementa un'interfaccia e ho la responsabilità di creare oggetti e "mantenere" la raccolta di oggetti creati.

La classe ha il metodo GetOrCreate(int id) che restituisce l'istanza dell'elemento creato.

public class PoolOfItems : IPoolOfItems
{
    public Item GetOrCreate(int id) { }
}

Requisiti per il metodo GetOrCreate che nel caso in cui l'elemento, per data id , sia già stato creato, è necessario fornire un'istanza già creata.

Quale può essere il nome più "comprensibile" per il metodo GetOrCreate ?

Ho paura che quel nome GetOrCreate descriva l'implementazione dell'interfaccia. E i nomi Get e Create possono essere fuorvianti se utilizzati con l'implementazione.

    
posta Fabio 06.03.2017 - 16:38
fonte

1 risposta

2

GetOrCreate comunica che il metodo può creare un elemento. Se tale comportamento fa parte del contratto del metodo, deve essere comunicato agli utenti dell'interfaccia. Se il metodo fosse appena chiamato Get , i chiamanti verrebbero lasciati a chiedersi cosa succede quando non ci sono articoli con l'ID specificato. Restituisce nulla? Lanciare un'eccezione? GetOrCreate evita tale ambiguità.

D'altra parte, se la creazione di un elemento non fa parte del contratto del metodo ma è una possibile implementazione del suo contratto, GetOrCreate è problematico perché implica un determinato comportamento che potrebbe non abbinare la vera implementazione. In questo caso, il più ambiguo Get sarebbe più appropriato, ma il metodo dovrebbe essere documentato di conseguenza.

    
risposta data 08.03.2017 - 21:19
fonte

Leggi altre domande sui tag