Page 1 of 2 12 Last
  1. #1

    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  

  2. #2
    Moto's Avatar
    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 fail
    no votes  

  3. #3
    Cycloon's Avatar
    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 character
    no votes  

  4. #4
    Moto's Avatar
    Registered
    17/07/02
    Location
    Wilrijk
    Posts
    1,994
    iTrader
    2 (100%)
    Mentioned
    0 Post(s)
    Reputation
    9/16
    Wat is er slecht aan lazy loading? In veel gevallen kan dat net heel voordelig zijn
    Ik zou dan toch wel eens willen weten in welke gevallen.

    Anyway hier een stukske Nhibernate code van een project dat ik volledig opnieuw aan het maken ben
    (code is dus niet van mij )
    Code:
                    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;
    Persoonlijk vind ik dat dus niet kunnen heh
    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  

  5. #5
    Parnakra's Avatar
    Registered
    15/04/04
    Location
    Izegem
    Posts
    6,095
    iTrader
    1 (100%)
    Mentioned
    0 Post(s)
    Dat is gewoon een voorbeeld van hoe lazy loading niet te implementeren. Betekent helemaal niet dat het nooit correct kan toegepast worden.
    no votes  

  6. #6

    Registered
    08/11/03
    Location
    Antwerpen
    Posts
    1,726
    iTrader
    0
    Mentioned
    0 Post(s)
    Reputation
    2/2
    Quote Originally Posted by Moto View Post
    This quote is hidden because you are ignoring this member. Show
    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 fail
    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  

  7. #7

    Registered
    08/11/03
    Location
    Antwerpen
    Posts
    1,726
    iTrader
    0
    Mentioned
    0 Post(s)
    Reputation
    2/2
    Quote Originally Posted by Moto View Post
    This quote is hidden because you are ignoring this member. Show
    Ik zou dan toch wel eens willen weten in welke gevallen.

    Anyway hier een stukske Nhibernate code van een project dat ik volledig opnieuw aan het maken ben
    (code is dus niet van mij )
    Code:
                    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;
    Persoonlijk vind ik dat dus niet kunnen heh
    Magic strings, klungelachtig triggeren van lazy loads, N+1 selects
    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  

  8. #8
    Cycloon's Avatar
    Registered
    18/01/04
    Location
    Melle
    Posts
    10,535
    iTrader
    56 (100%)
    Mentioned
    0 Post(s)
    Reputation
    27/102
    Quote Originally Posted by Moto View Post
    This quote is hidden because you are ignoring this member. Show
    Ik zou dan toch wel eens willen weten in welke gevallen.
    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 character
    no votes  

  9. #9
    Moto's Avatar
    Registered
    17/07/02
    Location
    Wilrijk
    Posts
    1,994
    iTrader
    2 (100%)
    Mentioned
    0 Post(s)
    Reputation
    9/16
    Dat is gewoon een voorbeeld van hoe lazy loading niet te implementeren. Betekent helemaal niet dat het nooit correct kan toegepast worden.
    Zeg ik ook niet heh, dat het nooit correct kan toegepast worden, alleen kom ik maar weinig nhibernate apps tegen die wel goed zijn
    Dat is echt wel een voorbeeld van hoe het niet moet he.
    Tja, maar ik kom het toch oh zo veel tegen
    Nuja vroeger toen er nog geen ORM's waren in VB6 kwam ik ook al N+1 selects tegen, crappy programmeurs heh

    Zonder lazy loading zou je ORM duizenden knopen en bladeren moeten inladen, terwijl de gebruiker mss hooguit geïnteresseerd is in enkele takken.
    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.
    Trouwens zie ook niet direkt in hoe lazy loading u in dat geval echt gaat helpen ze

    Lazy loading is uitgevonden met een reden hoor
    gemakzucht? , 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 heb de laatste versie van NHibernate nog niet gebruikt
    Ik zou zeggen bekijk de volgende keer eens bltoolkit
    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  

  10. #10
    Emerxill's Avatar
    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 civilization
    no votes  

  11. #11

    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  

  12. #12
    Moto's Avatar
    Registered
    17/07/02
    Location
    Wilrijk
    Posts
    1,994
    iTrader
    2 (100%)
    Mentioned
    0 Post(s)
    Reputation
    9/16
    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.
    Hier is bijvoorbeeld een analyse van de MVC music store, kleine reference applicatie van MS
    Analyzing the MVC Music Store: Data Access
    no votes  

  13. #13
    dJeez's Avatar
    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 alieno
    Pastafarian by choice
    no votes  

  14. #14
    Tyfius's Avatar
    Registered
    01/09/02
    Location
    Peutie
    Posts
    7,664
    iTrader
    0
    Mentioned
    4 Post(s)
    Reputation
    13/105
    Quote Originally Posted by Moto View Post
    This quote is hidden because you are ignoring this member. Show
    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 fail
    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  

  15. #15
    passero's Avatar
    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  

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •  

Log in

Log in