Onderweg naar Classes
Ten eerste heb ik een vraag, wanneer Extend je een class is dat
- alleen als je andermans classes gebruiken en je wilt die classes niet verneuken als je meer functinaliteit
wilt toevoegen dus extend je die class
of
-Kan je alles met 1 (eigen) class doen en is extending niet echt nodig?
Mij site heeft het volgende en ik wil graag wat tips of ik meerdere of 1 class hiervoor nodig heb.
1. Het ophalen,toevoegen, wijzigen, verwijderen van gegevens en een construct dat verbinding maakt met database.
Kan/moet (best practice) dat allemaal in 1 class? ik haal op, voeg toe, wijzig, en verwijder dat voor 3 onderdelen namelijk voor CV's gedeelte, Vacatures gedeelte, en Bedrijven gedeelte, (3 x 4 is 12 forms)
(of) Kan ik dat beter onderscheiden met 3 classes dus class 1.ClassCv 2.ClassVacature 3.ClassBedrijven?
Voor vacatures en cv heb ik ook nog een matching systeem.
Dan heb ik
2. Loginsysteem dat een registratie, een verander wachtwoord, vergeten wachtwoord heeft (ook hier een aparte class voor maken?)
Kan iemand mij hier op weghelpen?
Een class is een op zichzelf staande entiteit die werkt als geheel. Als jij er dingen aan gaat veranderen, zal het regelmatig voorkomen dat je bepaalde dingen zo verandert dat het opeens niet allemaal meer werkt. Gebruik je andermans classes dan gebruik je altijd 'as-is'. Vind jij dat er een noodzaak is om iets te veranderen, dan bouw je een extension, of een soort wrapper of adapter. Zo behoudt de originele class zijn integriteit en kan jij toch die extra functionaliteit erbij krijgen.
Dan over extenden van classes, dat is zo ongeveer de meest misbruikte functionaliteit van OO. Dit is minder vaak noodzakelijk dan veel programmeurs denken. Wouter legt het altijd goed uit door de vraag te stellen: hebben de twee classes een 'heeft-een' of 'is-een' relatie? Alleen in het laatste geval kan je denken aan extenden, in het eerste geval nooit.
Een 'heeft-een' relatie is bijvoorbeeld die tussen een auto en zijn motorblok. Een auto heeft een motorblok, maar is geen motorblok.
Een 'is-een' relatie is Peugeot 206 en een auto. Die hebben een 'is-een' relatie, want een Peugeot 206 is een auto. Heb je dus al een auto class en wil je een Peugeot 206 class maken, dan zou je die van de auto kunnen extenden.
Maar om ook meteen een voorbeeld te geven waarin een 'is-een' relatie niet tot extenden zou moeten leiden: een administrator is een user. Maar toch zou je beter niet een administrator class van de user class kunnen afleiden. Beter is om 1 user class te houden en via andere objecten de eigenschappen van de administrator in die user class te injecteren. Dit geeft je namelijk veel meer flexibiliteit.
Gewijzigd op 28/06/2013 16:10:15 door Erwin H
Quote:
Een 'is-een' relatie is Peugeot 206 en een auto. Die hebben een 'is-een' relatie, want een Peugeot 206 is een auto. Heb je dus al een auto class en wil je een Peugeot 206 class maken, dan zou je die van de auto kunnen extenden. - See more at: http://www.phphulp.nl/php/forum/topic/onderweg-naar-classes/91318/last/#sthash.9QpkFSSg.dpuf
Hoewel dit goed past in mijn vraag (bedankt trouwens!) zou ik ook hier niet gaan extenden. Gewoon speciale motor injecteren, ect. En dan een factory maken die bij het juiste merk en type de auto en zijn onderdelen aan elkaar koppelt.
Om je eerlijk te zijn kon ik geen beter (simpel) voorbeeld bedenken waarbij het echt nuttig is om te extenden....
Bestand 1:
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
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
<?php
class dbConnection
{
protected $db_conn;
private $db_name = 'fake';
private $db_user = 'fake';
private $db_pass = 'fake';
private $db_host = 'fake';
private $config_pw = array('fake' => 'fake');
function connect()
{
try
{
$this->db_conn = new PDO("mysql:host=$this->db_host;dbname=$this->db_name",$this->db_user,$this->db_pass);
$this->db_conn->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION );
return $this->db_conn;
}
catch(PDOException $e)
{
return $e->getMessage();
}
}
}
?>
class dbConnection
{
protected $db_conn;
private $db_name = 'fake';
private $db_user = 'fake';
private $db_pass = 'fake';
private $db_host = 'fake';
private $config_pw = array('fake' => 'fake');
function connect()
{
try
{
$this->db_conn = new PDO("mysql:host=$this->db_host;dbname=$this->db_name",$this->db_user,$this->db_pass);
$this->db_conn->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION );
return $this->db_conn;
}
catch(PDOException $e)
{
return $e->getMessage();
}
}
}
?>
Bestand 2:
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
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
<?php
include_once( 'inc_class/inc_class_fake.php' );
class Bedrijf
{
public $link;
function __construct()
{
$db_connection = new dbConnection();
$this->link = $db_connection->connect();
return $this->link;
}
function showBedrijven()
{
$show = $this->link->prepare("SELECT fake_id, fake_naam, fake_plaats, fake_website FROM fake_records");
$show->execute();
$counts = $show->rowCount();
if($counts >= 1)
{
$result = $show->fetchAll();
}
else
{
$result = $counts;
}
return $result;
}
}
?>
include_once( 'inc_class/inc_class_fake.php' );
class Bedrijf
{
public $link;
function __construct()
{
$db_connection = new dbConnection();
$this->link = $db_connection->connect();
return $this->link;
}
function showBedrijven()
{
$show = $this->link->prepare("SELECT fake_id, fake_naam, fake_plaats, fake_website FROM fake_records");
$show->execute();
$counts = $show->rowCount();
if($counts >= 1)
{
$result = $show->fetchAll();
}
else
{
$result = $counts;
}
return $result;
}
}
?>
Je bovenstaande voorbeeld zal je zien dat je class 'bedrijf' in elk geval meerdere functies gaat krijgen. Nu al maakt die class een query aan, maar voert hem ook uit. Klinkt misschien een beetje muggenziften, maar bedenk eens hoe vaak je diezelfde code gaat gebruiken? Die code om de query uit te voeren wil je dus in je database class hebben, die is daar verantwoordelijk voor. Je bedrijf class geeft alleen de query door en krijgt resultaten terug.
Ook zou ik in de database class niet de configuratie instellingen zetten. Dat betekent namelijk dat je bij een volgend project, met andere instellingen, die class moet aanpassen. Dat wil je niet. Maak daarvoor een config class die de gegevens doorspeelt aan de database class.
Code (php)
1
2
3
4
5
6
7
8
9
10
2
3
4
5
6
7
8
9
10
$show->execute();
$counts = $show->rowCount();
if($counts >= 1)
{
$result = $show->fetchAll();
}
else
{
$result = $counts;
}
$counts = $show->rowCount();
if($counts >= 1)
{
$result = $show->fetchAll();
}
else
{
$result = $counts;
}
Bedankt voor tips
Code (php)
Je database class zal dan de method 'performQuery' (of hoe je het ook wilt noemen) moeten krijgen en in die method de meegegeven query uitvoeren, de resultaten ophalen en teruggeven.
Gewijzigd op 28/06/2013 18:14:57 door Erwin H
Object-Oriented Programming posten?
Gelukkig ben ik geen mod, dus daar houd ik me niet mee bezig ;-)
wat is een goeie map indeling voor een middelgrote project