In het project waar wij aan werken is er gekozen voor een bepaalde opzet, om de aanpak te illustereren gebruik ik als voorbeeld Company en Person:
Twee entiteiten Company en Person
(deze bevatten geen methoden, maar puur fields en properties).
Een Company heeft bijv. een Name
Een Person heeft bijv. een Company en een First name en Last Name
Voor iedere entiteit een Home klasse
(deze bevatten methoden, business logic)
Zowel Company als Person heeft o.a. een GetByID/GetAll/Save/Delete methode
Voor iedere entiteit een DAO klasse
(deze bevatten methoden voor communicatie met de database)
Zowel Company als Person heeft o.a. een RetrieveByID/RetrieveAll/Save/Delete methode
Tot zover weinig spannends...
Stel je voor dat je een Person op wilt vragen. Deze Person heeft omdat deze bij een bepaalde Company hoort in de database een Company ID. Vanuit je entiteiten bewerkstellig je dit door te zeggen een Person heeft een Company. Maar als je nu PUUR een Person wilt laden, moet je eigenlijk ook al de Company erbij laden vanwege de referentie. Bij dit soort kleine entiteiten kan dat, maar bij grotere of entiteiten met veel relaties naar andere zorgt dat voor veel extra bandbreedte/database instructies.
Je kan zeggen: laad dan de Person en creeer een nieuw Company object waarvan je alleen het ID vult. Nadeel hiervan is, is dat als je later met die Person aan de slag gaat, je vrij moeilijk kan bepalen of de bijbehorende Company volledig ingeladen is of niet (omdat ID hier meestal een indicator voor is).
Je kan ook zeggen: sla bij een Person zowel een Company object als een Company ID integer op en probeer dit via de properties netjes in sync te houden. Maar dat is ook niet echt een mooie oplossing.
Lazy loading zou kunnen, maar daar hangen dezelfde nadelen aan als oplossing 1. Daarnaast krijg je dan veel functionaliteit in je entiteiten, wat niet wenselijk is.
Weet iemand hier een nette oplossing voor, het lijkt me een vrij veel voorkomend probleem? Ik ben benieuwd naar jullie aanpak.
Twee entiteiten Company en Person
(deze bevatten geen methoden, maar puur fields en properties).
Een Company heeft bijv. een Name
Een Person heeft bijv. een Company en een First name en Last Name
Voor iedere entiteit een Home klasse
(deze bevatten methoden, business logic)
Zowel Company als Person heeft o.a. een GetByID/GetAll/Save/Delete methode
Voor iedere entiteit een DAO klasse
(deze bevatten methoden voor communicatie met de database)
Zowel Company als Person heeft o.a. een RetrieveByID/RetrieveAll/Save/Delete methode
Tot zover weinig spannends...
Stel je voor dat je een Person op wilt vragen. Deze Person heeft omdat deze bij een bepaalde Company hoort in de database een Company ID. Vanuit je entiteiten bewerkstellig je dit door te zeggen een Person heeft een Company. Maar als je nu PUUR een Person wilt laden, moet je eigenlijk ook al de Company erbij laden vanwege de referentie. Bij dit soort kleine entiteiten kan dat, maar bij grotere of entiteiten met veel relaties naar andere zorgt dat voor veel extra bandbreedte/database instructies.
Je kan zeggen: laad dan de Person en creeer een nieuw Company object waarvan je alleen het ID vult. Nadeel hiervan is, is dat als je later met die Person aan de slag gaat, je vrij moeilijk kan bepalen of de bijbehorende Company volledig ingeladen is of niet (omdat ID hier meestal een indicator voor is).
Je kan ook zeggen: sla bij een Person zowel een Company object als een Company ID integer op en probeer dit via de properties netjes in sync te houden. Maar dat is ook niet echt een mooie oplossing.
Lazy loading zou kunnen, maar daar hangen dezelfde nadelen aan als oplossing 1. Daarnaast krijg je dan veel functionaliteit in je entiteiten, wat niet wenselijk is.
Weet iemand hier een nette oplossing voor, het lijkt me een vrij veel voorkomend probleem? Ik ben benieuwd naar jullie aanpak.
Any sufficiently advanced technology is equivalent to magic.