Votre avis sur mon architecture

Eléphanteau du PHP | 17 Messages

11 sept. 2008, 10:49

Bonjour à tous,

Alors voila pour mon premier message sur ce magnifique forum je viens vous demander votre avis sur l'architecture que j'ai choisi pour mon site Web.

Je souhaite en effet implémenter un modèle MCV propres et comme c'est une première pour moi (sous php tout du moins) et que j'ai assez de mal à concevoir bien cela, je viens vous demandé votre avis.


Alors pour commencé le contrôleur :

J'ai opter pour un contrôleur principal.

Pour cela point d'objet, en effet je trouve stupide de perdre des ressources à instanciée un objet ne contenant qu'une fonction. Donc ce contrôleur ce compose essentiellement d'un switch.
switch($_GET['page']){
		case 'a' :
			...
			break;
			
		case 'b' :
			...
			break;
Ce contrôleur instancie les classe métier (modèles) nécessaire pour exécuter les actions.

les classes métier instancie éventuellement un singleton de connexion à la bdd.

Enfin les vues sont appelé par le contrôleur (si mes souvenir sont bons on parle d'architecture centralisé ( tout passe par le contrôleur) par opposition à l'architecture distribué (ou les modèles font appel au vues))

Pour cela j'ai une "template"(template.php) le graphisme générale du site qui ne bouge pas et qui appelle les différent contenu (ici ex.php)


//dans le switch du controleur 
affichage('ex');

//fonction affichage
function affichage($view){
		
	$filename='./views/'.$view.'.php';
	$affichage['contenu']=$filename;
		
	//affichage de la "template"
	include('./views/template.php');
}

//template.php
...
include($affichage['contenu']);
...

Voila je suis à l'écoute de vos avis, et de vos questions

ps : c'est un application assez "petite".

Mammouth du PHP | 1668 Messages

11 sept. 2008, 12:36

J'ai opter pour un contrôleur principal.

Pour cela point d'objet, en effet je trouve stupide de perdre des ressources à instanciée un objet ne contenant qu'une fonction. Donc ce contrôleur ce compose essentiellement d'un switch.
Certes, je suis de ton avis pour des fonctions distincte, mais tu n'a pas besoin d'instancier un objet pour pouvoir utiliser ses méthodes, du moins, celles ui ne sont pas censer agir sur lui-même, grâce à la méthode static...

Concernant ton architecture, ça me parrait globalement bon, mise à part template.php qui me gène :/
"À ceux qui poursuivent leurs rêves et se spécialisent dans l'impossible" Joseph Kong

10 ans de PHP, déjà.

"moi jtrouve que katagoto il déchire!" Nagol

Eléphanteau du PHP | 17 Messages

11 sept. 2008, 18:46

Pour le controleur ont est d'accord j'aurais pus faire une classe statique mes bon sur ce coup la le procédurale me va bien.

sinon qu'est ce qui te gène dans template.php exactement ? globalement tu ferait comment toi ?

enfin déjà tu me rassure sur le fait que je soit pas totalement dans le faux !

Eléphanteau du PHP | 17 Messages

27 oct. 2008, 19:01

Un petit up pour éventuellement d'autre feedback.

ViPHP
ViPHP | 1136 Messages

27 oct. 2008, 20:09

Personnellement , pour moi un controller , ne doit pas être modifier en fonction de l'appli .. il doit être 100% générique ...

C Controller

Donc un problème avec le switch , il doit être capable , en fonction de l'url , d'appeler le controller X ou Y et si l'on ajoute un controller Y à un module , l'on ne doit pas le déclarer dans le gestionnaire controllers sinon , ce n'est plus générique donc complexe à maintenir dans le temps ..

M model
les classes métier instancie éventuellement un singleton de connexion à la bdd
ca c'est bien , ca ne sert à rien d'instancier 4 fois une classe pour 4 requetes differentes ... donc singleton is good :-)

V Vues
Pour cela j'ai une "template"(template.php) le graphisme générale du site qui ne bouge pas et qui appelle les différent contenu (ici ex.php)
Je ne pense pas que ce soit à la vue d'appeler les differents contenu , mais aux controllers d'effectuer les traitements sur les données , et de les envoyer à la vue , pour enfin , l'afficher ...

Voilà pour mon avis , maintenant , saches que tu es sur la bonne voie , car lorsque j'ai commencé à développer pour une boite , je suis aussi parti sur un switch/case pour essayer de séparer en modules ..
Au début ça va , puis le projet prend de l'ampleur , puis celà devient plus maintenable ..
Un nouveau développement est donc nécessaire ...
Une structure beaucoup plus souple avec beaucoup plus de code générique ... (sans forcement utiliser des framework tout fait dont on ne connaît pas tous les rouages ) , et toujours en restant sur du MVC

Voilà pour mon avis .. :)

Mammouth du PHP | 959 Messages

28 oct. 2008, 11:56

mise à part template.php qui me gène :/
Je suis du même avis que toi ;)

Moi je fonctionne pareil, mais en fait, au haut du doctype du index.php, j'ai mon switch, et au milieu (le contenu) j'ai :
if( !@include('./pages/'.page.'.php') ){
        echo 'Erreur lors de l\'inclusion de le page !';
}
Et dans chaque "case" de mon switch, si la page en question à besoin de MySQL par exemple, je crée une variable
$need_mysql = TRUE;
et à la fin du switch, je fais ça :
if( isset($need_mysql) && $need_mysql == TRUE ){
	connect_db(); // Fonction dans un fichier inclu en haut du switch qui sers à se connecter à la BdD
}
(pareil à la fin du fichier (après </html>) je ferme la connexion si elle a été ouverte)


Pareil pour les fichiers javascript...

Je pense que ma solution en ai une bonne pour éviter de consommer des ressources pour rien, comme des connexion à MySQL inutiles, inclusion de fichiers javascript alors que y'en a pas besoin pour une page... etc...
Voilà, se n'est que mon avis ;)