01. februar 2005 - 21:38Der er
38 kommentarer og 2 løsninger
Oprettelse af objekt: Mest optimale placering?
Hej,
jeg har et spørgsmål angående oprettelse af objekter i min controller klasse.
Klassen indeholder 117 metoder, og de skal alle anvende et dataset og de skal alle sammen oprette et objekt af een af klasserne fra applikationslogik laget.
Skeletet er som følger:
public class ControllerClass { public DataSet Metode1() { DataSet ds = new DataSet(); Kunde kunde = new Kunde(); ds = kunde.EnMetode(); }
public DataSet Metode2() { DataSet ds = new DataSet(); Kunde kunde = new Kunde(); ds = kunde.EnAndenMetode(); } }
Og sådan fortsætter det dernedaf. Som det fremgår oprettes der i hver funktion et nyt objekt af DataSet og Kunde. Jeg tænker, at jeg med fordel kan lave en konstruktør, og så bare placere dem der, dvs
public ControllerClass() { DataSet ds = new DataSet(); Kunde kunde = new Kunde(); }
Jeg har også forsøgt med:
public class ControllerClass { DataSet ds = new DataSet(); Kunde kunde = new Kunde();
public DataSet Metode1() { ds = kunde.EnMetode(); }
public DataSet Metode2() { ds = kunde.EnAndenMetode(); } }
Og det virker også.
Er det lige meget, hvilken af de tre modeller man anvender? Alle løsninger fungerer kodemæssigt, men hvilken måde bør man gøre det på?
Og så et tillægsspørgsmål: Når man opretter et nyt DataSet skriver jeg DataSet ds = new DataSet();
Men når fx man opretter en integer skriver man int tal;
og ikke int tal = new int();
Hvornår ved man, om man skal lave en blabla test = new blabla();
I lang tid har samarbejdsbranchen fokuseret på at forbedre enhedsfunktioner – bedre kameraer, klarere lyd og smartere software. Men den virkelige forvandling handler ikke om funktioner.
>> Er det en god ide at sende DataSet fra data lag gennem applikations lag ud til præsentations lag ?
Det tror jeg måske du bedre kan svare på. Det jeg anvender DataSet'et til er for at fylde en dropdownliste eller fylde et TreeView eller et DataGrid osv som skal vises til brugeren.
Men fordi jeg ser et DataSet som en in memory data struktur som 1:1 afspejler tabel strukturen i databasen. Og derved for du en tæt kobling mellem dit præsentations lag og tabel struktur i databasen.
jeg vil også mene at DataSet bør man holde sig fra at bruge så snart du kommer mere end 2 skridt væk fra databasen (Stol aldrig på en kvinde der er mere end 3 meter fra køkkenet - det samme kan overføres til dataset og database :P). Lav istedet nogle typestærke objecter!
Kan også kun give arne ret i dit kludder med at oprette en masse objecter der aldrig bliver brugt.
Og ang. int, så skyldes det at der er nogle typer der har implicitte konstruktører:
int i = 5; int i = new Int(5);
Det skulle gerne give det samme når det compiles.
Du skriver at man opretter en int ved at skrive
int i;
nej, det gør man ikke. Man opretter en int-variabel, men den peger endnu ikke på noget.
arne>> vi har vist haft den diskussion en gang før :)
Ja, en int har faktisk en værdi med det samme, den behøves ikke at oprettes først som normale objecter.
Hvordan var det... hvis man lavede den som static kunne man godt få compilet et program der udskrev værdien af i som 0 selvom man ikke selv havde sat den til noget.
public class MyData { private string s; public MyData() { s = ""; } public MyData(string s) { this.s = s; } public string S { get { return s; } set { s = value; } } }
public class MyCollection : CollectionBase { public MyData this[int index] { get { return (MyData)List[index]; } } public int Add(MyData value) { return List.Add(value); } }
class MainClass { public static void Main(string[] args) { MyCollection mycol = new MyCollection(); mycol.Add(new MyData("A")); mycol.Add(new MyData("BB")); mycol.Add(new MyData("CCC")); for(int i = 0; i < mycol.Count; i++) { Console.WriteLine(mycol[i].S); } } }
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.