Applicazione n-tier ho letto miiiiiille esempi e ci ho provato ... mi ...

martedì 27 marzo 2007 - 23.12

squilibrio Profilo | Expert

Ho provato a gestire una semplice tabella del DB con una logica n-tier


WebUtente.cs

using System;
using System.Data;

public class WebUtente
{
private string _nome;
private string _cognome;
private string _mail;
private string _password;

public string Nome
{
get { return _nome; }
set { _nome = value; }
}

public string Cognome
{
get { return _cognome; }
set { _cognome = value; }
}

public string Mail
{
get { return _mail; }
set { _mail = value; }
}

public string Password
{
get { return _password; }
set { _password = value; }
}

}



WebUtentiCollection.cs

using System;
using System.Collections.Generic;
using System.Text;

public class WebUtentiCollection : List<WebUtente>
{


}




WebUtentiManager.cs

using System;
using System.Collections.Generic;
using System.Text;

public class WebUtentiManager
{
public WebUtentiCollection GetAllWebUtenti()
{
return GetAllWebUtenti(false);
}

public WebUtentiCollection GetAllWebUtenti(bool getUtenti)
{
// collection di utenti, dal DataLayer
WebUtentiData data = new WebUtentiData();
WebUtentiCollection utenti = data.GetAll();

//Perchè per accedere agli elementi della collection devo fare [i].NomeCampo?
//utenti[i].

return utenti;
}
}



WebUtentiData.cs

public class WebUtentiData
{
public WebUtentiCollection GetAll()
{
SqlHelper h = new SqlHelper();

WebUtentiCollection utenti = new WebUtentiCollection();
WebUtente utente;

using (SqlDataReader dr = h.ExecuteQuery("SELECT * FROM titles"))
{
string nomeOrdinal = dr.GetOrdinal("nome");
string cognomeOrdinal = dr.GetOrdinal("cognome");
string mailOrdinal = dr.GetOrdinal("mail");

while (dr.Read())
{
utente = new WebUtente();
utente.Nome = dr.GetString(nomeOrdinal);
utente.Cognome = dr.GetString(cognomeOrdinal);
utente.Mail = dr.GetString(mailOrdinal);

utenti.Add(utente);
}
}

return utenti;
}
}





I miei dubbi sono i seguenti (sperando cmq che la logica che ho creato, e postato sopra, sia corretta)

1) nell'esempio viene usato un oggetto SqlHelper, dove posso trovare il codice di questo oggetto?

2) la mia collection è vuota ....


public class WebUtentiCollection : List<WebUtente>
{


}


perchè?? cosa dovrei inserire qui?? (oppure va bene cosi???)

3) nella classe utentiManager, perchè per accedere agli elementi della collection devo fare [i].NomeCampo
(inoltre è giusta la collection come l'ho creata io (ovvero vuota)??? vedi punto 2.)

4) cosa devo inserire nella classe WebUtentiManager?? Se nella classe Data gestisco le interrogazioni al DB, nel Manager dovrei gestire la logica di business .... a livello teorico mi è chiaro, ma a livello pratico non saprei cosa gestire in questa classe, potreste farmi un semplice esempio pratico di implementazione all'interno del manager?

5) più che un dubbio è un consiglio: l'uso del datareader per accedere ad una SELECT * è corretto?? Oppure esiste una soluzione piu "performante" per records di grandi dimensioni?


Grazie infinite per la pazienza e per l'aiuto!

GattoNero Profilo | Newbie

>I miei dubbi sono i seguenti (sperando cmq che la logica che
>ho creato, e postato sopra, sia corretta)
>
>1) nell'esempio viene usato un oggetto SqlHelper, dove posso
>trovare il codice di questo oggetto?
>
>2) la mia collection è vuota ....
>
>
>public class WebUtentiCollection : List<WebUtente>
>{
>
>
>}
>
>
Beh la tua classe è derivata da una strong-typed List quindi eredita proprietà/funzioni ecc... dalla classe "padre"... volendo se necessario potresti customizzarla ma dipende dalle tue necessità

>
>3) nella classe utentiManager, perchè per accedere agli elementi
>della collection devo fare [i].NomeCampo
>(inoltre è giusta la collection come l'ho creata io (ovvero vuota)???
>vedi punto 2.)
>

Credo tu intenda collezzione[i].NomeCampo... anche se + che una collezione è una lista... ci sono piccole differenze di implementazione....

>4) cosa devo inserire nella classe WebUtentiManager?? Se nella
>classe Data gestisco le interrogazioni al DB, nel Manager dovrei
>gestire la logica di business .... a livello teorico mi è chiaro,
>ma a livello pratico non saprei cosa gestire in questa classe,
>potreste farmi un semplice esempio pratico di implementazione
>all'interno del manager?

Oddio dipende genericamente dal tipo di applicazione... credo che comunque si tratti di gestione degli oggetti (utenti ecc...) e magari delle sessioni (se webapp) ossia uno "strato" che ti permetta di eseguire dele chiamate a funzioni standard della data-logic (tua ovviamente) in modo che un eventuale cambio/upgrade del DB non ti obblighi a riscrivere tutto ma solo la parte di data-logic..

>5) più che un dubbio è un consiglio: l'uso del datareader per
>accedere ad una SELECT * è corretto?? Oppure esiste una soluzione
>piu "performante" per records di grandi dimensioni?
>
Su questa cedo il passo... credo che comunque dipenda dal DB e dalla mole di dati...
ciao
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2024
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5