Korrekt klasse designet kode
Hejsa.Jeg er lidt i tvivl om hvad der er den mest hensigtsmæssige fremgangmåde for et stykke kode.
Min kode virker uanset hvad, men performance vs. fleksibilitet ville jeg gerne høre jeres mening om.
F.eks. :
public static class customers
{
public class customer
{
private int _id;
private string _lastname;
public int id
{
get
{
return _id;
}
set
{
_id = value;
}
}
public string lastname
{
get
{
return _lastname;
}
set
{
_lastname = value;
}
}
public static customer GetById(int Id)
{
customer result = new customer();
SqlDataReader Sqdr = ....
while (Sqdr.Read())
{
result.id = Convert.Toint32(Sqdr["id"]);
result.lastname = Sqdr["lastname"].ToString();
}
Sqdr.close();
}
public static HashTable GetAllCustomers
{
get
{
HashTable result = new HashTable();
SqlDataReader Sqdr = ....
while (Sqdr.read())
{
customer c = customers.getbyid(Convert.toint32(Sqdr["id"]));
result.add(key, c);
}
Sqdr.Close();
return result;
}
}
Overstående er selvfølgelig strippet vildt meget, men det giver jer nok en ide om hvordan min kode ser ud.
Det som jeg er i tvivl om er når jeg laver min liste over f.eks. alle mine kunder (hashtable).
Her selecter jeg kun id feltet fra Sql databasen lige nu, og lader så metoden, som retunerer en customer lave sin egen forespørgelse ned i sql databasen hvor den selecter alt relevant for at generere kunde objektet.
Men jeg er i tvivl omkring om det er performance mæssigt hurtigere at selecte alle informationerne omkring kunden direkte i den metode, som generer hashtabellen for at spare et sql kald.
Det som jeg bare synes er træls ved at gøre det, er at hvis jeg laver om på database strukturen, så skal jeg også rette i 2 metoder, i stedet for at kunne nøjes med kun at rette i GetById metoden.
Min database er ikke så stor endnu, men når den engang kommer til at indeholder f.eks. 20.000 kunder, så er det 20.000 SQL kald jeg sparer for at hente en hashtable over alle kunder ved at skrive lidt ekstra kode.
Hvad ville i gøre? Ville i skrive kode som skal rettes flere steder eller ville i vægte performance højere? Og hvor stor er forskellen reelt? Er det ½ sek vi snakker om ved 20.000 kunder eller er det 10 sek forskel?