SinControl 2: domain classes / business layer

Author: Tim Diels (limyrethATgmailDOTcom)
Date: 2011-06-26
Revision: 1

Het SinControl 2 domain is een voorbeeld van een OO domain.

De code van de domain klassen is online te bekijken, of te downloaden als tar of als zip. De domain classes bevinden zich in sincontrol/domain/.

Documentatie van de business die SinControl 2 ondersteunt is online te bekijken in de Admin Guide, de Developer Guide en de Feature list

Het SinControl domain is ontworpen door te kijken naar de requirements en deze zo te modeleren in het design. Persistence is pas bij de implementatie aan bod gekomen. Het domain zelf lijkt dan ook niet op de achterliggende database, en maar goed ook want deze structuur is makkelijker en intuitiever om mee te werken dan de database structuur. Het domain is zo geschreven dat code die het gebruikt helemaal geen rekening hoeft te houden met de database, de persistence.

Zie ook de front-end code voor user subscribe, ... online of in sincontrol/services/user/ van de source. Merk op dat SinControl 2 het Builder pattern gebruikt om presentation logic te scheiden van de domain classes, ipv Model View Controller. Het voordeel hiervan is dat de domain classes hun implementation details beter kunnen hiden door veel minder getters en setters te hebben.

Neem bijvoorbeeld subscribePerson.php; deze pagina verwerkt een aanvraag voor een nieuwe account. In de eerste blokken worden de argumenten van het form van de showSubscribePerson.php pagina verwerkt tot domain objects, hierbij gebeurt validatie (zo zit de validatie logica centraal op 1 plaats). In de laatste blok code wordt een nieuwe student aangemaakt (enkel studenten nog niet bekend met het systeem kunnen een account aanvragen). Als de student al bestaat of er iets anders niet klopt, wordt een exception geworpen. Merk op dat we bij deze code slimme domain objects hebben. Met domme objecten had deze code veel complexer geweest om te schrijven omdat we met meer dingen tegelijkertijd rekening moeten houden waar die nu verborgen worden.