hoi iedereen,

ik ben bezig om en database class te hereschrijven en nu wil ik hier singleton gaan gebruiken.
nu heb ik hier nog nooit mee gewerkt en heb ik geen idee waar ik moet kijken ik google nu op singleton tutorials maar kom geen bruikbare tegeen. weet iemand een drgelijke tutorial

alvast bedank ralph
Waarom zou je dat willen is de eerste en enige goede vraag. Over het algemeen worden singletons als 'evil' beschouwd en ik ben nog nooit een echt goede reden tegengekomen om het daadwerkelijk te gebruiken.
omdat mijn stage begeleider wil dat er maar 1 verbinding is en ik geen betere oplossing kan bedenken
Ik ben op dit moment bezig met een opdracht waarbij ik data uit verschillende sources kan halen. Hier heb ik ook Singleton op toegepast zodat de (het heeft een MVVM structur) ViewModel een aanspreek punt heeft. Ik geloof best dat hier betere oplossingen voor zijn, want lees ook overal dat het geen goede pattern is.

ergens plaatsen waar iedereen bij kan
de logica die bepaalt welke data source wordt gebruikt erom heen zetten

	var connection = new db();
Ralph vander tang op 16/08/2013 10:19:09

omdat mijn stage begeleider wil dat er maar 1 verbinding is en ik geen betere oplossing kan bedenken

Eén verbinding per wat? Per applicatie, per gebruiker, per sessie, per site?
heb me vorige bericht gewijzigd.
Ik heb het toegepast in een Javascript project.

Ik zou als ik jouw was even kijken of php een betere manier hier voor heeft.
Dan kan je er beter voor zorgen dat elke keer dat er een database connectie nodig, gewoon hetzelfde object wordt gebruikt. Dat wil niet zeggen dat er geen ander object aangemaakt zou kunnen worden, het betekent alleen dat je applicatie ervoor moet zorgen dat het niet gebeurt.

Overigens, zou je database class en connectie beter nog kunnen scheiden. Dan kan je wel meerdere database objecten hebben, maar die maken alsnog gebruik van slechts 1 connectie. Dit geeft je ook de flexibiliteit, mocht dat ooit nodig zijn, om meerdere connecties naar verschillende databases in 1 applicatie te gebruiken.

Als je gebruik maakt van een factory dan is het heel simpel om 1 connectie te gebruiken. Elke keer dat er een database class met connectie nodig is checkt de factory of er al een connectie object is. Zo ja, dan wordt die gebruikt, zo nee dan wordt er 1 aangemaakt.
zou iemand naar deze code kunnen kijken en mij zeggen of dit zo werkt ?

<?
public function __construct() {
$this->server = 'localhost';
$this->database = '***';
$this->username = '***';
$this->password = '****';
$this->debug = true;

$this->connect();
}
//conectie
private function connect() {
try {

$this->db = new PDO("mysql:host=".$this->server."; dbname=".$this->database, $this->username, $this->password);

}
catch (PDOException $e) {

die('Error: Database connection failed');
}
}

public static function getInstance() {
if(!self::$instance) {
self::$instance = new test();
}
return self::$instance;
}

?>

Toevoeging op 16/08/2013 11:17:00:

dus erwin als ik het goed begrijp zou jiij de connectie eruit halen en deze onder brengen in een andere class maar hoe controller je deze dan in de databse class?
Je zou het kunnen omkeren. In de constructor $this->getInstance() aanroepen en in getInstance() alleen $this->connect() aanroepen als er nog geen instantie is.
Ralph vander tang op 16/08/2013 11:03:23

dus erwin als ik het goed begrijp zou jiij de connectie eruit halen en deze onder brengen in een andere class maar hoe controller je deze dan in de databse class?

Absoluut ja. Elke class mag maar 1 functionaliteit, maar 1 doel hebben. Connectie beheren met een database en queries uitvoeren erop zijn al twee taken.

Wat ik zou doen is in de constructor van de database class een connectie object meegeven. Zodra de database class iets moet doen op de database zal die dan aan het connectie object vragen of er een connectie is, welke op zijn beurt die connectie op dat moment desnoods aanmaakt. De database class hoeft verder niet te weten hoe dat gebeurt en hoeft dus ook niets te controleren, dat doet de connectie class.

Reageren