Door
-Jens -
op 20-09-2013 13:36
gewijzigd op 20-09-2013 13:36
782 views
Dag Iedereen,
Ik zit met een vraag over OO ontwerp. Stel nu dat ik een loginsysteem heb dat bestaat uit gebruikers. Maar elke gebruiker behoort tot één of meer groepen. Dan maak ik een user klasse en een group klasse. Maar welke relatie maak ik dan? Ik wil dat als ik een "group" laad, ik zijn "users" krijg. Maar als ik een "user" laad, ik ook zijn "group" objecten krijg. Maar stel nu dat ik een "group" object laad. Dan laadt die ook zijn "users" en die "users" laden op hun beurt weer de "groups" waar zij instaan. En die "groups" laden op hun beurt weer hun "users" en zo kom je eigenlijk in een cirkel terecht. Hoe los ik dit op?
Waarom moet alles onmiddellijk automatisch geladen worden? Een new Group hoeft niet via de constructor alle users te laden; dat kan ook later met een Group::getUsers(). Dat is véél efficiënter. Je gaat toch niet alle users laden als je bijvoorbeeld alleen maar de naam van de group wilt aanpassen?
Zit een new User automatisch meteen in een group? Dat hoeft niet noodzakelijk. Je kunt een User-object bijvoorbeeld gebruiken bij het openen van een account. Pas als dat succesvol is afgerond, is duidelijk in welke group de user thuishoort.
Het kan wel, maar waarom zou je het automatisch doen? In 99 van de 100 gevallen heb je waarschijnlijk alleen de groep namen nodig en helemaal niet alle users die daarin zitten (en andersom). Dus waarom zou je dat automatisch willen doen? Kost alleen maar tijd en resources.
Dus jij zou geen Group-objecten opslaan in een member van User?
Het kán wel, maar ik zou het (a) niet automatisch doen en (b) nooit met een compleet gevulde group met alle data en andere toeters en bellen. Je kunt bijvoorbeeld een kale class Group gebruiken met het hoogst noodzakelijke en daaraan een class GroupAdministration extends Group toevoegen voor functionaliteit zoals het tonen van alle users, het wijzigen van de group-rechten, enzovoort.
Verder is beginnen met één user behoort tot één group in de praktijk ook wel eens iets waarvan je achteraf spijt kunt krijgen: gebruikers kunnen tot meerdere groepen behoren.
Waarom lees je nu niet gewoon? Zowel Ward als ik zeggen dat je het gewoon niet automatisch in moet laden! Welk objecten je allemaal maakt moet je helemaal zelf weten.