ORM of niet?

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Bas Hepping

Bas Hepping

20/08/2012 22:40:38
Quote Anchor link
Ik start binnenkort met een nieuw project. Dit project omvat een database op redelijke schaal (misschien een keer tussen 20 en 50 tabellen). Ik ga deze ontwikkelen met behulp van CodeIgniter als framework.

Nu is mijn vraag: Is het handig om voor dit project een ORM te gebruiken of zal dit de server heel erg gaan vertragen? Hoewel de database niet zo heel groot is zal het aantal transacties op de database erg kunnen toenemen.

Ik heb nog nooit met een ORM gewerkt maar als het een handig dingetje is dan wil ik het wel graag leren. Wat zijn jullie meningen hierover?

(hoop ook dat het in het goede board staat, kon niet echt goed kiezen tussen OOP of DB)
 
PHP hulp

PHP hulp

29/03/2024 10:32:03
 
John Berg

John Berg

20/08/2012 22:49:35
Quote Anchor link
Ik gebruik voor elk project, groot of klein een ORM. Soms Activerecord (bij kleine projecten), en anders een datamapper.

Als je CI gaat gebruiken dan lijkt me dat de ActiveRecord implementatie van CI je snel op weg gaat helpen.

Het lijkt me dat de server er niet trager van wordt. De query moet immers een keer uitgevoerd worden. Doordat je nu het concentreert op 1 punt (in het model) en je structuur in je app krijgt zou het wel eens sneller kunnen zijn.

De learning curve bij CI is niet erg groot. Misschien vooraf een klein projectje maken, met 1 controller, 1 model en 1 view om het in de vingers te krijgen.
 
Bas Hepping

Bas Hepping

20/08/2012 22:52:51
Quote Anchor link
Ik ben al een tijd bezig met CI en kan er al behoorlijk mee overweg. Zelf gebruik ik de Active Record klasse van CI al de hele tijd, maar vroeg me af of een extern ORM framework beter was dan de Active Record klasse.

Het project wat ik wil ontwikkelen zal door veel personen met grote frequentie worden gebruikt aangezien het meer een combinatie is van veel andere projecten. Zou een ORM (als Doctrine of Propel) hier beter voor zijn of kan ik het beter op de Active Record klasse houden?
 
John Berg

John Berg

20/08/2012 23:13:12
Quote Anchor link
Ik ben geen fan van Doctrine of Propel, te veel overhead voor wat je ervoor terugkrijgt.

Ik zou de volgende afweging maken: als de relatie van je model tot de onderliggende database erg verschillend is, of als je model veel rekenwerk moet doen, dat niet querymatig opgelost kan worden dan zou ik een ORM overwegen op basis van een datamapper.

Als je model echter sterk gekoppeld is aan de onderliggende database, b.v. doordat je model properties 1 op 1 overeenkomen met de velden uit de onderliggende tabel, dan zou ik bij activerecord blijven.

En er zit natuurlijk ook een persoonlijke voorkeur aan. Bij een nieuw project ben ik een fan van Domain Driven Design, en ik probeer de modellen dan zo 'natuurlijk' mogelijk te maken. En echte wereld modellen komen zelden overeen met rij/kolom modellen in een database. Vandaar dat ik dan vaak voor een datamapper ga. Bij bestaande projecten die opgewaardeerd worden is het vaak ondoenlijk om de modellen aan te passen, dus daar blijf ik dan meestal bij active record.
 
Kees Schepers

kees Schepers

21/08/2012 00:06:23
Quote Anchor link
Ik ben wel fan van Doctrine, omdat deze erg efficiënt is en RAD (Rapid Application Development) driven is. Een voordeel is dat je repositories en entities goed gescheiden zijn en ook relaties vanuit je entities zeer goed geregeld zijn. Als je ook veel insert statements hebt is Doctrine zeker aan te raden vanwege de het Unit Of Work pattern tov. het active record pattern waarbij je een query stuurt na het saven van 1 record.

