Thread: ORM, gebruikt jij het?
-
05-09-2010, 14:35 #1Member
- Registered
- 09/08/05
- Location
- Kieskring BHV
- Posts
- 1,683
- iTrader
- 5 (100%)
- Mentioned
- 0 Post(s)
- Reputation
- 1/22
ORM, gebruikt jij het?
Voor mijn examen van JEE waren we verplicht met JPA te werken, het is effe wennen maar daarna gaat het wel vlot. Ik ben nu iets in php aan het schrijven en ik mis het echt wel (ik weet wel dat er dingen zijn als doctrine enzo, maar dit is nu iets redelijk klein dat ik aan het maken ben)
Werken jullie ermee en wanneer wel/niet? (ORM in het algemeen dus)no votes
-
-
05-09-2010, 19:15 #2Member
- Registered
- 17/07/02
- Location
- Wilrijk
- Posts
- 1,994
- iTrader
- 2 (100%)
- Mentioned
- 0 Post(s)
- Reputation
- 9/16
Ik werk altijd met Welcome to BLToolkit - Business Logic Toolkit for .NET
Is de enigste die ik tot nu toe goed vind, en veel beter dan zaken zoals NHibernate en EF.
Zit bijvoorbeeld geen lazy loading in, ORM's met lazy loading + programmeurs die geen verstand hebben van DB's (de meeste precies) = epic failno votes
-
05-09-2010, 20:35 #3Approved 9liver
- Registered
- 18/01/04
- Location
- Melle
- Posts
- 10,535
- iTrader
- 56 (100%)
- Mentioned
- 0 Post(s)
- Reputation
- 27/102
Wat is er slecht aan lazy loading? In veel gevallen kan dat net heel voordelig zijn.
“In terms of how we evaluate schooling, everything is about working by yourself. If you work with someone else, it’s called cheating. Once you get out in the real world, everything you do involves working with other people.”
PSN: Cycloon - Final Fantasy XIV: A realm reborn characterno votes
-
06-09-2010, 19:33 #4Member
- Registered
- 17/07/02
- Location
- Wilrijk
- Posts
- 1,994
- iTrader
- 2 (100%)
- Mentioned
- 0 Post(s)
- Reputation
- 9/16
Ik zou dan toch wel eens willen weten in welke gevallen.Wat is er slecht aan lazy loading? In veel gevallen kan dat net heel voordelig zijn
Anyway hier een stukske Nhibernate code van een project dat ik volledig opnieuw aan het maken ben
(code is dus niet van mij
)
Persoonlijk vind ik dat dus niet kunnen hehCode:int dummyForTriggerLazyLoading; ICriteria criteria = session.CreateCriteria(typeof(Project)) .Add(Expression.Eq("IncludeInBatch", 1)) .Add(Expression.Eq("Deleted", 0)); IList<Project> projects = criteria.List<Project>(); if (loadCompoundLists) foreach (Project project in projects) // Trigger lazy loading of compounds dummyForTriggerLazyLoading = project.Compounds.Count; return projects;
Magic strings, klungelachtig triggeren van lazy loads, N+1 selects
Performance is 1 van de belangrijkste dingen voor users.
Belangrijkste performance-killer is
teveel trips naar de DB + eerste 3 punten van Fallacies of Distributed Computing - Wikipedia, the free encyclopedia
Veel projecten dus die beginnen met enkel hun eigen aangemaakte test data + lokale DB, lazy loading word dan a volonté gedaan, men hoeft niet na te denken en zal dan dus meestal niet nadenken over de beste fetching strategies.
Voeg dan een miljoen records toe + een database die achter een firewall staat en het is dikke miserie
no votes
-
06-09-2010, 19:38 #5
Dat is gewoon een voorbeeld van hoe lazy loading niet te implementeren. Betekent helemaal niet dat het nooit correct kan toegepast worden.
no votes
-
06-09-2010, 19:50 #6Member
- Registered
- 08/11/03
- Location
- Antwerpen
- Posts
- 1,726
- iTrader
- 0
- Mentioned
- 0 Post(s)
- Reputation
- 2/2
Op mijn laatste projecten heb ik gebruik gemaakt van NHibernate en het Entity Framework, waarvan NHibernate zeker en vast mijn voorkeur geniet.
De huidige versie van het EF is ondertussen met de uitgebreidere POCO & Code First support al wel wat bruikbaarder tenopzichte van de vorige versie.
Te veel programmeurs hebben inderdaad weinig verstand van DB's. Wanneer die dan een ORM gebruiken waardoor ze zelf geen SQL meer moeten schrijven, heeft dat vaak een grote catastrofe tot gevolg.
Lazy loading kan wel degelijk nut hebben, als het correct wordt toegepast. Maar met een query op maat, kom je natuurlijk ook al ver.no votes
-
06-09-2010, 19:53 #7Member
- Registered
- 08/11/03
- Location
- Antwerpen
- Posts
- 1,726
- iTrader
- 0
- Mentioned
- 0 Post(s)
- Reputation
- 2/2
Dat is echt wel een voorbeeld van hoe het niet moet he.
Ik heb de laatste versie van NHibernate nog niet gebruikt, maar ik veronderstel dat die dingen als Expression.Eq("PropertyName", 0) er wel zullen uit zijn en dat ze nu iets zullen hebben als dit:
Expression.Eq<TEntity>(t => t.Property, 0).no votes
-
06-09-2010, 19:54 #8Approved 9liver
- Registered
- 18/01/04
- Location
- Melle
- Posts
- 10,535
- iTrader
- 56 (100%)
- Mentioned
- 0 Post(s)
- Reputation
- 27/102
Bijvoorbeeld wanneer je een hele boomstructuur van gegevens hebt met duizenden bladeren. In het overzicht wil je enkel bv de 3 bovenste toplagen laten zien, daarna kan de gebruiker dynamisch verder doorklikken in de boom. Zonder lazy loading zou je ORM duizenden knopen en bladeren moeten inladen, terwijl de gebruiker mss hooguit geïnteresseerd is in enkele takken.
Lazy loading is uitgevonden met een reden hoor, niet om elke keer uitgeschakeld te worden
“In terms of how we evaluate schooling, everything is about working by yourself. If you work with someone else, it’s called cheating. Once you get out in the real world, everything you do involves working with other people.”
PSN: Cycloon - Final Fantasy XIV: A realm reborn characterno votes
-
07-09-2010, 14:00 #9Member
- Registered
- 17/07/02
- Location
- Wilrijk
- Posts
- 1,994
- iTrader
- 2 (100%)
- Mentioned
- 0 Post(s)
- Reputation
- 9/16
Zeg ik ook niet heh, dat het nooit correct kan toegepast worden, alleen kom ik maar weinig nhibernate apps tegen die wel goed zijnDat is gewoon een voorbeeld van hoe lazy loading niet te implementeren. Betekent helemaal niet dat het nooit correct kan toegepast worden.
Tja, maar ik kom het toch oh zo veel tegenDat is echt wel een voorbeeld van hoe het niet moet he.
Nuja vroeger toen er nog geen ORM's waren in VB6 kwam ik ook al N+1 selects tegen, crappy programmeurs heh
Euhm? ge kunt zelf bepalen wat ge ophaalt, eager/lazy loading is maar 1 ding van een ORM, het mapping gedeelte waar ge dan via fluent of linq data ophaalt is een ander groot gedeelte.Zonder lazy loading zou je ORM duizenden knopen en bladeren moeten inladen, terwijl de gebruiker mss hooguit geïnteresseerd is in enkele takken.
Trouwens zie ook niet direkt in hoe lazy loading u in dat geval echt gaat helpen ze
gemakzucht?Lazy loading is uitgevonden met een reden hoor
, Het is niet omdat er een feature bestaat dat ge die ook zomaar moogt gaan gebruiken zonder rekening te houden met uw requirements en zeker zonder kennis van zaken. Nu ondertussen blijf ik natuurlijk wel werkzekerheid hebben met al die mislukte projecten die ik mag overdoen of rechttrekken 
Ik zou zeggen bekijk de volgende keer eens bltoolkitIk heb de laatste versie van NHibernate nog niet gebruikt
Dat is tenminste een echte abstractie die u tijd gaat besparen
NHibernate is geen abstractie, misschiens als ge een paar jaar ervaring hebt wel, maar in de meeste gevallen is het constant logging nakijken om te zien als het aantal queries + de queries zelf die uitgevoerd worden aan uw verwachtingen voldoen, dan heb ik liever die zekerheid om het effectief zelf even te doen.
Uiteindelijk is het evenveel werk en ik steek liever iets meer tijd erin op voorhand om iets te maken waarvan ik direkt weet dat het werkt dan dat ik een mapping aanmaak om erna in de logging te checken dat het idd werkt.
De persistence layer is zowiezo iets waar weinig werk in kruipt, maar wat ontzettend belangrijk is voor performance, dus neem ik liever geen risico's (N+1)no votes
-
07-09-2010, 17:00 #10Member
- Registered
- 17/07/02
- Location
- Hasselt
- Posts
- 2,970
- iTrader
- 0
- Mentioned
- 0 Post(s)
- Reputation
- 0/18
Nu ben ik gene .NOT-er (kon't nie laten, sorry
), maar lazy loading voorkomt toch in de meeste gevallen al N+1 select.
De rest van de gevallen vermijdt ge N+1 select door de juiste fetching-strategie toe te passen (in Hibernate toch).
ORM frameworks zijn imo juist ideaal omdat ge in heel uw applicatie op een OO-manier kunt blijven werken. Ok, ge moet natuurlijk in het achterhoofd houden dat ge met een Relationele DB aant werken zijt, als ge dat vergeet hebt ge rap N+1 selects aan uw broek.
Relationele DB's zijn zo old-fashioned btw OO-DBs FTW!
If builders built buildings the way programmers wrote programs, then the first woodpecker that came along would destroy civilizationno votes
-
07-09-2010, 18:08 #11Member
- Registered
- 09/08/05
- Location
- Kieskring BHV
- Posts
- 1,683
- iTrader
- 5 (100%)
- Mentioned
- 0 Post(s)
- Reputation
- 1/22
Hoe los je dat N+1 probleem op? Gewoon met joins, of zit er meer achter? Want ik kan me moelijk voorstellen dat iets dat zo 'simpel' op te lossen valt zo vaak een probleem vormt.
no votes
-
07-09-2010, 18:51 #12Member
- Registered
- 17/07/02
- Location
- Wilrijk
- Posts
- 1,994
- iTrader
- 2 (100%)
- Mentioned
- 0 Post(s)
- Reputation
- 9/16
Hier is bijvoorbeeld een analyse van de MVC music store, kleine reference applicatie van MSHoe los je dat N+1 probleem op? Gewoon met joins, of zit er meer achter? Want ik kan me moelijk voorstellen dat iets dat zo 'simpel' op te lossen valt zo vaak een probleem vormt.
Analyzing the MVC Music Store: Data Accessno votes
-
09-09-2010, 21:37 #13Member
- Registered
- 17/07/02
- Location
- Sol System
- Posts
- 10,064
- iTrader
- 1 (100%)
- Mentioned
- 0 Post(s)
- Reputation
- 27/78
Gebruik ik ORM? Jazeker, voornamelijk voor CRUD operaties. Voor rapportage en in specifieke gevallen, waar een ORM enkel zou tegenwerken, gebruik ik echter steeds directe SQL queries.
Wat PHP betreft kan ik Propel wel smaken, Doctrine beviel mij niet echt.PSN: dJeezBE - Delicious bookmarks
Disclaimer: I am currently suffering from severe CSD (Compulsive Sarcasm Disorder). - L'onion fait la farce - Facile largire de alienoPastafarian by choiceno votes
-
09-09-2010, 22:39 #14Crew Member
- Registered
- 01/09/02
- Location
- Peutie
- Posts
- 7,664
- iTrader
- 0
- Mentioned
- 4 Post(s)
- Reputation
- 13/105
Kan je nog goede sites ivm BLToolkit documentatie aanbevelen? Of (open-source) projecten met concrete voorbeelden.
Ik ben namelijk van plan om voor een project over te schakelen van een custom file format naar een sqlite database formaat. (Verschillende local files wel om het manageable te houden enal.) Voorlopig is mijn plan om - daar ik maar met een tabel of 5 zit en mijn queries redelijk straight forward en simpel zijn een set van centrale set en get functies te voorzien voor die database. Maar het is de eerste keer dat ik zoiets ga aanpakken, en ik weet niet goed wat de beste manier is en of die BLToolkit mij het leven kan vergemakkelijken.Vanaf nu gaan we verder op BeyondGaming!
In deze thread wordt uitgelegd hoe je jouw account kan migreren.no votes
-
09-09-2010, 22:46 #15Approved 9liver
- Registered
- 28/11/03
- Location
- Drongen
- Posts
- 6,665
- iTrader
- 5 (100%)
- Mentioned
- 0 Post(s)
- Reputation
- 6/28
Ik gebruik ADF business components. Enorm handig framework waarmee je datacontrols (JSR227) kan gebruiken en operation bindings in JSF.
no votes

