Avatar billede playmo Nybegynder
23. august 2003 - 20:10 Der er 14 kommentarer og
1 løsning

OOAD til EER

Jeg har et klassediagram oprettet efter OOAD's principper. I dette klassediagram er der et trinvist rollemønster. Dette mønster ønsker jeg at "mappe" til EER. Hvorledes gøres dette? Nogen gode forlag?

Et udsnit af mønsteret kan ses her http://frip.dk/playmo/rolle.gif

Jeg har en ide om at lave en entity for alle klasserne, denne entity vil så komme til at indeholde alle attributterne, hvilket kommer til at give en masse null attributter når klassen ikke er i den aktive tilstand. Dette må kunne gøres smartere... men hvordan?
Avatar billede arne_v Ekspert
23. august 2003 - 22:28 #1
Normalt vil man oprette en tabel per instantierbar klasse (per ikke-abstrakt
klasse).
Avatar billede playmo Nybegynder
24. august 2003 - 15:15 #2
Men hvordan håndterer man så at klassen skifter tilstand fx fra eksemplet tilbud til ordre??
Avatar billede arne_v Ekspert
24. august 2003 - 15:29 #3
Det er en grundregel for objektorienteret design, at et objekt
aldrig kan skifte klasse.

Men jeg formoder at du tænker på noget a la State Pattern !?

Jeg er ikke i tvivl om at hver state skal have sin egen tabel.

Og hvis konteksten også har sin egen tabel. Hvis kontekst tabellen har
de attributter der er fælles for alle states. Og state tabellerne har
de specifikke attributter der addes i den state. Og state tabellerne
har en foreign key til kontekst stabellen.

Så skulle der ikke være redundante data.

Rent praktisk vil din applikation måske performe bedre med en state
attribut. Men fra en strengte teoretisk synsvinkel er den overflødig.
Avatar billede playmo Nybegynder
24. august 2003 - 16:07 #4
Det du siger om kontekstklassen og hver klasse med hver deres tabel minder lidt om en disjoint nedarvning..

Det kan ikke gøres på den måde eller hva?
Avatar billede arne_v Ekspert
24. august 2003 - 16:21 #5
Nu tabte du mig.
Avatar billede playmo Nybegynder
24. august 2003 - 16:34 #6
Det er jeg ked af... :)

Det jeg mente var, at din "lange" kommentars løsning med states, minder om en almindelig disjoint nedarvning. DVS en arvning, hvor kontekstklassen, superklassen, kun kan være én af subklasserne (kun kan være = disjoint). Deraf, salg kan kun være enten tilbud eller en ordre, men kan den så på et senere tidspunkt "skifte" fra tilbud til ordre? Ved du det?
Avatar billede playmo Nybegynder
24. august 2003 - 16:34 #7
By the way, du har tjent dine point for længe siden :)
Avatar billede arne_v Ekspert
24. august 2003 - 16:58 #8
I state pattern arver state klasserne ikke fra kontekst klassen.
Kontekst klassen indeholder et interface/abstrakt klasse, som state
klasserne implementerer/arver fra.
Avatar billede arne_v Ekspert
24. august 2003 - 17:03 #9
Som jeg ser problemet så tilføjes der oplysninger hele tiden.

Grund data oprettes i konrtekst tabellen.

Når tilbudet afsendes så tilføjes der en record i tilbuds tabellen med dato
for tilbud etc..

Når kunden afgiver ordre så tilføjes der en record i ordre tabellen
med dato for ordre etc..

Når varen leveres så tilføjes der en record i leveret tabellen
med dato for levering etc..

[tilsvarende med fakturering og betaling]

Så jeg syne sikke at det ligner disjoint arv.
Avatar billede playmo Nybegynder
24. august 2003 - 17:08 #10
Korrekt, der afsendes et tilbud, dette godkendes og bliver derfor til en ordre, derefter evt. leveres det.. etc...

disjoint er altså ikke løsningen.. så for at få det hele på plads, hvad mener du så skal gøres? (for lige at få det hele på plads. :-) )
Avatar billede arne_v Ekspert
24. august 2003 - 17:19 #11
en basis tabel
en tilbud tabel med FK til basis tabel
en ordre tabel med FK til basis tabel
en leveret tabel med FK til basis tabel
Avatar billede arne_v Ekspert
24. august 2003 - 17:20 #12
strenget taget er det vel ikke et state pattern men snarere lang arve kæde:

basis<-tilbud<-ordre<-leveret

hvor der bliver tilføjet data hele tiden.
Avatar billede arne_v Ekspert
24. august 2003 - 17:21 #13
State pattern ville komme ind hvis man skulle modelere egenskaberne,
men i databasen er det jo kun data.

Så I koden skulle det nok stadigvæk være State Pattern.
Avatar billede playmo Nybegynder
24. august 2003 - 17:34 #14
Ok, jeg siger mange tak for hjælpen. Jeg vil se om det kan løse mit problem.. :)
Avatar billede arne_v Ekspert
24. august 2003 - 17:37 #15
OO & RDBMS er ikke altid lige nemt at få til at gå op i en højere enhed
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
Computerworld tilbyder specialiserede kurser i database-management

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