Avatar billede dehaas Nybegynder
27. august 2007 - 18:42 Der er 7 kommentarer og
1 løsning

Håndtering af data (arkitektur)

Hej,

Jeg er i øjeblikket i gang med en større applikation, og er i den forbindelse ved at blive en smule frustreret over planlægningen af min arkitektur. I den forbindelse har jeg nogle spørgsmål med hensyn til access af data.

Jeg har et objekt som blandt andet indeholder en property, med en liste af sig selv (hierarki). Dette objekt indeholder blandt andet data som skal benyttes til renderingen af hver enkelt webside, og vil dermed meget ofte blive tilgået.

Mit problem er nu hvorvidt jeg bør indlæse alt hierarkisk data i dette objekt når jeg forsøger at hente det gennem min ’DataProvider’, eller om denne egenskab burde kalde en anden funktion i dataprovideren, for at hente den nødvendige data ’on-demand’. Der vil komme scenarier hvor jeg har brug for disse data i objektet, ligeledes vil der også være scenarier hvor dette ikke vil være nødvendigt.

Næste ting er denne ’DataProvider’. (Vi snakker om en datamængde på mellem 20kb og måske optil 100kb) Bør denne læse på disken hver gang den bliver bedt om at hente noget data, eller vil det være forsvarligt, at cache alt dette data ved Application_Start og derefter hente data herfra?

Næst sidste spørgsmål går på designet af klasserne i min ’DataProvider’. Bør jeg lave klasser med en masse statiske funktioner (GetObject(), UpdateObject() etc.), eller vil det være smartere at have en instans af en DataProvider-klasse, og kalde funktionerne derfra?

Til sidst kommer endnu et klasse-design spørgsmål. Bør signaturen til fx en update eller insert-funktion være:

Insert(Int ID, String Param1, String Param2, String Param3)

Eller

Insert(Object Test)?

Jeg håber i kan hjælpe mig med mine problemer. Jeg bliver nødt til at have dette på plads før jeg går videre, og min hjerne bliver sur på min når jeg tænker mere over det :)
Avatar billede arne_v Ekspert
27. august 2007 - 18:49 #1
re foerste spoergsmaal

Du maa enten vurdere hvad der er hurtigst eller lave noget test.

Bemaerk at teknikken kaldet "lazy loading" er alment kendt. Og visse ORM software
kan faktisk slaa det til og fra per klasse via en konfigurations fil.
Avatar billede arne_v Ekspert
27. august 2007 - 18:52 #2
re naeste spoergsmaal

20-100 KB er jo meget lille data, saa stoerrelsen forhindrer ikke brug af cache.

Der er heller ingen konsistens problemer ved at cache readonly data, saa er det
readonly boer du absolut cache.

For data der opdateres er der potentielle konsistens problemer. Specielt hvis du
vil skalere applikationen horisontalt - altsaa paa flere servere.

Her skal du taenke dig godt om inden du gaar igang med at cache.

Igen vil mange ORM software have indbygget cache muligheder.
Avatar billede arne_v Ekspert
27. august 2007 - 18:57 #3
re naest sidste spoergsmaal

Static metoder er OK, men du boer ikke have static fields. D.v.s. bruger de static
metoder kun lokale variable, saa gaar det.

Men brug af instans og ikke-static metoder giver mulighed for at bruge interfaces
og udskifte implementationen uden at paavirke de oevre lag, saa jeg vil anbefale
den loesning alligevel.
Avatar billede arne_v Ekspert
27. august 2007 - 19:02 #4
re sidste spoergsmaal

Insert(Object Test)
Avatar billede dehaas Nybegynder
28. august 2007 - 08:47 #5
Mange tak for dine svar.

Til #4, Hvis jeg giver et objekt til fuktionen, i stedet for en stribe parametre, hvordan bør jeg så håndtere ID’er?

I forbindelse med implementeringen af data-access-klasser har jeg et supplerende spørgsmål. Hvis jeg nu laver et interface til med Get, Inser etc. funktioner, vil det så være smart at implementere dette interface på alle lagene gennem arkitekturen (BLL, DAL, etc.), eller er der noget jeg har overset?
Avatar billede arne_v Ekspert
28. august 2007 - 18:17 #6
Hvad specielt er der med id'er ?

Din kode boer ikke tillade at man aendrer id'er.

Hvis du bruger auto increment for id'er sakl det haandteres - det kan ORM software ogsaa goere.

Hvis BLL kun er ren passthrough til DAL, saa kan man jo spoerge om BLL har nogen
eksistens berettigelse.

Jeg vil betragte det som normalt at BLL og DAL har forskellige interfaces.
Avatar billede dehaas Nybegynder
31. august 2007 - 23:10 #7
Tænkte netop på auto increment på ID'er, men det kan der nok findes en løsning på.

Mange tak for hjælpen. Tror jeg har fået svar på alle mine problemer nu, så smid endelig et svar :)
Avatar billede arne_v Ekspert
31. august 2007 - 23:21 #8
svar
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