Ik loop al een tijdje tegen het volgende probleem aan, waarbij theorie en praktijk elkaar een beetje bijten naar mijn idee. Als ik het helemaal schoolvoorbeeld OO zou moeten doen dan zou iedere class netjes refereren naar andere classes die daarmee geassocieerd zijn. Bijvoorbeeld een Klant zou dan een Lijst met Orders hebben, en iedere keer als ik die Lijst met Orders vraag aan de Klant dan zou die gevuld moeten zijn, want een Klant bestaat nu eenmaal uit o.a. de eigenschap Lijst met Orders, ook al is die leeg, dan heeft die Klant gewoon geen Orders.
Ga je dat in een database opslaan voor een website heb je verassingsgewijs dan een tabel Klant en een tabel Order, waar iedere Order een KlantId heeft. Maaarrrr nu komt het vaker voor dat om diverse technische (circular references bijvoorbeeld) of performance technische (waarom alle orders met orderregels etc ophalen als je alleen de naam wilt weten?) redenen dat dus die 'zekerheid' die je hebt, namelijk dat je altijd op die manier de actuele Lijst met Orders hebt, niet meer bestaat. Tenslotte zou ik een simpele fetch gedaan kunnen hebben waarbij ik wel de simpele members van Klant heb maar niet meer de Lijst met Orders vul, waardoor het lijkt alsof deze klant geen Orders meer heeft terwijl ik ze alleen maar niet heb opgehaald.
Dit lijkt mij echt een enorme bron van mogelijke NP exceptions, foutieve waardes en andere zaken die veel geld kosten om op te lossen en nog jaren later in de vorm van bugs terug blijven komen. Hoe zorg ik er voor dat mijn datamodel weer net zo betrouwbaar wordt alsof ik het alleen maar in mijn geheugen zou hebben? Moet ik dan gewoon die references afschaffen en in die classes integers met foreign keys opslaan en die pas resolven als ik ze nodig heb? Maar waarom doe ik dan nog OO?
Ga je dat in een database opslaan voor een website heb je verassingsgewijs dan een tabel Klant en een tabel Order, waar iedere Order een KlantId heeft. Maaarrrr nu komt het vaker voor dat om diverse technische (circular references bijvoorbeeld) of performance technische (waarom alle orders met orderregels etc ophalen als je alleen de naam wilt weten?) redenen dat dus die 'zekerheid' die je hebt, namelijk dat je altijd op die manier de actuele Lijst met Orders hebt, niet meer bestaat. Tenslotte zou ik een simpele fetch gedaan kunnen hebben waarbij ik wel de simpele members van Klant heb maar niet meer de Lijst met Orders vul, waardoor het lijkt alsof deze klant geen Orders meer heeft terwijl ik ze alleen maar niet heb opgehaald.
Dit lijkt mij echt een enorme bron van mogelijke NP exceptions, foutieve waardes en andere zaken die veel geld kosten om op te lossen en nog jaren later in de vorm van bugs terug blijven komen. Hoe zorg ik er voor dat mijn datamodel weer net zo betrouwbaar wordt alsof ik het alleen maar in mijn geheugen zou hebben? Moet ik dan gewoon die references afschaffen en in die classes integers met foreign keys opslaan en die pas resolven als ik ze nodig heb? Maar waarom doe ik dan nog OO?
[ Voor 7% gewijzigd door BikkelZ op 07-11-2008 13:24 ]
iOS developer