JKVA schreef op donderdag 06 juli 2006 @ 18:13:
Ik vind het persoonlijk altijd erg fijn om domeinobjecten ook als VO en als DTO te gebruiken, tenminste die rol te laten vervullen. Bovendien is het niet gemakkelijk te unit testen als je je DB code in je domeinlaag laat komen. Dat is ook een van de redenen dat Hibernate transparant is.
Ben ik het wel mee eens. Ik kan niet aan de indruk ontkomen dat je een hoop dubbelwerk doet wanneer je aparte DTO's gaat bouwen.
Maar wat is een VO eigenlijk

Over jouw voorbeeld. Ik begrijp dat je je code versimpeld hebt voor het voorbeeld, maar om in een getter een DAO aan te spreken... Lijkt me niet de goede plaats. Als ik deze methode zou aanroepen, zou ik verwachten een member te zien te krijgen, niet iets dat ter plekke uit de database geslobberd wordt. In mijn getters staat meestal alleen een return en hooguit een lazy instantiatie, om nullwaarden te voorkomen.
Hoe zou jij dan de methode in je domain object noemen welke de employees uit de DB slobbert en retourneert in een Set. loadEmployees(), retreiveEmployees()? In mijn ogen is het maar een beestje dat een naampje moet hebben... (hoewel het wel duidelijk moet zijn wat het doet...)
Je hebt gelijk dat je een soort lazy fetching krijgt, maar wat is het waard? Want je krijgt tegelijk ook een "heel vaak" fetching, omdat het bij elke aanroep gebeurt.
Daar heb je wel weer gelijk in. Hoe vaak gaat (in mijn geval) getEmployees() aangeroepen worden. Moet er een vorm van caching in komen (alleen bij de 1ste call naar de DB en verder alleen de wijzigingen persisten?) .
"Expliciete code" was de term die ik zocht. Als je je domeinlaag dergelijke dingen laat doen, doe dit dan via een static getById o.i.d. Op die manier heb je een duidelijkere interface, zonder gekke bijeffecten als je deze aanroept.
Je bedoelt
static Set getEmployee(int id) ofzo?
Alarmnummer schreef op donderdag 06 juli 2006 @ 18:43:
Ik heb op dit moment niet veel tijd, maar check de repository eens in ddd. Een repository geeft je een soortement van collection achtige access tot je data en dat is ook precies hetgeen een dao ook doet. Mijn mening op dit moment is dat het gewoon mogelijk moet zijn om je dao's direct aan te spreken in je domain model.
Ga ik zeker doen. Ik ben op deze vraag terecht gekomen omdat ik in het verleden nogal vaak trok naar het Anemic Domain Model (zoals in jouw
topic wordt aangestipt). Dus ben ik begonnen om mijn leven te beteren qua ontwerp.
whoami schreef op donderdag 06 juli 2006 @ 21:02:
De repository in DDD maakt idd deel uit van je domain layer, en, spreek je dus gewoon vrij aan in je model.
Zelf ben ik ook niet zo'n fan om je DAO's in je domain objecten te steken, om dezelfde redenen die al aangehaald zijn, en ook omwille van de duidelijkheid. Ik denk dat het dan nl. niet altijd even duidelijk is voor de 'gebruiker' van je domein objecten wat er nu precies gebeurd (DB access of niet ?).
Gelukkig ben ik zelf (en een paar collega's) de gebruiker van de domain objecten. Hoewel dat natuurlijk geen excuus is om een ondoorzichtig en verwarrend domain model op te leveren
The ships hung in the sky in much the same way that bricks don’t.