Avatar billede cdull Nybegynder
07. oktober 2010 - 23:15 Der er 13 kommentarer og
2 løsninger

Populate object. Rigtig måde?

Hej.

Jeg har en class person

Og i den class har jeg nogle methods. En af dem er Populate som ud fra person.ID eller suppleret ID skal fylde person med data.

Jeg har en Data klasse med en static method som står for at udhente data fra min database ud fra et ID. Den fylder et object, og sender det tilbage til kalder. I det her tilfælde Populate()

Populate skal så fylde this som er person object med data.

Hvordan gør jeg det her bedst?

this.ID = objectReturned.ID;
this.BlaBla = objectReturned.BlaBla;

virker selvfølgeligt, men kan det gøres nemmere?
Noget i stil med this = objectReturned som jo ikke virker da this er read only.


Er det jeg prøver at forklare til at forstå? Og har i en løsning?
Søger den rigtige måde at gøre det.

Tak
Avatar billede arne_v Ekspert
08. oktober 2010 - 00:10 #1
Hvis du har en Person class og en PersonData class som beskrevet, så er det måden at gøre det på.

Men jeg ville overveje kun at have en Person class, droppe Populate metoden og så lade Data's metode returnere en Person.
Avatar billede cdull Nybegynder
08. oktober 2010 - 00:18 #2
Hvad er best practice ?

Jeg vil gerne lave det bedst muligt og lære noget undervejs.
Avatar billede arne_v Ekspert
08. oktober 2010 - 00:28 #3
At en klasse ikke selv ved hvordan den skal persisteres men at en anden klasse ved det.

Hvilket fører til den løsning som jeg foreslår til overvejelse.

Prøv også at kig lidt på hvordan NHibernate gør det.

Hvis det er godt nok til NHibernate, så er det godt nok til dig!
Avatar billede janus_007 Nybegynder
08. oktober 2010 - 09:17 #4
Hej cdull

Jeg forstår sagtens du vil lære det bedst muligt :)

Se her, som sker i Populate:
this.ID = objectReturned.ID;
this.BlaBla = objectReturned.BlaBla;

På den måde siger du at Populate dels skal kende til dit object Person og til dit dataobjekt. Jeg forstår godt tanken bag din opdeling, men den behøver du reelt ikke. Du kan lige så fint lade din Dataklasse returnere dit Person-objekt. Som arne også foreslår!

Ja ja.. bla bla.. så vil en masse argumentere for at Person ikke har nogen relevans ifht. data og datalaget kun skal behandle data og man ikke må binde noget fra bund imod top osv. Og pludselig er dit Person-objekt bundet fra data til service og det må du ikke brug et interface... Argumenterne er mange, men i virkeligheden kommer det an på hvordan man opfatter datalaget og i særdeleshed hvilken designarkitektur man vil følge. Det er en lang diskussion som ikke lige lader sig udspille her fredag morgen *GG*

Nok om det :)

En ting jeg måske lige kan nævne, istedet for:
this.ID = objectReturned.ID;
this.BlaBla = objectReturned.BlaBla;

Så i dit dataobject, det vil sikkert se sådan her ud:
public Person GetPersonById(int id)
{
...
}

Kan du gøre sådan her, hvis du vil lidt med videre fra 2.0

public Person GetPersonById(int id)
{
//some logic to retrieve data...
var result = ..... // as person data

return new Person(){Id = result.Id, Name = result.Name, Address = result.Address};
}

Skriv hvis du vil vide mere :)
Hyg dig
Avatar billede cdull Nybegynder
08. oktober 2010 - 09:31 #5
Hej Janus.

Tak for dit svar. Jeg har netop forsøgt at holde lagdelingen, men kan se at det give mig et ekstra led af vedligeholdelse.
Tilføjer jeg en property til min business class person, skal den også assignes i data laget, og også i min populate.
Det giver mening at fjerne populate, da jeg derved mindsker vedligeholdelse og at der er mindre chance for fejl.

ang. var result er jeg ikke helt med endnu.
Hvilken version er det fra? Kan du forklare det hurtigt?

Tak.
Avatar billede janus_007 Nybegynder
08. oktober 2010 - 12:40 #6
Hvilken version bruger du af C#?
Avatar billede cdull Nybegynder
08. oktober 2010 - 12:52 #7
Jeg sidder stadigvæk fast i 2.0 :)
Avatar billede janus_007 Nybegynder
08. oktober 2010 - 16:23 #8
Woot? Hvorfor? Skift til 3.5, du vil opleve at mange ting bliver nemmere.
Avatar billede arne_v Ekspert
09. oktober 2010 - 02:38 #9
Problemet med at Person er i BLL og Data er i DAL og at DAL ikke bør have afhængigheder af BLL kan løses på ihvertfald to måder:

1) Flyt Person til et DML som både BLL og DAL bruger.

Tænk:


PL    D
BLL  M
SAL  L


2) Ændre Data så den bruger generics, reflection, config filer og ikke behøver at kende Person.
Avatar billede arne_v Ekspert
09. oktober 2010 - 02:55 #10
Hm. Hvor blev det indlæg af?
Avatar billede arne_v Ekspert
09. oktober 2010 - 02:55 #11
Hm. Så kom det frem.
Avatar billede arne_v Ekspert
09. oktober 2010 - 02:55 #12
Der hvor der tsår SAL skal der naturligvis stå DAL.
Avatar billede cdull Nybegynder
10. oktober 2010 - 13:26 #13
Tak for svar begge to.

Jeg tror jeg vil kigge nærmere på DML. Og se om jeg kan gøre det bedre, så der er så få afhængigheder som muligt.

Jeg har fået en del ud af det her, så smid gerne et svar begge to.
Og så siger jeg mange tak.
Avatar billede arne_v Ekspert
10. oktober 2010 - 16:36 #14
svar
Avatar billede janus_007 Nybegynder
10. oktober 2010 - 18:34 #15
tiptop
Avatar billede Ny bruger Nybegynder

Din løsning...

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.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester