[MVC] Denkwijze
Ik wil duidelijk krijgen hoe ik een bepaalde applicatie op kan zetten. Ik ben van plan om volgens het MVC-pattern te gaan werken. Als voorbeeld ga ik even uit van een persoon. Stel ik heb het model van een persoon met daarin alle informatie en methoden om deze te wijzigen. Stel dat ik alleen de schoenmaat van die persoon wil wijzigen. Wat is dan slim? een functie 'saveSchoenmaat' die dit direct aanpast in de database of een functie 'setSchoenmaat' en dan een algemene functie 'save' die het hele object opslaat in de database? Stel dat ik in de constructor alle data van die persoon ophaal, wat in principe vrij logisch klinkt, wordt dus ook alle data opgehaald als ik alleen de schoenmaat wil wijzigen, wat is hiervoor de slimste manier?
Kan iemand wat ideetjes geven? Ik hoop dat mijn verhaal (een klein beetje) duidelijk is.
Model: Database/opslag
View: Template parser (in het geval van webtalen)
Controller: Je classes die alles regelen.
Eerste vraag was wat nu de slimste manier is om de data van het model op te slaan in de database.
Tweede vraag was of het wel slim is om in je constructor al al je data op te halen van, in dit geval, een persoon.
Zelf houdt ik mijn Model altijd gescheiden van de database. (he?) Er is een model, bijvoorbeeld Persoon, met voornaam, achternaam, blogposts, etc. En er is de database. En dan is er een object dat de Persoon-objecten uit de database haalt. (Ik noem het meestal dan een PersoonStore)
Voordeel hiervan is dat de opbouw van je model gescheiden is van de database. Je kan dan dus ook bronnen combineren, tabellen combineren, of verschillende bronnen (databases en webservices) hebben waar je je modellen vandaan haalt. Ook is je model nu flexiebeler, kan je zelf bepalen waar je het opslaat (én de database, én de cache etc.)
Je Model beschrijft (tja) je eigenschappen, en je Store mapt als het ware de kolommen van de tabel(len) van je database aan die eigenschappen.
edit: Om nog even duidelijker antwoord te geven op je vraag: De store heeft dan 1 method, genaamd "put" (zoals HTTP ook kent :P) of "save" die het hele object in een INSERT of UPDATE query gooit. De database zelf zal dan uitmaken welke data werkelijk veranderd is. Zo slim zijn die inmiddels wel. Daarnaast is 1 update-query met enkele overbodige velden niet zwaarder, zelfs waarschijnlijk lichter, dan 3 aparte kleine UPDAET queries. En de kans dat je savePropertyX() vergeet aan te roepen is ook meteen een _stuk_ kleiner :)
Gewijzigd op 01/01/1970 01:00:00 door Jelmer -