2 messaggi dal 29 luglio 2009
Ciao a tutti,

vorrei un parere/consiglio da voi su come ho deciso di strutturare la mia prossima applicazione. Sto iniziando infatti lo sviluppo di un sito ecommerce di grandi dimensioni che sarà realizzato in ASP.NET (HTML5 e CSS3) su .NET Framework 4.0. Io avrei deciso di creare una classica applicazione a tre livelli per cui avrò:

progetto USER_INTERFACE
(le pagine asp.net, questo progetto referenzia solo i progetti COMMON e BUSINESS_OBJECTS
progetto BUSINESS_OBJECTS(libreria di classi che gestirà la logica dello scambio di dati tra interfaccia utente e database, questo progetto referenzia solo i progetti COMMON e DATA_ACCESS)
progetto DATA_ACCESS (libreria di classi che si occuperanno delle operazioni CRUD sul DB, questo progetto referenzia solo il progetto COMMON)
progetto COMMON (libreira di classi che conterrà le classi di MAPPING delle tabelle del DB + altre funzioni di utilita)

Tutta l'applicazione utilizzarà ADO.NET quindi ad esempio, per quanto riguarda la gestione delle categorie dei prodotti avrò:

una tabella nel DB denominata "CATEGORIE":

ID_CATEGORIA (int)
ID_MACROCATEGORIA (int)
DESCRIZIONE (varchar)

una classe nel progetto COMMON denominata "CATEGORIA":

public class ENT_CATEGORIA
{
public int ID_CATEGORIA { get; set; }
public int ID_MACROCATEGORIA { get; set; }
public string DESCRIZIONE { get; set; }
}

una classe nel progetto BUSINESS_OBJECTS denominata "BO_CATEGORIE":

public class BO_CATEGORIE
{
public DataTable LEGGI_CATEGORIE()
{
DA_CATEGORIE categorie = new DA_CATEGORIE();
SqlConnection connection = new SqlConnection(Configurazione.StringaConnessioneSito());
connection.Open();
DataTable dtRitorno = categorie.LEGGI_CATEGORIE(connection, null);
connection.Close();
return dtRitorno;
}
}

una classe nel progetto DATA_ACCESS denominata "DA_CATEGORIE":

public class DA_CATEGORIE
{
public DataTable LEGGI_CATEGORIE(SqlConnection connection, SqlTransaction transaction)
{
SqlCommand command = new SqlCommand("SELECT * FROM CATEGORIE ORDER BY DESCRIZIONE", connection);
if (transaction != null)
{
command.Transaction = transaction;
}
SqlDataReader reader = command.ExecuteReader();
DataTable dt = new DataTable();
dt.Load(reader);
return dt;
}
}

Spero di essere stato chiaro e di non avervi annoiato troppo :-). Avete commenti o suggerimenti da darmi in merito?

Grazie mille per l'attenzione
ti consiglio di leggere questo articolo:

http://www.aspitalia.com/articoli/architettura/object-model.aspx

ciao marco

Chi parla senza modestia troverà difficile rendere buone le proprie parole.
Confucio

http://nostromo.spaces.live.com/default.aspx
2 messaggi dal 29 luglio 2009
ciao Marco,

grazie per la segnalazione dell'articolo. Ho appena finito di leggerlo. In effetti avevo già optato per EF e LINQ to Entities per creare i layer dell'applicazione (linq to sql come scritto nell'articolo andrà a morire) anche perchè l'anno scorso mi sono studiato EF e con un paio di colleghi abbiamo realizzato una piccola applicazione basata su di esso per prenderci la mano. Purtroppo però sia io che gli altri colleghi non ne abbiamo tratto una buona impressione (forse a causa della nostra mancanza di esperienza o forse perchè EF è ancora "giovane") lo abbiamo ritenuto un po' troppo macchinoso da utilizzare, abbiamo avuto molte difficoltà per fare alcune interrogazioni complesse al db, inoltre avevo letto un articolo che parlava di performance e EF ne usciva "distrutto". Per questo motivo ho deciso di utilizzare la struttura basata su entitià da me create e con i layer strutturati in quel modo. In effetti nell'esempio che ho riportato sotto ho mostrato solo le classi di lettura che ritornano un datatable e in cui la classe di mapping non viene utilizzata, avrei dovuto riportare l'esempio di scrittura, lettura e cancellazione di un solo record in cui per eseguire le singole operazioni deve essere valorizzata e passata agli strati sottostanti sempre la classe di mapping. Secondo te faccio male ad utilizzare una struttura del genere?

Grazie

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.