Hoe map je een entiteit uit
een ERD
naar een Java bean
(= Class)?
 | OO model met gemapte relaties |
Vorige week las u al de voorbereidende stap,
ERD relaties mappen naar variabelen in een Java bean.
Deze week het vervolg, mappen van de entiteiten in 5 stappen:
- Van optionaliteit naar specialisatie
- Analyseer top niveau methods
- Combineer classes
- Verwijder ballast
- Gebruik caching
1. Van optionaliteit naar specialisatie
Een optionaliteit
kan
duiden op een specialisatie.
Kijk naar eigenschappen als:
- attributen met namen als 'type', 'soort'
- optionele attributen
- optionele relaties, met name optionele one-to-one relaties.
Kijk of zo'n optionaliteit een eigenschap van een subclasse is,
die
tijdens de levenscyclus van een object niet meer verandert.
In het gegeven eenvoudige voorbeeld zijn geen optionele attributen aanwezig.
Maar Abonnement had bijvoorbeeld een
abonnementsType
kunnen hebben, met een optioneel
kortingspercentage
dat alleen geldt voor studenten.
In zo'n geval:
- Splits abonnement in de superclasse
Abonnement
en de subclasse
StudentenAbonnement .
- Verwijder het 'abonnementsType'.
Dit attribuut is niet meer nodig.
De class neemt de rol over.
- Het optionele attribuut
kortingspercentage
wordt een verplicht attribuut in het subtype
StudentenAbonnement .
2. Analyseer top niveau methods
In 99% van de gevallen biedt data analyse voldoende stabiliteit.
Theoretisch is het echter mogelijk dat een subclasse bestaansrecht heeft
uitsluitend vanwege afwijkende functionaliteit
die nog niet uit de data kant is gebleken.
Een overdaad aan conditionele processing
als ... dan ...
kan een ook aanwijzing zijn voor mogelijke subtypes.
Gebruik
polymorfisme
om een woud van IF statements uit te dunnen.
3. Combineer classes
 | Het resultaat: Geoptimaliseerd OO model |
Zoek naar
In het voorbeeld
- hoort Abonnement bij één Krant.
- Maar een Krant kent niet de bijbehorende Abonnementen.
Zo'n één richtingsverkeer
kan
een reden zijn om classes te combineren:
- Verhuis alle variabelen van de 'one' (Krant) naar de 'many' (Abonnement).
In het voorbeeld: krantnaam, uitgever, abonnementsPrijs.
- Verwijder de 'to-one' variabele (krantObj).
- Verwijder de 'one' classe (Krant).
Noot: Deze stap is vergelijkbaar met het
combineren van tabellen
tijdens een physiek database ontwerp.
4. Verwijder ballast
Het kan voorkomen dat er nog 'link' classes overblijven, als rudiment uit de
tweede normaalvorm.
Anders dan een fysieke database heeft een OO model geen link classes nodig:
- Verwijder de link class
- Implementeer eenvoudig twee
'to-many' relaties, aan weerskanten.
5. Gebruik caching
Gebruik
caching om de performance te verbeteren.
Bespaar CPU tijd door
de juiste verzameling
objecten op runtime bij elkaar te houden.
Noot: Deze stap is vergelijkbaar met het
maken van indexen
tijdens een physiek database ontwerp.
Tot
de volgende week,
Henk Jan Nootenboom
|