Ik ben erg benieuwd naar de verschillende methoden waarmee bepaald kan worden of een bepaald object, dat uit de database getrokken is en eventueel weer opgeslagen moet worden, dirty of niet is.
Enkele methoden die ik zelf wel kan bedenken of eens heb gezien:
-Een clone van een object maken en middels een unieke ID later terug zoeken voor vergelijking.
Een voordeel van deze methode is dat je het class zelf met rust laat en dat je later niets in de DB zelf hoeft te controleren. Nadeel lijkt mij is dat het clonen misschien niet altijd goed gaat ivm. met references en deep cloning etc.
-De gegevens opnieuw selecteren uit de DB bij het opslaan en dan de waarden vergelijken.
Ook hier laat je de class met rust. Het voordeel boven clonen is dat je daar geen problemen mee kan krijgen. Verder weet ik niet of dit nou zo veel sneller is dan gewoon de update uitvoeren zonder die controle.
-Het bewaren van de geselecteerde gegevens bij het initialiseren en later ophalen middels een unieke ID.
Ongeveer hetzelfde als de vorige. Nadeel lijkt me alleen dat je bij iedere save weer opnieuw een select moet doen, omdat je met de volgende save rekening moet houden (dan is de nieuwe row data immers nodig), dus geeft dat eigenlijk geen voordeel boven de vorige.
-Het bijhouden van een flag in de class zelf.
Dit lijkt mij de snelste methode (in performance dan). Een nadeel is dat je de class zelf er mee moet gaan 'vervuilen'. Ook moet je er aan denken bij iedere set de flag te zetten. En wil je dit vanuit een automatische mapper laten uitlezen, dan moet je de class bijna wel van een vaste superclass laten erven of een interface laten implementeren.
Wat is de beste methode en waarom?
Dan nog een vraag mbt. collecties binnen een object. Hoe bepaal je daarbij of er een object is toegevoegd of is verwijderd?
Hoe ik het nu vaak doe is het verzorgen van een speciale decorator collectie welke de wijzigingen doorvoert in de DB. Een groot nadeel is daarvan dat de save/store whatever actie daar dan geen effect meer op heeft. Ik wil dus eigenlijk dat de associatie pas gelegd wordt bij het expliciet aanroepen van zo'n actie en niet dat de collectie dat 'stiekem' voor me regelt.
Hierbij kan ik zelf ook wel wat bedenken en dat is:
-Het ophalen van de ID's van alle associaties en daarmee vergelijken.
Dit lijkt me een hele nette methode, alleen is dit wel performant genoeg?
Zijn er hier nog meer methoden?
Enkele methoden die ik zelf wel kan bedenken of eens heb gezien:
-Een clone van een object maken en middels een unieke ID later terug zoeken voor vergelijking.
Een voordeel van deze methode is dat je het class zelf met rust laat en dat je later niets in de DB zelf hoeft te controleren. Nadeel lijkt mij is dat het clonen misschien niet altijd goed gaat ivm. met references en deep cloning etc.
-De gegevens opnieuw selecteren uit de DB bij het opslaan en dan de waarden vergelijken.
Ook hier laat je de class met rust. Het voordeel boven clonen is dat je daar geen problemen mee kan krijgen. Verder weet ik niet of dit nou zo veel sneller is dan gewoon de update uitvoeren zonder die controle.
-Het bewaren van de geselecteerde gegevens bij het initialiseren en later ophalen middels een unieke ID.
Ongeveer hetzelfde als de vorige. Nadeel lijkt me alleen dat je bij iedere save weer opnieuw een select moet doen, omdat je met de volgende save rekening moet houden (dan is de nieuwe row data immers nodig), dus geeft dat eigenlijk geen voordeel boven de vorige.
-Het bijhouden van een flag in de class zelf.
Dit lijkt mij de snelste methode (in performance dan). Een nadeel is dat je de class zelf er mee moet gaan 'vervuilen'. Ook moet je er aan denken bij iedere set de flag te zetten. En wil je dit vanuit een automatische mapper laten uitlezen, dan moet je de class bijna wel van een vaste superclass laten erven of een interface laten implementeren.
Wat is de beste methode en waarom?
Dan nog een vraag mbt. collecties binnen een object. Hoe bepaal je daarbij of er een object is toegevoegd of is verwijderd?
Hoe ik het nu vaak doe is het verzorgen van een speciale decorator collectie welke de wijzigingen doorvoert in de DB. Een groot nadeel is daarvan dat de save/store whatever actie daar dan geen effect meer op heeft. Ik wil dus eigenlijk dat de associatie pas gelegd wordt bij het expliciet aanroepen van zo'n actie en niet dat de collectie dat 'stiekem' voor me regelt.
Hierbij kan ik zelf ook wel wat bedenken en dat is:
-Het ophalen van de ID's van alle associaties en daarmee vergelijken.
Dit lijkt me een hele nette methode, alleen is dit wel performant genoeg?
Zijn er hier nog meer methoden?