Page 1 sur 1

Optimisation POO

Posté : 30 nov. 2013, 20:59
par h0_noMan
Bonjour,

Mon code actuel fonctionne mais j'ai l'impression d'avoir complexifier plus que nécessaire.
Je suis en train de créer une application PHP avec 2 connexions PDO (à 2 serveurs distinct), un système de permissions et qui puisse dans un avenir avoir une gestion des langues.

Plutôt que de créer des instances de mes classes (Database, Permission, Language) et de les trimballer partout dans les constructeurs, j'ai fait le choix de créer une classe GeneralConfig (Instanciation unique avec un singleton) qui contient deux instances de ma classe Database, une instance de ma classe Permission et une instance (Pour le moment vide) de ma classe Language ainsi que diverses variables nécessaire pour mon application.
class GeneralConfig{

	private static $_configInstance;
	public $sqlServer1;
	public $sqlServer2;
	public $permission;
	public $language;
	
	private function __construct()
	{
		$this->sqlServer1 = new Database();
		$this->sqlServer2 = new Database();
		$this->permission = new Permission();
		$this->language   = new Language();
	}
	
	public static function getInstance()
	{
		if(is_null(self::$_configInstance))
			self::$_configInstance = new GeneralConfig();
		return self::$_configInstance;
	}
}
Pour mes classes "objet" (Account, Team, Item, Characters, ...), j'ai créer une classe parente ConfigModel pour que chacune de mes classes "objet" puisse accéder à l'instance unique de ma classe GeneralConfig (Et donc aux instances de Database, Permission et Language)
abstract class ConfigModel{
	
	protected static $_config = null;
	
	protected static function initConfig()
	{
		self::$_config = GeneralConfig::getInstance();
	}
	
	protected function __construct()
	{
		self::initConfig();
	}
}
Le soucis, c'est que dans chacune de mes classes filles "objet" (Account, Team, Item, Characters, ...), je dois appeler parent::initConfig() dans chaque methodes statiques (Account::searchByIP() par exemple).
N'y aurait-il pas un moyen d'éviter cet appel en changeant la structure ?

Merci d'avance.

Re: Optimisation POO

Posté : 30 nov. 2013, 21:33
par moogli
Salut,

Effectivement tu n'es pas forcément partis du bon pied ;)

Tu n'as pas besoin de balader tous ces objets qui seront inutile.

Il faut que tu fasse de l'injection de dépendance.

Cela limitera la couplage entre les objets (pas besoin de connaître le SGBD pour utiliser un objet pdt par exemple, tant que tu fait du sql standard. ;) ).

Du coup ton contrôleur doit gérer ces dépendance mais il n'y a que a que tu créer une instance de chaque objet ;)

@+

Re: Optimisation POO

Posté : 30 nov. 2013, 22:54
par h0_noMan
Alors :
J'ai modifié ma classe GeneralConfig pour y mettre une instance statique privée de chacune de mes classes (2x Database, Permission et Language) et passer la classe en abstract.
J'ai une fonction publique statique pour instancier (si l'instance n'est pas déjà créée) chacune des instances et les renvoyer.
Mes classes "objets" hérite maintenant directement de GeneralConfig.

Au final, je me retrouve avec une classe abstraite pleine de variables et fonctions statique.

Re: [RESOLU] Optimisation POO

Posté : 01 déc. 2013, 11:54
par moogli
Sûrement fonctionnel mais côté modèle c'est moche ;)

@+