10 messaggi dal 23 febbraio 2011
In VB.NET esistono i moduli di codice che servono a raccogliere, per esempio, funzioni generali. In C# non esiste questo concetto di moduli ma solo classi. Qual è il punto più indicato, all'interno di un'applicazione tre-livelli, dove sistemare una classe generica .cs per le funzioni generali ? Ho visto che in .NET 4 (provenendo dal 2.0) le cartelle hanno un loro spazio nomi. Esempio: /moduli/funzioni.cs all'interno della suddetta classe diventerebbe "nomeapp.moduli". E' corretto o va modificato applicando un solo spazio nomi per tutta l'applicazione ?
Modificato da StefanoM il 02 gennaio 2012 07.38 -
11.886 messaggi dal 09 febbraio 2002
Contributi
Ciao,

StefanoM ha scritto:

In C# non esiste questo concetto di moduli ma solo classi

E' vero, non si chiamano moduli ma classi statiche. A parte la differenza nel nome, assolvono lo stesso compito.

StefanoM ha scritto:

Ho visto che in .NET 4 (provenendo dal 2.0) le cartelle hanno un loro spazio nomi.

Sì, è una buona pratica di sviluppo quella di raggruppare classi in namespace, allo stesso modo in cui i file sorgenti che le contengono sono raggruppati in cartelle. Non sei obbligato a rispettare questa convenzione ma, di certo, ti aiuta ad organizzare meglio il codice e a renderlo un pochino più accessibile a chi lo guarda per la prima volta.

StefanoM ha scritto:

E' corretto o va modificato applicando un solo spazio nomi per tutta l'applicazione ?


Non c'è corretto o sbagliato... i namespace sono uno strumento che risponde ad una tua necessità. Se l'applicazione diventa molto grande, sentirai il bisogno di creare dei "comparti". Ad esempio, dato che hai un'applicazione a tre livelli potresti, al minimo, inserire le classi che si occupano dell'accesso ai dati e quelle della logica business in due namespace propri (TuoNamespace.DAL e TuoNamespace.BLL).


Qual è il punto più indicato, all'interno di un'applicazione tre-livelli, dove sistemare una classe generica .cs per le funzioni generali ?

Dipende... se sono funzioni di utilità generale (anche chiamate helper methods) che vengono usate dal livello business, crea una classe statica con metodi statici in un file .cs che posizionerai all'interno dello stesso namespace/cartella del livello business.
Considera di implementare quelle funzioni, quando possibile, come extension methods (<- ricerca questo argomento, semplificherà il modo in cui invocherai le tue funzioni generali).

Invece, se non si tratta solo di funzioni ma di intere classi, allora potrebbe aver senso dedicare un intero namespace a questo scopo. Potresti dunque inserirle all'interno di TuoNamespace.Utility.

ciao

Enjoy learning and just keep making
10 messaggi dal 23 febbraio 2011
Allora, avevo già creato una classe statica che raccoglie le funzioni sotto forma di metodi statici pubblici da richiamare nelle classi di pagina (quindi la classe prenderà posto nella DLL dell'applicazione web, non nei componenti middle-tier). Pur dichiarando tutto pubblico e statico però non riesco a vedere la classe nell'intellisense.
Ripeto, si tratta di funzioni generali che mi serve richiamare a livello di pagina aspx e controllo utente ascx, però stranamente sono invisibili.
11.886 messaggi dal 09 febbraio 2002
Contributi
StefanoM ha scritto:

Pur dichiarando tutto pubblico e statico però non riesco a vedere la classe nell'intellisense.

ok, prova a digitare iniziando dal nome del namespace. Ti faccio un esempio: ho definito questa classe "Utility" nel namespace "MyApplication"
namespace MyApplication
{
    public static class Utility
    {
        public static int Moltiplica(int operando1, int operando2)
        {
            return operando1 * operando2;
        }
    }
}
Poi, da qualsiasi punto dell'applicazione potrò invocare quel metodo statico scrivendo:
int risultato = MyApplication.Utility.Moltiplica(2, 3);
Prova. Dopo aver digitato MyApplication. l'intellisense dovrebbe mostrarti che al suo interno esiste una classe "Utility".

Poi, se in cima al codefile in cui sto digitando aggiungo la direttiva using MyApplication;, posso abbreviare così la chiamata al metodo:
int risultato = Utility.Moltiplica(2, 3);


ciao

Enjoy learning and just keep making
10 messaggi dal 23 febbraio 2011
Forse si tratta di un baco di VS2010. In pratica se creo da zero una nuova classe in una determinata cartella, allora questa diventa visibile. Precedentemente avevo provato a tagliare e incollare una classe.cs da una cartella ad un altra pur rinominando lo spazio nomi nel modo corretto ma risultava sempre invisibile. Ora ho semplicemente incollato i metodi statici nella nuova classe vuota ed è tutto perfettamente visibile...

Torna al forum | Feed RSS

ASPItalia.com non è responsabile per il contenuto dei messaggi presenti su questo servizio, non avendo nessun controllo sui messaggi postati nei propri forum, che rappresentano l'espressione del pensiero degli autori.