2010-02-24 9 views
7

Questo ha "sempre" mi dava fastidio ...Come dovrei nominare un tipo "ombrellone" in modo sano?

Diciamo che ho un'interfaccia IFiddle e un'altra interfaccia che non fa altro che aggregare diverse distinte IFiddle s:

public interface IFiddleFrobbler 
{ 
    IFiddle Superior { get; } 
    IFiddle Better { get; } 
    IFiddle Ordinary { get; } 
    IFiddle Worse { get; } 
    IFiddle Crackpot { get; } 
} 

(il calcestruzzo IFiddleFrobbler s e IFiddle s dipendono dalle configurazioni e sono creati da una fabbrica.)

Mi imbatto ripetutamente nella denominazione di tali tipi di "ombrelli" - Voglio scambiare il "Frobbler" con qualcosa di descrittivo.

  • "Collection", "Lista" e "Set" non sono abbastanza buono, nel senso che non è una collezione/list/set dove gli elementi possono essere enumerati, aggiunti o rimossi.
  • "Manager" è fuori, perché non viene eseguita alcuna gestione: la fabbrica e le configurazioni lo gestiscono.
  • "Aggregator" lo fa sembrare direttamente dal libro GoF (anche se non credo che violerebbe "la legge di Demeter" - è fuori tema qui).

Per favore, mi illumini, qual è un buon schema di denominazione per i miei tipi di "ombrelli"?


Edit: Come xtofl pointed out in a comment, c'è in realtà più semantica per questo che ho esposto sopra. Se io invece fare quanto segue, penso che il mio bisogno è più chiaro:

// 
// Used for places where the font width might need 
// to be tapered for a rendered text to fit. 
// 
public interface ITaperableFont 
{ 
    Font Font { get; } 
    Boolean CanTaper { get; } 

    void Taper(); 
} 

// 
// Used for rendering a simple marked-up text in 
// a restricted area. 
// 
public interface ITaperableFonts 
{ 
    ITaperableFont Biggest{ get; } 
    ITaperableFont Big { get; } 
    ITaperableFont Normal { get; } 
    ITaperableFont Small { get; } 
    ITaperableFont Smallest { get; } 
} 

In realtà, ho identificato il mio problema nell'aggiunta di vita reale di cui sopra come un difetto di progettazione, non è un problema di denominazione, l'odore di che diverse persone hanno indicato di seguito.

+5

IFiddleUmbrella? :) –

+3

Se non riesci a nominarlo, allora sento odore di pesce nel design. –

+0

@Pop: corretto. È un modo pragmatico di semplificarmi la vita e so che potrebbe essere considerato un odore. –

risposta

3

Direi che il nome che scegli dovrebbe dipendere da ciò che stai cercando di ottenere. Nell'esempio di codice direi che ciò che stai facendo è impostare un voto, quindi probabilmente lo chiamerei IFiddleRating

Come risposta generale direi "dipende" :) Trovo che sia una buona idea per nominare le cose dopo quello che sta cercando di fare, non quello che "è"

+0

In generale, sono d'accordo su "Trovo che sia una buona idea dare un nome alle cose dopo quello che sta cercando di fare, non quello che è" è "", ma non in questo caso specifico. Questo è solo un tipo senza comportamento, quasi, ma non esattamente, come una collezione/lista/set. È un modo pragmatico di semplificarmi la vita (che * so * potrebbe essere un odore, ma non è questo l'argomento) –

+1

Almeno per questo caso, sembra che tu abbia trovato la semantica dietro questa raccolta. – xtofl

+0

@xtofl: Hmmm ... In realtà potresti essere corretto lì, ora che ci penso! –

7

Puoi usare solo il plurale: IFiddles?

+0

La bellezza sta nelle piccole cose. Grazie. –

+0

Lo svantaggio è che differisce da "IFiddle" di un solo carattere: il che, contraddice alcune guide di stile; tuttavia ritengo che un lettore dovrebbe poter vedere la differenza, specialmente perché i membri di "IFiddles" sono molto diversi dai membri di "IFiddle". – ChrisW

7

Sono d'accordo con te in quella denominazione una classe, un'interfaccia o una classe astratta è davvero difficile da ottenere. Alcuni possibili nomi che ho usato prima che ti avrebbe fatto piacere sono:

  • xxx Assistant
  • Composite xxx
  • xxx Coordinator
  • xxx Group
+0

Yay! Il gruppo è buono! –

3

Come Pop ha detto: "Se non posso nominarlo, poi sento odore di pesce nel disegno. "

forse ripensare il tuo design.

IFiddles : IDictionary<SomeType, IFiddle> 
{ 
} 

Update: Se si vuole che sia in sola lettura creare un'interfaccia per tu stesso:

IReadOnlyDictionary<TKey,TValue> 
{ 
    TValue this[TKey] { get; } 
    int Count { get; } 
    ... 
} 

tua vita può ancora così facile come prima.

+0

Hmmm ... Ma io esplicitamente non voglio che sembri possibile manipolare il set di elementi aggregati da 'IFiddles', quindi dovrei quindi lanciare' NotSupportedException' in tutto 'Aggiungi'/'Rimuovi' etc le implementazioni di "ICollection " ** e ** documentano questo fatto. –

+0

Ho aggiunto il post in base alla richiesta :) – bitbonk

1

Penso che questo sia davvero un problema di preferenza personale, quindi ho attivato un dizionario dei sinonimi e cercato sinonimi di "Famiglia" (che potrebbe essere ok in sé).

parenti, classificazione, genere, gruppo, tipo, suddivisione, associazione, affiliazione, alleanza, clan, cricca, club, coalizione, combinazione, combo, confederazione, confederazione, congresso, cooperativa, famiglia, federazione, comunione, fraternità, banda, gilda, lega, folla, ordine, organizzazione, anello, società, sodalizio, sorority, sindacato, tie-in, tie-up, tribù, truppa, troupe, zoo

Ho lasciato cadere alcuni di quelli con una tecnica specifica significato (come unione, anello, piscina) ... scegli ciò che ti piace di più.

Problemi correlati