Stessa classe e nome dello spazio dei nomi

4

Ho un problema su come nominare i miei spazi dei nomi e le mie classi. Ho già capito che non dovrebbero avere entrambi lo stesso nome, poiché causano tutti i tipi di problemi. Il problema più notevole per me è che ho bisogno di qualificare pienamente la classe o fare un alias. Ecco cosa ho:

Model.DataSource.DataSource
Model.DataSource.FileSystemDataSource
Model.DataSource.JsonDataSource
Model.DataSource.XmlDataSource
Model.DataSource.DataSourceConstraints
Model.DataSource.DataSourceStorage
Model.DataSource.DataTable
... // more others

Model.QueryStorage.QueryStorage
Model.QueryStorage.FileSystemQueryStorage
... // more others

Model.Project.Project
Model.Project.ProjectFactory

Come puoi vedere, ho 3 classi che hanno lo stesso nome dei pacchetti in cui si trovano. Due di esse sono interfacce, quindi potrei prendere in considerazione il loro prefisso con I , ma in realtà non mi piace questa convenzione. Ho anche ascoltato la proposta di nominare un pacchetto come ProjectUtils o qualcosa del genere. Ma penso che questi non siano utils, sono oggetti di dominio legit. Potrei fare alias, con using , ma qual è un nome migliore per Project rispetto a Project ?

Non riesco a trovare un modo per avere nomi ragionevoli per le mie classi senza duplicati.

    
posta Łukasz 12.06.2016 - 10:42
fonte

3 risposte

8

Hai ragione a non nominare lo spazio dei nomi come un tipo che contiene. Penso che ci siano diversi approcci che puoi usare:

  • Pluralize: Model.DataSources.DataSource

    Funziona particolarmente bene se lo scopo principale dello spazio dei nomi è di contenere tipi che ereditano dallo stesso tipo di base o implementano la stessa interfaccia.

  • Accorcia: Model.QueryStorage

    Se uno spazio dei nomi contiene solo un piccolo numero di tipi, forse non hai proprio bisogno di quel namespace.

  • Rendi impresa: Model.ProjectSystem.Project

    Questo può funzionare soprattutto per le funzionalità che sono parte importante del tuo prodotto, quindi meritano il loro nome.

Two of them are interfaces so I could consider prefixing them with I but I really don't like this convention.

Dovresti davvero, se il tuo codice è usato da altri (cioè è una libreria) o se non vuoi confondere i nuovi arrivati con il tuo codice.

    
risposta data 12.06.2016 - 15:09
fonte
4

Le linee guida di progettazione .NET richiedono il prefisso I per le interfacce. Raccomanda la forma singolare per le classi (suffisso Collection per tutto ciò che implementa IEnumerable ) e la forma plurale per gli spazi dei nomi.

    
risposta data 12.06.2016 - 11:56
fonte
-1

È necessario prefisso i nomi dei nomi dei nomi con il nome di una società per impedire che lo spazio dei nomi di società diverse abbia lo stesso nome.

Esempi:

Fabrikam.Math
Litware.Security

alla fine il tuo spazio dei nomi deve avere questa struttura:

<Company>.(<Product>|<Technology>)[.<Feature>][.<Subnamespace>]
    
risposta data 12.06.2016 - 11:33
fonte

Leggi altre domande sui tag