[OOP] Een CMS, databaseStorage of alleen Mappers
Voor mijn vraag hebben jullie wellicht mijn UML nodig.
In mijn ontwerp van mijn nieuwe CMS heb ik verscheidene mappers, interfaces en classes. Nu twijfel ik alleen ernstig over mijn storage classe...
Zou ik dit concept er bij moeten doen of juist gewoon af handelen in de Mappers.
+ Ik hoef geen queries meer te schrijven
- Ik ben beperkt in mijn queries...
Wat zouden jullie doen? De klasse zo maken dat ik alle soorten SQL statements kan gebruiken. Denk aan het joinen van tabellen of de queries in mijn mappers maken. Ik krijg een beetje het gevoel van dubbel werk nu.
Ik heb graag jullie mening.
Code (php)
1
2
3
4
5
6
7
8
2
3
4
5
6
7
8
<?php
$query = $dbal->createQueryBuilder()
->select(array('title', 'publish_date'))
->from('pages')
->where('publish_date > ?')
->orderBy('publish_date')
->getQuery();
?>
$query = $dbal->createQueryBuilder()
->select(array('title', 'publish_date'))
->from('pages')
->where('publish_date > ?')
->orderBy('publish_date')
->getQuery();
?>
Maar het kan ook de lower level OO aan (aangezien het nog steeds PDO is):
Code (php)
1
2
3
4
5
2
3
4
5
<?php
$result = $dbal->query('SELECT title, publish_date FROM pages WHERE publish_date > 2012-05-06 ORDER BY publish_date');
$fetchedResults = $result->fetchAll();
?>
$result = $dbal->query('SELECT title, publish_date FROM pages WHERE publish_date > 2012-05-06 ORDER BY publish_date');
$fetchedResults = $result->fetchAll();
?>
En het heeft ook nog wat mooiere helper functies:
Code (php)
En het bied ook nog een mooie tussenvorm:
Sidenote: Zie dit niet als een reclame praatje, maar als een reactie met 1 tip (niet het wiel onnodig opnieuw uitvinden) en heel veel inspiratie.
Offtopic:
Geweldig om te zien dat je het nadenken zo serieus neemt, petje af!
Als ik het dan zou doen, moet doctrine de DatabaseStorage over gaan nemen?
Ja, dit kan. Maar dan moet je wel met PDO gaan werken om niet afhankelijk te zijn van een MySQL database.
Met storage klassen schuif je de beslissing welke DB je gebruikt nog een laagje op. Ik vind dat wel mooi, maar jij misschien niet.
En "een hele library inladen" geldt in PHP niet. Het zijn hoogstens meer bestanden op de server, alleen de benodigde klassen worden ingeladen.
Ik ben al begonnen met PDO, de conclusie dat ik anders te afhankelijk werd had ik inderdaad getrokken...
Ik vind het principe heel mooi, zo beperk je nog meer de schade bij een overstap naar bijvoorbeeld een tekst document. Waarom ik dat zou doen, geen idee, maar het gaat even om het idee.
Het punt is alleen dat ik me dan wat beperkt voel in de queries. Althans in de opzet die ik nu had. Aan de andere kant, vaak als je moet joinen gaat het om bijvoorbeeld de auteur ophalen van een nieuwsbericht..
Als je het dan van OO kant bekijkt gebruik je hier beide aparte klasse voor en gebruik je dus 2 losse queries.
Wat vind jij? Persoonlijk vind ik voor nu Doctrine nog wat een te grote stap voor de mogelijkheid die ik nodig heb..
En als je OO bekijkt gebruik je nog steeds 1 query, maar je maakt daar 2 objecten mee.
Eventueel kun je kijken naar een ORM als Doctrine ORM of Propel ORM. Dat is weer een andere vorm van datamappers en dat zien we vaak terug in grote applicaties.
Waar je de brug van de overstap wilt hebben is aan jou. Of je plaatst hem in de mapper of in de storage klassen.
De UserMapper stuurt een array naar de databasestorage class daar wordt de query gemaakt. Dan wordt ik dus beperkt. Ik gebruik nu PDO dus dan heb ik Doctrine überhaupt niet nodig. Als ik het goed begrijp ziin get allebei libraries alleen doctrine zet je apart op je server en bied dat net wat meer als gewoon PDO.
Gewijzigd op 02/05/2013 22:26:52 door Milo S
Je kunt beide niet echt met elkaar vergelijken.
Nu zit ik alleen nog met hoe ik dat bij mij nu ga doen... Het opschuiven naar de storage klasse vind ik een handig idee.. Ik moet het alleen zo zien te krijge dat ik wel de mogelijkheid van uitgebreide Queries behoudt..
Ik maal hier nog even over door. Voorstellen hooor ik graag
Gewijzigd op 02/05/2013 22:50:58 door Wouter J