- Image may be NSFW.
Clik here to view.
Welkom bij deze eerste post in de reeks over patterns die wereldwijd toegepast worden bij het ontwerpen van software. Deze week behandel ik het Value Object pattern zoals gebruikt in Domain Driven Design.
Veel objecten hebben geen conceptuele identiteit, ze beschrijven simpelweg een aspect van iets. Het is niet van belang of je nu instantie A van dit object hebt of instantie B omdat de instanties conceptueel hetzelfde zijn. Laat ik eerst een voorbeeld geven om dit statement toe te lichten.
Voorbeeld
Ik word gevraagd om een applicatie te bouwen waarin een verzekeraar zijn klanten kan beheren. Stel dat er 2 personen zijn: A en B en stel dat deze personen op hetzelfde adres wonen. Dan kun je gerust een brief sturen bestemd voor persoon A naar het adres van persoon B. Ook kun je onmogelijk op basis van het adres een van deze personen identificeren. Het adres is en heeft dus geen identiteit.
De conclusie dat een object geen eigen identiteit heeft kan grote gevolgen hebben voor bijvoorbeeld het database ontwerp waarvoor je kiest: Om ruimte te besparen zou je de adressen in een aparte tabel op kunnen slaan met een 1 op N relatie met de personen tabel. Of het instantieren van dit object, ik denk bijvoorbeeld meteen aan het Flyweight pattern.
Typische voorbeelden van Value Objects:
- Kleuren
- Tekens en tekenreeksen
- Afmetingen & punten
- Posities & locaties
- Stijlen
Bovenstaande items zijn maar enkele voorbeelden en zijn bovendien niet in alle gevallen Value Objects. Stel je voor dat je een programma aan het maken bent voor het mengen van kleuren, dan zal kleur waarschijnlijk geen Value Object zijn.
Dit pattern heeft mij geholpen om objecten goed te kunnen classificeren wat er toe heeft geleid dat mijn ontwerpen eenvoudiger werden. Ook bij het bepalen welke (N)Hibernate mapping ik het beste kon gebruiken is dit een waardevol pattern.
Gerelateerde patterns:
Ik ben benieuwd wat jullie ervaringen zijn met het Value Object pattern. Heeft het jou geholpen? Of juist niet? Deel je ervaring door hier een reactie te plaatsen.