Beste mensen,
om toch wat meer structuur aan te brengen in mijn code ben ik me nu eens aan het verdiepen in VO's en DAO's. Echter om toch te voorkomen dat ik veelvuldig dezelfde code aan het kloppen ben (hoewel ik weet dat je VO's en DAO's kunt laten genereren op basis van je tabelstructuur) wil ik toch een basis object maken. Hieronder een stukje van de code.
tegelijkertijd heb ik ook 2 DAO's: 1 voor de specifieke class en 1 ObjectDAO waarin de gebruikelijke get / save / delete methods zitten. Die laatste wordt gebruikt voor de databaseclass.
Toch heb ik het gevoel dat ik nu dingen door elkaar aan het halen ben. Of zit ik op de juiste weg?
Bovendien wordt de constructor van de extended class niet aangeroepen maar ik kan nergens terugvinden of dat daadwerklijk correct is!
Tips zijn erg welkom!
om toch wat meer structuur aan te brengen in mijn code ben ik me nu eens aan het verdiepen in VO's en DAO's. Echter om toch te voorkomen dat ik veelvuldig dezelfde code aan het kloppen ben (hoewel ik weet dat je VO's en DAO's kunt laten genereren op basis van je tabelstructuur) wil ik toch een basis object maken. Hieronder een stukje van de 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
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
| class UserVO extends ObjectVO { public $object_field = array(); public function __construct($id=false) { $this->object_field['ID'] = array('dbfield' => "user_id", 'vartype' => "int", 'length' => 50 ); $this->object_field['Username'] = array('dbfield' => "user_username", 'vartype' => "string", 'length' => 20 ); $this->object_field['Password'] = array('dbfield' => "user_password", 'vartype' => "string", 'length' => 20 ); $this->object_field['Gender '] = array('dbfield' => "user_gender", 'vartype' => "string", 'length' => 30 ); $this->object_field['Firstname'] = array('dbfield' => "user_firstname", 'vartype' => "string", 'length' => 30 ); $this->object_field['Prefix '] = array('dbfield' => "user_prefix", 'vartype' => "string", 'length' => 30 ); $this->object_field['Lastname'] = array('dbfield' => "user_lastname", 'vartype' => "string", 'length' => 30 ); } } class ObjectVO { public $changed_values = array(); public $original_values = array(); public function __construct() { print_r( $this->object_field ); } private function __init() { } public function __set($property, $value) { // check if property is mapped with database if ( $this->existProperty($property) ) { // check if property has valid value if ( $this->validatePropertyValue($property, $value) ) { $this->changed_values[$property] = $value; } } } } |
tegelijkertijd heb ik ook 2 DAO's: 1 voor de specifieke class en 1 ObjectDAO waarin de gebruikelijke get / save / delete methods zitten. Die laatste wordt gebruikt voor de databaseclass.
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
| class UserDAO extends ObjectDAO { public $oVO; public $table; public $primarykey; public function __construct($id=false) { $this->table = 'user'; $this->primarykey = 'user_id'; $this->oVO = 'UserVO'; if($id) { //$this->database_info['ID'] = $id; //$this->__init($this->database_info['ID']); $this->__init(); } } } class ObjectDAO extends cDbInterface { public $a_oRetArr = array(); public function __init() { if($this->_connection == ""){ parent::cDbInterface(); } } public function getByID($iID, $sFilter = NULL) { $sSql = "select * from {$this->table} where {$this->primarykey} = '".$iID."' "; $aResult = $this->doQueryResult($sSql,MYSQL_ASSOC); //$classname = get_class($this->oVO); $classname = $this->oVO; $VO = new UserVO(); $this->getFromResult(&$VO,$aResult[0]); return $VO; } private function getFromResult(&$VO, $aResult) { foreach ($aResult as $key =>$value){ $VO->original_values[$key] = $value; } } } |
Toch heb ik het gevoel dat ik nu dingen door elkaar aan het halen ben. Of zit ik op de juiste weg?
Bovendien wordt de constructor van de extended class niet aangeroepen maar ik kan nergens terugvinden of dat daadwerklijk correct is!
Tips zijn erg welkom!