2010-01-07 4 views
0

Je me demande, quels sont les avantages et les inconvénients de ces deux approches pour accéder à des variables:

1) CodeIgniter (-style ce que cela a un nom)

?
public function doSomething() 
{ 
$database = $this->database; // or just $this->database 
} 

2) Le modèle Singleton

public function doSomething() 
{ 
$database = Framework_Database::getInstance(); 
} 

Une différence évidente est que, avec Singleton, vous ne pouvez pas le modifier. Vous pouvez seulement y accéder, mais je ne parle ici que de l'accès à une instance d'une classe ou d'une variable.

Oh, et, y a-t-il d'autres approches?

Répondre

3

Ces deux méthodes d'obtention d'une référence à une instance existante ne sont pas vraiment mutuellement exclusives. La première suppose que la méthode doSomething() est contenue dans une classe qui contient également un champ $ database, qui a été défini sur une instance de Database (peut-être via le constructeur de classe). Ce paramètre initial de la base $ this-> peut très bien avoir été l'utilisation de la méthode getInstance() d'un singleton.

Je suppose alors que vous pourriez comparer les deux sur si vous garderiez une référence à l'instance comme un champ de la classe ou demander toujours une nouvelle référence directement à partir du singleton. Je ne peux pas penser à un moment où cela ne se résumerait pas à une simple préférence, mais en choisir un et s'en tenir à cela. (Personnellement, je choisirais la seconde pour la séparation des préoccupations)

Plus important encore, la cohérence des modèles que vous utilisez dans votre code contribuera grandement à réduire les coûts de maintenance.

Questions connexes