MVC PDO
klein vraagje over PDO,
Ben het MVC pattern gaan gebruiken. Vroeger gebruikte ik altijd een database class(Na mijn idee veel handiger werkte, niet sneller). Nu gebruik ik PDO statments in het model.
Opbouw
Model > class member
Data > MyPDO extends PDO
De voorbeelden die ik kan vinden over bijvoorbeeld een INSERT vind ik onhandig. Zie overal dat de gehele Query van elke tabel wordt uitgeschreven, in dit geval: in class member.
ik zou graag dit doen in mijn member class:
Dien ik die functies in de class MyPDO te schrijven?
Biedt PDO hier al oplossingen voor?
Moet ik dit wel willen?
Heeft iemand een mooi MyPDO class?
Zou het graag van jullie horen.
Alvast bedankt
Ben het MVC pattern gaan gebruiken. Vroeger gebruikte ik altijd een database class(Na mijn idee veel handiger werkte, niet sneller). Nu gebruik ik PDO statments in het model.
Opbouw
Model > class member
Data > MyPDO extends PDO
De voorbeelden die ik kan vinden over bijvoorbeeld een INSERT vind ik onhandig. Zie overal dat de gehele Query van elke tabel wordt uitgeschreven, in dit geval: in class member.
ik zou graag dit doen in mijn member class:
Dien ik die functies in de class MyPDO te schrijven?
Biedt PDO hier al oplossingen voor?
Moet ik dit wel willen?
Heeft iemand een mooi MyPDO class?
Zou het graag van jullie horen.
Alvast bedankt
Gewijzigd op 01/01/1970 01:00:00 door Mark Beets
Uiteindelijk zal er toch een query moeten komen om naar de database te sturen.
Hiervoor kan je inderdaad allerlei wrappers maken.
Bijvoorbeeld (kan een stuk beter)
Daarnaast heb je ook nog dingen als ActiveRecord pattern en packages die dit soort dingen kunnen als propel etc.
Je kan het zo gek maken als je zelf wilt natuurlijk, maar de bottomline is dat je toch een query moet maken. Met classes kan je proberen een soort DAL (Database Abstraction Layer) te maken.
Uit je bericht kan ik alleen niet echt opmaken wat je precies wilt.
Hiervoor kan je inderdaad allerlei wrappers maken.
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
<?php
class Lode_Database_Select{
public function __construct($fields = '*'){
}
public function from($table){
return $this;
}
public function where(array $conditions = array()){
return $this;
}
public function __toString(){
}
}
////
$sql = new Lode_Database_Select();
$sql->from('tabel')->where('id = 1');
echo $sql;
?>
class Lode_Database_Select{
public function __construct($fields = '*'){
}
public function from($table){
return $this;
}
public function where(array $conditions = array()){
return $this;
}
public function __toString(){
}
}
////
$sql = new Lode_Database_Select();
$sql->from('tabel')->where('id = 1');
echo $sql;
?>
Bijvoorbeeld (kan een stuk beter)
Daarnaast heb je ook nog dingen als ActiveRecord pattern en packages die dit soort dingen kunnen als propel etc.
Je kan het zo gek maken als je zelf wilt natuurlijk, maar de bottomline is dat je toch een query moet maken. Met classes kan je proberen een soort DAL (Database Abstraction Layer) te maken.
Uit je bericht kan ik alleen niet echt opmaken wat je precies wilt.
Bedankt voor je uitleg.
Wat ik bedoel/wil: Zou geen query willen zien in de klasses van mijn model.
Daar zou ik alleen willen zeggen welke TABLE en welke ARRAY ik wil INSERTe (voor DELETE UPDATE is dat natuurlijk weer anders, hou het even bij INSERT)
Dat die queries gemaakt moeten worden snap ik, maar wil die queries niet voor elke tabel en of project apart maken, wil ze laten genereren, zodat ik het overal kan gebruiken(niet me queries moet aan passen als er veld in DB bij komt of af gaat).
Als ik kijk naar voorbeelden van: http://www.phpro.org/tutorials/Introduction-to-PHP-PDO.html.
Dan krijg ik van TRY tot CATCH in mijn model.
Daarom dacht ik, in een klasse van het model praat ik met MyPDO(zoals de code in mijn eerste bericht, MyPDO zie ik als data layer ), MyPDO genereert de queries en geeft resultaat of error terug. Zo krijg je in MyPDO de gehele query generator, houdt je model ook stuk overzichtelijker. MyPDO heeft extends PDO.
Of is dat rare gedachte?
Zijn er frameworks van DAL?
Wat ik bedoel/wil: Zou geen query willen zien in de klasses van mijn model.
Daar zou ik alleen willen zeggen welke TABLE en welke ARRAY ik wil INSERTe (voor DELETE UPDATE is dat natuurlijk weer anders, hou het even bij INSERT)
Dat die queries gemaakt moeten worden snap ik, maar wil die queries niet voor elke tabel en of project apart maken, wil ze laten genereren, zodat ik het overal kan gebruiken(niet me queries moet aan passen als er veld in DB bij komt of af gaat).
Als ik kijk naar voorbeelden van: http://www.phpro.org/tutorials/Introduction-to-PHP-PDO.html.
Dan krijg ik van TRY tot CATCH in mijn model.
Daarom dacht ik, in een klasse van het model praat ik met MyPDO(zoals de code in mijn eerste bericht, MyPDO zie ik als data layer ), MyPDO genereert de queries en geeft resultaat of error terug. Zo krijg je in MyPDO de gehele query generator, houdt je model ook stuk overzichtelijker. MyPDO heeft extends PDO.
Of is dat rare gedachte?
Zijn er frameworks van DAL?
Gewijzigd op 01/01/1970 01:00:00 door Mark Beets
Alle grote frameworks hebben een soort DAL of ActiveRecord pattern volgens mij.
DAL is meer een vakterm.
Bij PDO ontkom je niet aan een exception handler omdat PDO exceptions dwars door een standaard try / catch heen gaan. Dit kan je natuurlijk wel weer in je classes afhandelen.
Al eens gekeken naar bijvoorbeeld Zend Frameworks database classes?
Die heeft ook een PDO variant.
Persoonlijk houd ik helemaal niet van PDO overigens!
DAL is meer een vakterm.
Bij PDO ontkom je niet aan een exception handler omdat PDO exceptions dwars door een standaard try / catch heen gaan. Dit kan je natuurlijk wel weer in je classes afhandelen.
Al eens gekeken naar bijvoorbeeld Zend Frameworks database classes?
Die heeft ook een PDO variant.
Persoonlijk houd ik helemaal niet van PDO overigens!
'Lode:
Bij PDO ontkom je niet aan een exception handler omdat PDO exceptions dwars door een standaard try / catch heen gaan. Dit kan je natuurlijk wel weer in je classes afhandelen.
In mijn ervaring is PDOException een uitbreiding van Exception, en wordt hij (dus) ook gewoon in een try/catch-blok opgevangen dat Exception opvangen wil.
Misschien ter inspiratie, je kan ook proberen zoveel mogelijk alle SQL code uit je programma te verbergen, dus nog abstracter gaan dan het voorbeeldje van Lode. Geen from, of where, of velden selecteren, maar puur condities opgeven. Voorbeeldje:
Code (php)
en dan is $bedrijven een "array" met allemaal instanties van de klasse Bedrijf. (Naja, 2 instanties, een bedrijf met de naam 'bedrijf a', en eentje met, naja, kan je wel raden ;) )
Het nadeel is dat je een groot deel van de kracht van SQL verliest. Dit is deels te compenseren door met VIEWS in je database de complexe queries om te vormen tot virtuele tabellen waar je dan weer simpele statements, zoals die gegenereerd wordt uit het stukje code hierboven, op los kan laten. Het voordeel is dat je bijna alle SQL code van je applicatie verplaatst naar de database en naar de methods die de query uit de array die je aan findRecords meegeeft genereert. En dat is weer makkelijk mocht je ooit beslissen een andere database (of een geheel ander soort database, MapReduce implementeren hiermee is ook redelijk gemakkelijk) te gaan gebruiken.
... en het staat leuk :P
ps: een 'experimentele implementatie' hiervan.




