[OOP] Een CMS, databaseStorage of alleen Mappers

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Milo S

Milo S

02/05/2013 17:43:47
Quote Anchor link
Beste,

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.
 
PHP hulp

PHP hulp

28/11/2024 01:29:07
 
Wouter J

Wouter J

02/05/2013 17:59:24
Quote Anchor link
Ik zou het zelf over laten aan een andere library. De Doctrine DBAL library bied bijv. een extensie boven op de PDO class. Het bied mogelijkheden tot mooie OO dingen, bijv:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
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();
?>


Maar het kan ook de lower level OO aan (aangezien het nog steeds PDO is):
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
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();
?>


En het heeft ook nog wat mooiere helper functies:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
<?php
$result
= $dbal->executeQuery('SELECT title FROM pages WHERE id = ?', array(3)); // prepared statements
$fetchedResults = $result->fetch();

$fetchedResults = $dbal->fetchAssoc('SELECT title FROM pages WHERE id = ?', array(3)); // + fetchen
?>


En het bied ook nog een mooie tussenvorm:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
<?php
$dbal
->insert('pages', array(
    'title' => 'Hello World',
    // ...
));
?>


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!
 
Milo S

Milo S

02/05/2013 19:47:14
Quote Anchor link
Maar Wouter, is dat niet in een keer weer veel van het goede? Bedoel een hele library inladen voor slechts enkele queries? Kan ik dan niet beter zeggen in deze fase gewoon OO te gebruiken in mijn UserMapper? Zo behoud ik alle functionaliteiten en hoef ik niet direct een hele lib in te laden?

Als ik het dan zou doen, moet doctrine de DatabaseStorage over gaan nemen?
 
Wouter J

Wouter J

02/05/2013 20:48:26
Quote Anchor link
Ik denk dat je bedoelt dat je gewoon SQL in je UserMapper wilt gebruiken.

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.
 
Milo S

Milo S

02/05/2013 20:58:50
Quote Anchor link
Ja inderdaad dat bedoelde ik.

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..
 
Wouter J

Wouter J

02/05/2013 22:12:45
Quote Anchor link
In PDO, Doctrine DBAL, oid kun je nog steeds join queries uitvoeren.

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.
 
Milo S

Milo S

02/05/2013 22:25:45
Quote Anchor link
Ik bedoelde die Joins meer over de manier zoals ik het nu bedacht had.

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
 
Wouter J

Wouter J

02/05/2013 22:28:27
Quote Anchor link
Doctrine extends PDO en bied wat extra functionaliteiten. Het is gewoon een library, een verzameling klassen. PDO daarin tegen is een PHP extensie, geschreven in C dus.
Je kunt beide niet echt met elkaar vergelijken.
 
Milo S

Milo S

02/05/2013 22:40:24
Quote Anchor link
Dat was precies wat ik bedoelde alleen ik verwoord het onhandig...

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
 
Wouter J

Wouter J

02/05/2013 22:50:22
Quote Anchor link
Storage klassen is een van die dingen die ik hier op het forum verkondig, maar wat ik zelf nog nooit heb uitgevoerd. Het is namelijk best lastig om het te doen op de manier die jij wilt (en de manier die er ook moet zijn). Misschien is het wel een ideaal die nooit goed uitgewerkt kan worden... Ik ga er ook nog eens over nadenken
Gewijzigd op 02/05/2013 22:50:58 door Wouter J
 



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.