Database klasse ontwerpen
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<?php
$exceptionHandler = new ExceptionHandler();
$errorHandler = new ErrorHandler();
$mysqlErrorHandler = new MySQLErrorHanlder();
// vang alle fouten op met de ErrorHandler
set_error_handler(array($errorHandler, 'handle'));
try {
// ... iets
} catch (Exception $e) {
// Vang alle exceptions op met een ExceptionHandler
$exceptionHanlder->handle($e);
}
if (mysql_connect(...)) {
$mysqlErrorHanlder->handle(mysql_error());
}
$exceptionHandler = new ExceptionHandler();
$errorHandler = new ErrorHandler();
$mysqlErrorHandler = new MySQLErrorHanlder();
// vang alle fouten op met de ErrorHandler
set_error_handler(array($errorHandler, 'handle'));
try {
// ... iets
} catch (Exception $e) {
// Vang alle exceptions op met een ExceptionHandler
$exceptionHanlder->handle($e);
}
if (mysql_connect(...)) {
$mysqlErrorHanlder->handle(mysql_error());
}
Ik heb intussen even mijn UML geüpdatet. Nu vraag ik mij alleen af of het interessant is de class 'Result' te maken. Ik kan namelijk geen overeenkomstige methodes bedenken.
Verder bij de Controller, daar heb ik ook geen idee van welke methodes er altijd nodig zouden zijn.
Quote:
Nu vraag ik mij alleen af of het interessant is de class 'Result' te maken. Ik kan namelijk geen overeenkomstige methodes bedenken.
Ja, een superklasse is altijd een goed idee ook als er geen overeenkomstige methods zijn. Maar de DataResult klasse kun je toch nog wel wat uitbreiden? Met een zoek method bijv (Seekable). En nog wel wat meer dingen.
Quote:
Verder bij de Controller, daar heb ik ook geen idee van welke methodes er altijd nodig zouden zijn.
Wel, kijk eens wat voor functies Symfony in zijn controller heeft:
http://api.symfony.com/master/Symfony/Bundle/FrameworkBundle/Controller/Controller.html
Of Zend Framework: http://framework.zend.com/apidoc/core/db_Zend_Controller_Action.html
Of die van Cake: http://api.cakephp.org/class/controller
Countable interface en ga zo maar door. (deze countable interface kun je dan ook plaatsen bij de EditResult klasse, waardoor je getAffectedRows() kunt vergeten)
De query method van de DB klasse zou ik wat uitbreiden, zodat je kunt werken met prepared statements.
En je kan het natuurlijk nog mooier maken en er een ORM achtig iets van maken. waardoor je een entity (object) kan omzetten in een database result:
Je kan het natuurlijk zover uitbouwen als je wilt. Bijv. met nog een De query method van de DB klasse zou ik wat uitbreiden, zodat je kunt werken met prepared statements.
En je kan het natuurlijk nog mooier maken en er een ORM achtig iets van maken. waardoor je een entity (object) kan omzetten in een database result:
Code (php)
1
2
3
4
5
6
7
8
9
10
2
3
4
5
6
7
8
9
10
<?php
$user = new User('Jasper');
$user->setAge(24);
$user->setEmail(...);
// ...
$orm = new ORM();
$orm->persist($user);
$orm->flush();
?>
$user = new User('Jasper');
$user->setAge(24);
$user->setEmail(...);
// ...
$orm = new ORM();
$orm->persist($user);
$orm->flush();
?>
Ik ben nu even aan het kijken hoe dat ORM in zijn werk gaat :-)
Alweer, bedankt voor je bijdrage!
Toevoeging op 11/07/2012 15:43:30:
Even trouwens nog een update van mijn UML:
Ik geef dus, zoals je kan zien op mijn UML, een Config object mee. Met dat config object kan ik dus bv. de database-host opvragen en dergelijke. Zodanig dat ik iets als volgt kan doen:
Code (php)
1
2
3
4
5
2
3
4
5
<?php
$databaseConfig = $this->getConfig()->get('database_settings'); //geeft een array terug
//$host = $this->getConfig()->get('host'); //werkt ook eventueel
$this->databaseHandle = new \PDO('mysql:host='.$databaseConfig['host']); //uiteraard alles invullen
?>
$databaseConfig = $this->getConfig()->get('database_settings'); //geeft een array terug
//$host = $this->getConfig()->get('host'); //werkt ook eventueel
$this->databaseHandle = new \PDO('mysql:host='.$databaseConfig['host']); //uiteraard alles invullen
?>
Alleen heb ik hier niet echt een lekker gevoel bij. Ik heb de indruk dat dit te hard-coded is. Graag jullie meningen!
Gewijzigd op 17/07/2012 12:56:18 door Write Down
StdClass. Staat altijd wat mooier:
Zo zou ik het ook doen. Al zou ik geen array teruggeven, maar een Ik heb eigenlijk twee soorten 'mogelijkheden' betreft een get. Stel dat de volgende array in mijn config gebeuren zit zeg maar:
Code (php)
Zou je het dan ook mogelijk maken om:
te gebruiken?
Bump