Il progetto che ha sollevato questa domanda è in C #, ma potrebbe essere applicato alla maggior parte delle lingue che utilizzano gli spazi dei nomi.
Ho letto molte cose sulle buone pratiche di denominazione:
-
"Non prefisso i nomi delle classi con il loro nome dello spazio dei nomi, creando solo duplicazioni inutili." (Smurf naming)
-
"Uno degli usi per gli spazi dei nomi è la separazione tra codice e collisioni di nomi. Usali in questo modo."
-
"Quando leggo il codice di un progetto e mi imbatto in un nome di classe, voglio sapere esattamente a quale classe si fa riferimento e non dover controllare quali spazi dei nomi sono stati importati."
Quello che non sono stato in grado di capire è il modo migliore per nominare le classi in spazi dei nomi che svolgono attività simili, ma sono completamente indipendenti l'una dall'altra.
Ad esempio, supponiamo di avere una libreria di codec audio. Il codice in ogni spazio dei nomi codec non dipende dagli altri, ma dipendono tutti da uno spazio dei nomi contenente codice generico comune.
Potrei avere lezioni come queste. (Non leggere troppo nei nomi, sono solo esempi.)
Vorbis codec:
Project.Vorbis.VorbisEncoder
Project.Vorbis.VorbisDecoder
Project.Vorbis.VorbisFrame
Project.Vorbis.VorbisChannel
Project.Vorbis.VorbisParameters
Codec ATRAC3 +:
Project.Atrac3P.Atrac3PEncoder
Project.Atrac3P.Atrac3PDecoder
Project.Atrac3P.Atrac3PFrame
Project.Atrac3P.Atrac3PChannel
Project.Atrac3P.Atrac3PParameters
codec IMA ADPCM:
Project.ImaAdpcm.ImaAdpcmEncoder
Project.ImaAdpcm.ImaAdpcmDecoder
Project.ImaAdpcm.ImaAdpcmFrame
Project.ImaAdpcm.ImaAdpcmChannel
Project.ImaAdpcm.ImaAdpcmParameters
Questo buon design è troppo ripetitivo? Non mi piace ripetere il nome del namespace nel nome della classe, ma non so se sia preferibile duplicare nomi di classi come questo:
Project.Vorbis.Encoder
Project.Atrac3P.Encoder
Project.ImaAdpcm.Encoder