Una classe dovrebbe entrare nel pacchetto che lo riguarda?

2
<?= $vars['title'] ?>

Ad esempio, se stessimo scrivendo una libreria da zero e avessimo File , FileHandle , DirHandle e FileSystem classi, ognuno di questi andrebbe all'interno di un pacchetto / spazio dei nomi chiamato file ? O uno chiamato filesystem ? O os o fs ? E se uno dei primi due, sarebbe un problema che abbiamo avuto file::File ? So che almeno in Python ci sono pacchetti strutturati in questo modo. Ma sembra un po 'brutto avere il nome della classe all'interno del pacchetto con lo stesso nome.

Un'alternativa sarebbe mettere la classe allo stesso livello di gerarchia del pacchetto, quindi potresti avere:

class File {
    getFileSystem () : FileSystem
    getGroupId () : int
    getSize () : int
    ...
}

// functions which don't need to know the internals of the File class
file::putContents
file::getContents
file::readLine
file::truncate

Ma poi hai la domanda di ... metti qualcosa come FileHandle allo stesso livello di File , o lo metti nel pacchetto file ? E se quest'ultimo, usi file::FileHandle o semplicemente file::Handle ? Che dire delle directory? Faresti file::DirHandle ? O tutto dovrebbe essere in un pacchetto os ?

Credo che sto cercando di conciliare l'idea di raggruppare concetti correlati in pacchetti gerarchici e di mantenere i nomi sensibili, descrittivi e non ridondanti.

Una possibile risposta a ciò che ho considerato è che i pacchetti dovrebbero essere utilizzati solo dove tutto ciò che potrebbe essere incluso nel pacchetto potrebbe avere il nome del pacchetto nel suo nome. Ad esempio, inserire una classe Directory nel pacchetto file non sarebbe corretto, dal momento che non diresti DirectoryFile (o almeno, di solito). Per contrasto, per qualcosa come Google Maps, avrebbe senso inserire elementi su indicatori e mappe di Google Maps in un pacchetto chiamato google::maps:: . Allo stesso modo, un pacchetto chiamato mysql avrebbe senso.

Quindi i pacchetti sono davvero perfetti solo per aziende e prodotti, non per concetti? O sto cercando di raggruppare concetti a un livello troppo alto? Ci sono delle guide di stile per questo genere di cose?

    
posta AmadeusDrZaius 12.10.2015 - 03:00
fonte

1 risposta

1

I pacchetti sono strumenti. Se ti ritrovi a sudare i dettagli, chiedi a te stesso che cosa stai veramente realizzando quando suddividi o raggruppa le tue lezioni.

  • alcune lingue, ad es. java ha speciali regole di scoping e controllo degli accessi per le classi che risiedono nello stesso pacchetto. In questi casi, non combattere o modificare il concetto nativo della lingua su cosa sia un pacchetto. Se desideri i diritti di accesso tra due classi, inseriscili nello stesso pacchetto. Se non hai motivo di sospettare che due classi avranno bisogno di questi privilegi, separali.
  • Alcune lingue offrono un vantaggio ergonomico quando alcune classi tendono ad essere incluse insieme se si trovano nello stesso pacchetto. Ancora una volta, non combattere la lingua. Usa lo strumento nel modo in cui è destinato a essere usato. Se la classe A deve essere importata logicamente ogni volta che si importa la classe B , inserirli nello stesso pacchetto. Se non lo fanno, separali per evitare scontri futuri.
  • Se sei in una base di codice di dimensioni significative e non c'è alcun motivo di molto convincente per cambiare, sii coerente con l'organizzazione esistente.
  • Altrimenti parliamo di estetica e leggibilità umana. Chiedete a un collega quale pacchetto lui o lei guarderebbe prima per la vostra classe ed è lì che dovrebbe andare. Suddividi fino al punto che puoi esaminare visivamente le classi di un pacchetto, smettere di suddividerlo prima che i tuoi colleghi non possano immediatamente indovinare (correttamente) dove si trovano.
  • Se non sei ancora sicuro, vai al punto in cui se è sbagliato, puoi correggerlo rapidamente, quindi andare avanti .
risposta data 12.10.2015 - 09:11
fonte

Leggi altre domande sui tag