Bean

Maandag, 4 februari 2002
Hoe map je een entiteit uit een ERD naar een Java bean (= Class)?

OO model na mapping van relaties
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:

  1. Van optionaliteit naar specialisatie
  2. Analyseer top niveau methods
  3. Combineer classes
  4. Verwijder ballast
  5. 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:

  1. Splits abonnement in de superclasse Abonnement en de subclasse StudentenAbonnement.
  2. Verwijder het 'abonnementsType'. Dit attribuut is niet meer nodig. De class neemt de rol over.
  3. 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

geoptimaliseerd OO model
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:
  1. Verhuis alle variabelen van de 'one' (Krant) naar de 'many' (Abonnement). In het voorbeeld: krantnaam, uitgever, abonnementsPrijs.
  2. Verwijder de 'to-one' variabele (krantObj).
  3. 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:

  1. Verwijder de link class
  2. 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