In essentie maakt een ORM communicatie wel trager tov. het gebruiken van DBAL. Echter door het gebruiken van een goed ORM gaf mij dit meer controle op hoe data-caching geregeld is binnen mijn applicatie en het resultaat was dat de applicatie uiteindelijk betere performance bood tov de oude versie waar ik enkel DBAL gebruikte.

Voor de duidelijkheid, DBAL is Database Abstraction Layer, inprincipe is PDO al een DBAL.

Succes met je keuze!
 
Bas Hepping

Bas Hepping

21/08/2012 14:01:58
Quote Anchor link
Bedankt voor jullie reacties. Ik had al behoorlijk wat topics gelezen op stackoverflow en dergelijke websites maar was nog steeds niet echt zeker.

Het is nog steeds een behoorlijke overweging die ik zal moeten maken. Misschien dat jullie me aan de hand van een voorbeeld een mening kunnen geven?

Stel dat ik een website als Facebook opnieuw zou maken in CI. Zouden jullie daar dan een ORM voor gebruiken als jij de enige ontwikkelaar bent? (Facebook is een behoorlijk complex iets maar het komt in de buurt wat betreft mijn project: Redelijke database + veel queries tegelijkertijd)
 
Mark Kazemier

Mark Kazemier

21/08/2012 16:13:02
Quote Anchor link
Wel of geen ORM is een keuze die je niet te licht op moet vatten. Daarvoor is het handig om de voor- en nadelen van ORM op een rij te zetten.

Voordelen:
- Je hoeft je geen zorgen meer te maken over hoe data opgeslagen is in de database en kan je focussen op het domein model
- Je kan eenvoudig switchen van database
- Relaties kunnen automatisch gevolgd worden, waardoor je minder SQL hoeft te schrijven
- Als je een goede ORM hebt handelt hij ook migratie voor je af

Nadelen:
- Je hebt minder controle over de queries die er uitgevoerd worden.
- Omdat ORMs vaak platform onafhankelijk zijn, ondersteunen ze alleen de gemene deler tussen de verschillende ondersteunde databases. Aangezien vooral MySQL nogal beperkt is in zijn functionaliteit, kan dat vervelend zijn als je iets anders dan MySQL gebruikt

Het belangrijkste bij het gebruik van een ORM is dat je heel goed in de gaten houdt wat er op de achtergrond gebeurt. Je zal anders heel snel merken dat je 100den queries gaat uitvoeren op een simpele pagina. Dit hoeft niet erg te zijn, maar het is handig om rekening mee te houden. Als je ORM goed gebruikt hoeft dit geen probleem te zijn en hoeft het niet veel langzamer te zijn dan eigen mappers schrijven.

Dan heb je natuurlijk ook nog de keuze over welke ORM je gebruikt. In PHP heb je twee verschillende ORM's die veel gebruikt worden:
1. Propel
2. Doctrine

Mijn voorkeur gaat naar Doctrine. Deze is gebaseerd op Hybernate van Java en is zeer flexibel. Het biedt zelfs zijn eigen SQL taal (DQL) die het mogelijk maakt om objecten ipv records uit de database op te vragen.

Haal ORM overigens vooral niet in de war met Active record! Het idee van Active record is dat elk database record een eigen object is. Dit kan in het begin best goed werken, maar op termijn gaat dit alleen maar tegen je werken. Dit omdat de data die je nodig hebt nooit exact de records uit de database zijn, maar de domein objecten. Domein objecten zijn object georiënteerd gemodeleerd. Een database als MySQL is relationeel. Deze modellen werken allebij op een anderen manier. Voor het bouwen van een applicatie is het object georiënteerde model het handigst. Voor het opslaan van data het relationele model. Ik raad je dan ook ten zeerste af om active record te gebruiken!
 
John Berg

John Berg

21/08/2012 16:43:38
Quote Anchor link
@Mark: heel goed verhaal, en ik ben het er ook 100% mee eens.

Echter, voor de poster is zowel activerecord als orm nieuw. De learning curve voor orm is veel steiler dan voor activerecord. Eigenlijk moet je 1 keer in je leven een activerecord implementatie gebruikt hebben, om er achter te komen waarom je dat een volgende keer niet moet gebruiken.

Vandaar mijn voorstel om een proef projectje te doen ;-)
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.