Che cosa significa zio Bob con "nomi di frasi"?


14

Sto leggendo Clean Code di Uncle Bob. Poiché non sono un madrelingua inglese, non sono riuscito a comprendere la seguente dichiarazione:

Le classi e gli oggetti devono avere sostantivo o sintagma nominale nomi come Customer, WikiPage, Account, e AddressParser. Parole evitare come Manager, Processor, Data, o Infoin nome di una classe. Il nome di una classe non dovrebbe essere un verbo.

Per quanto ne so, nessuno dei Manager, Processor, Data, ed Infoè un verbo, non è vero? Qual è il punto attuale che vuole sottolineare?


forse lo zio Bob sta adottando il pensiero RESTful nell'esaltare le virtù delle risorse come oggetti.
rwong

Risposte:


21

I tre punti sono separati:

  • I nomi delle classi dovrebbero essere nomi o frasi di nomi . Ciò significa che il nome della classe dovrebbe essere qualcosa che sarebbe soggetto di un verbo. Nel caso della progettazione orientata agli oggetti, i metodi sarebbero i verbi che si svolgono sulla cosa di cui la classe è una rappresentazione.

  • Alcune parole dovrebbero essere evitate. Managerindica una possibile classe divina . Infoe Datapuò indicare un contenitore dati fittizio. Parole come questa possono indicare una modellizzazione scadente dello spazio problematico.

  • I verbi non dovrebbero mai essere nomi di classe. Vedi il primo punto: le classi modellano le cose, i metodi modellano le azioni.


1
Parole come questa possono indicare una modellizzazione scadente dello spazio problematico. - Beh, si potrebbe pensare, o lo spazio del problema è modellato male o no, indipendentemente dai nomi scelti. Un buon nome non aiuta un design scadente; e un buon design è solo marginalmente danneggiato da un nome povero.
Ingo,

E potresti fare un passo in avanti se consideri come costruisci effettivamente la tua classe e come interagisce con il mondo esterno - le proprietà della classe sarebbero generalmente sostantivi, mentre i metodi della classe sarebbero generalmente verbi
PeteH

Se il tuo progetto ha una classe che considereresti chiamare "Manager" o "Informazioni" o "Dati", probabilmente ha una dozzina di tali classi, il che significa che non useresti questi nomi. Avresti un ThisManager e ThatManager e AnotherManger e così via.
gnasher729,

Dice che i verbi non dovrebbero mai essere nei nomi delle classi, ma stavo solo rileggendo Aggiungi contesto significativo e, nel suo esempio a pagina 29, nomina una classe GuessStatisticMessage. Ora sono confuso sulla regola, perché interpreto il suo uso di Guess come un verbo, al contrario di un sostantivo. Dictionary.com/Browse/guess?s=t
Devin Gleason Lambert

2
@DevinGleasonLambert Ma non è indovinare. È un messaggio statistico ipotetico. Un messaggio è un sostantivo. Indovina statistiche descrive solo il tipo di messaggio che è - uno che indica messaggi sulle statistiche di indovinare.
Thomas Owens

7

Sta cercando di tracciare una distinzione tra cose (sostantivi) e azioni (verbi). Nella progettazione convenzionale orientata agli oggetti, pensiamo alle classi come cose e ai loro metodi come alle azioni che tali cose possono svolgere. Per gestire è quello di prendersi cura di o coordinare, mentre direttore è una persona o una cosa che gestisce.

I libri introduttivi di solito lo riducono ai termini più semplici e ovvi possibili come una classe di nome Cane , con metodi Bark and Bite . Nelle classi del mondo reale, la distinzione è spesso un po 'più sottile, ma è ancora lì. Credo che il punto che lo zio Bob sta facendo sia, tuttavia, che mentre manager è un sostantivo, ma pone molta attenzione su ciò che fa il manager, e non su ciò che è, è troppo vago per descrivere esattamente ciò che è essere gestito o come.


5
Sfortunatamente, questo tipo di pensiero può portare a progetti sbagliati. Uno dei primi esempi è il classico esempio introduttivo di un conto bancario. In quasi tutti i libri di testo OO, Accountè un oggetto, balanceè un campo ed transferè metodo. Ma il progetto corretto sarebbe: Transferè un oggetto, accountè un campo ed balanceè un metodo. Ecco come i sistemi bancari sono effettivamente implementati e come il sistema bancario ha effettivamente funzionato prima dei computer.
Jörg W Mittag,

@ JörgWMittag: vale la pena pubblicare questa storia di ammonimento come risposta; che queste sono linee guida generali e che in alcuni rari casi possono portare a una cattiva decomposizione.
smci,
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.