Usa i verbi con funzioni, i nomi con le classi - che dire delle interfacce? [chiuso]


23

Ok, capisco le normali convenzioni dell'uso dei verbi con funzioni e nomi con classi. E le interfacce? Esiste una metodologia quando si presentano nomi di interfaccia che potrebbero non essere così ovvi?

Giusto per chiarire, non sto parlando se mettere un "I" davanti al nome o se usare camelCase o PascalCase. Mi chiedo il metodo per capire un nome chiaro e semantico per un'interfaccia.

EDIT Sono ossessionato da come nominare un'interfaccia nel modo più chiaro. Immagino che debba anche essere solo un sostantivo perché quando penso alle classi di denominazione penso all'oggetto del mondo "reale" più vicino a cui può essere collegato. Suppongo che le interfacce del mondo reale siano cose come tastiera, mouse, telecomando, schermo ATM. Sono tutti nomi. Ad ogni modo, qualsiasi ulteriore approfondimento su un buon modo per formulare i nomi delle interfacce sarebbe apprezzato.


2
Hm .. Basandomi sul titolo, ho pensato che si trattasse di equiparare parti del discorso tra programmazione e inglese. Nel qual caso, i madlibs sembrano possibili.
Izkata,

Ricorda, quando crei una classe, stai anche creando un'interfaccia per gli oggetti istanziati da quella classe ... O per dirla in un altro modo, le classi sono realizzate interfacce. Quindi, dovrebbero usare la stessa convenzione di denominazione.
Daniel T.

Inoltre, IMHO il "usa i verbi con le funzioni" è troppo generale. Dovresti usare verbi con comandi e nomi con query .
Daniel T.

Risposte:


21

Direi che dipende da ciò che l'interfaccia definisce. In alcuni casi, quando l'interfaccia è piuttosto specifica e dettagliata, penso che un nome sia il migliore. Esempi sono IList, ICollection.

A volte però un'interfaccia riguarda più l'aggiunta di alcune funzionalità generali a una classe. In tal caso, penso che un aggettivo sia il migliore. Esempi sono IDisposable, IEnumerable...

Forse un altro modo di pensare a questo è quante "abilità" la tua interfaccia definisce.

Ad esempio, l' IList<T>interfaccia definisce queste abilità: Aggiungi, Cancella, Contiene, Inserisci, Rimuovi, ... Queste sono tutte proprietà di un elenco, quindi IListè un buon nome.

IDisposabled'altra parte definisce solo un'abilità: Dispose. Quindi è adatto a tutto ciò che è usa e getta. Da qui il nome IDisposable.


10
Suggerirei di usare un aggettivo "_able" se la tua interfaccia fosse chiamata dopo cose che possono essere fatte al tuo oggetto (es. IEnumerable), Un sostantivo "_er" se la tua interfaccia sarebbe chiamata dopo cose che il tuo oggetto fa ad altri oggetti ( ad es. IEqualityComparer) e un nome generale se la tua interfaccia prende il nome da un tipo di cosa di cui imita il comportamento (ad es IList<T>.).
supercat

Il commento di @supercat dovrebbe davvero essere incluso in questa risposta. Ha molto senso.
Nikhil Vartak,

In realtà il prefisso del nome dell'interfaccia con Iè ridondante.
user1870400,

5

Un interfaccia descrive il comportamento in modo che i nomi dovrebbero dirlo. Non sono sicuro di una regola per questo, ma saprai il nome quando lo ascolti.

Qualche esempio:

Flyable      - Can Fly
Workable     - Can work
Negotiatable - Can negotiate.

Penso che non è proprio per citarne interfacce con Ie chiamare Setcon ISetperché, come sviluppatore, non si dovrebbe essere preoccupati se si tratta di un'interfaccia o una classe. Vedo che questa pratica non esiste ora in Java.


+1 per "come sviluppatore non dovresti preoccuparti se si tratta di un'interfaccia o di una classe".
Kazark,

"come sviluppatore non dovresti preoccuparti se si tratta di un'interfaccia o di una classe" - non sono d'accordo perché se si tratta di un'interfaccia, devi sapere quali membri dovresti implementare.
Maximus Minimus

@MaximusMinimus con prefisso Iè ridondante a prescindere. Allora perché non aggiungere prefissi alle classi astratte A, alle classi regolari con Cecc ??
user1870400,

@ user1870400 - vero, ma non è questa la parte con cui non sono d'accordo.
Maximus Minimus,

4

Dal momento che un'interfaccia è in realtà solo un'espressione del "cosa" ma non del "come" di un tipo, li nominerei nello stesso modo in cui si nominano le classi, almeno da una prospettiva del discorso. L'unica cosa che potrei aggiungere a questo è che spesso saranno più generici degli implementatori specifici (ad es. L'interfaccia "Clienti" può avere implementatori "ProspectiveCustomer" e "PayingCustomer").


0

Un'interfaccia viene utilizzata come una classe. Pertanto, dovrebbe anche essere nominato con un nome quando si nominano le classi con nomi. Preferisci nomi astratti, ad esempio "Veicolo" quando le classi sono "Auto" e "Camion".


0

Risposta rapida: l' interfaccia riguarda più l'aggiunta di un SET di abilità, caratteristiche, confini comuni o interconnessioni tra entità, classi, modelli, concetti, ecc.

Cosa sull'aggiunta di comportamenti comuni a classi ed entità, e poi verrà fuori un buon nome significativo per identificare l'insieme di caratteristiche reali.

Interfaccia denominata come: IStateMachineBuilder, IUserContextProviderBuilder, IEntityBuilderBuilder, IActiveAware, etc.probabilmente spiega il concetto.


1
Sì, le interfacce rappresentano contratti o capacità; così tanto è noto. Ma come risponde alla domanda su come nominarli? Tutto quello che stai veramente dicendo a questo proposito è "Pensaci e l'ispirazione ti colpirà". Questo non dà alcuna raccomandazione, ad esempio, quale dei seguenti nomi dovrebbe essere scelto, qualsiasi perché: IStateMachineBuilder(sostantivo), IBuildStateMachine(prende il nome da un'azione), ICanBuildStateMachine(prende il nome da una capacità), ecc.
stakx

0

Dipende, se l'interfaccia contiene solo metodi, sarà bene nominarlo usando verbi come "Actions" dove come se rappresentasse una classe generica che contenga campi finali statici, allora possiamo usare un nome generico proprio come "Veicolo"

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.