2009-11-26 9 views
5

Sto progettando uno spazio dei nomi per contenere un set di classi che gestirà le attività relative a utente per diverse applicazioni diverse. (Log-in, l'autenticazione, ecc)Una classe dovrebbe avere lo stesso nome dello spazio dei nomi?

Il problema è lo spazio dei nomi si chiamerà Fusion.User ma poi si richiede una classe in quel namespace che ha senso per chiamare User.

Si dovrebbe avere una classe con lo stesso nome dello spazio dei nomi? O sto prendendo l'approccio sbagliato qui?

+0

possibile duplicato di [Come evitare di avere lo stesso nome per una classe ed è spazio dei nomi, come ad esempio Technology.Technology?](http://stackoverflow.com/questions/1158092/ how-to-avoid-have-the-same-name-for-a-class-and-its-namespace-such-as-techno) – nawfal

risposta

1

Avere una classe denominata nello stesso modo dello spazio dei nomi (pacchetto) può portare a pensare che la classe sia centrale per il pacchetto. Ma se ottengo correttamente l'utente è solo un oggetto di dati nel tuo caso.

Per quanto vedo che hai 2 opzioni:

  1. Nome spazio il proprio nome in modo diverso ad esempio Fusion.Security
  2. Utilizzare il suffisso per il nome della classe che indica il suo scopo, ad es. UserDTO, UserAction ecc
+0

Mi piace il suggerimento 'Fusion.Security' - forse il mio pensiero era troppo stretto –

0

Probabilmente chiamerei lo spazio dei nomi "usertasks" per evitare qualsiasi confusione. Dovrai qualificare la classe interna usando regolarmente lo spazio dei nomi per evitare di confondere il compilatore.

1

Lo spazio dei nomi è Fusion.User
Classe Nome completo sarebbe Fusion.User.User

Si tratta di una buona pratica per tenerli diverso perché

  1. Evita confusione allo sviluppatore
  2. Sembra anche brutto in alcuni casi come qui stiamo usando due utenti.

    utilizzando Fusion;
    namespace xyz {
    prova public class
    {
    User.User UserObject {get; set;}}

    }
    Così l'opzione migliore sarebbe quella di utilizzare diversi nomi

1

Ci sono casi in cui utilizzando il lo stesso nome causerà problemi. Uno che salta immediatamente in mente è quando si consuma un servizio WCF. Quando l'ho fatto di recente in una classe chiamata "someBehaviour" nello spazio dei nomi "companyName.someBehaviour" per consumare "MyService", il compilatore mi ha accusato dicendo che MyService non esisteva all'interno dello spazio dei nomi di Behaviour. Cambiare il nome della classe in qualcosa di diverso (e molto più utile) ha risolto il problema e mi ha permesso di compilare l'assemblea.