|
Publicité ' | ||||||||||||||||||||||||
|
|
#1 |
![]() ![]() Alain Sahli Ingénieur développement logiciels Inscription : décembre 2004 Messages : 1 086 ![]() |
Bonjour,
Je me pose une question depuis un bon moment et je n'ai pas vraiment trouvé de réponse à ma question. Je vous l'expose: Selon le modèle MVC les contrôleurs devraient juste s'occuper de la "connexion" entre les modèles et les vues. Et c'est les classes de la couche métier qui doivent "travailler", dans l'action d'un contrôleur il ne devrait y avoir que quelques lignes de code. (Arrêter moi là si ce n'est pas juste.) Cependant dans tous les tutoriels que j'ai lu sur le Zend Framework il n'y a pas vraiment de classes "métier" tout est toujours directement codé dans les actions des contrôleurs. Alors est-ce correct de tous coder directement dans les contrôleurs lorsqu'on on utilise le framework de Zend ou est-ce qu'il faut faire des classes métier? S'il faut faire des classes métier j'ai un peu de la peine à me m'imaginer ce que sa donnerait. Car dans les contrôleurs on utilise beaucoup le $this pour accéder aux valeurs passées en post ou en get, pour passer des valeurs à la vue, pour rediriger, etc... Si on fait des classes métier ce serais stupide de passer ce $this car sa reviendrais à créer une sous-couche inutile. Voilà j'espère que quelqu'un pourra m'éclaircir. Merci d'avance.
__________________
Blog - Mon espace developpez - Vous voulez un site internet ? eZ Publish Certified developer |
|
00
|
|
|
#2 |
![]() ![]() Jean-Pierre Inscription : août 2005 Messages : 333 ![]() |
Hello,
En effet, selon le pattern MVC, le contrôleur ne doit faire que des "liaisons" entre les modèles et les vues. Il est vrai qu'on retrouve souvent dans les exemples ici et là, du code métier dans les contrôleurs. Il y a trois raisons à cela :
Le choix de la facilité a toujours son effet boomerang. Toujours .Bref... Le code métier - à proprement dit - n'a rien à faire dans un contrôleur d'action. Simple question de rigueur !
__________________
Mes articles DVP : http://jp-grossglauser.developpez.com |
|
|
00
|
|
|
#3 |
![]() ![]() Alain Sahli Ingénieur développement logiciels Inscription : décembre 2004 Messages : 1 086 ![]() |
Ok, il me semblait bien.
Mais alors où est-ce que je stocke les classes métier? Je fais un dossier dans library genre My et je crée les classe My_Nom-du-controller ?? Y a une structure à respecter? Utiliser des classes métier va considérablement faciliter l'implémentation des tests.
__________________
Blog - Mon espace developpez - Vous voulez un site internet ? eZ Publish Certified developer |
|
00
|
|
|
#4 |
|
Expert Confirmé Sénior
![]() ![]() |
Pourquoi un dossier dans library ?
Je mettrais plutôt un dossier logic ou bll dans application, non ? Ensuite, au niveau du nommage des classes, je ne les lierais pas au nom du contrôleur... Une classe métier a un nom propre et peut être utilisée par différents contrôleurs.
__________________
Tous mes tutos (Java, PHP, SQL-Server, Hardware) - Mon blog anglais JTheque - Site - Forum |
|
00
|
|
|
#5 |
![]() ![]() Alain Sahli Ingénieur développement logiciels Inscription : décembre 2004 Messages : 1 086 ![]() |
Oui, j'ai pas bien réfléchis... je vais faire un dossier logic par module. Par contre pour le nom des classes je ne sais pas encore... Le nom des contôleurs sépare bien les différentes parties du module je trouve.
__________________
Blog - Mon espace developpez - Vous voulez un site internet ? eZ Publish Certified developer |
|
00
|
|
|
#6 | |
|
Expert Confirmé Sénior
![]() ![]() |
Citation:
Par exemple, si toute la partie de gestion des membres est dans le contrôleur MembresController, tu peux tout à fait nommer ta classe métier Membres
__________________
Tous mes tutos (Java, PHP, SQL-Server, Hardware) - Mon blog anglais JTheque - Site - Forum |
|
|
00
|
|
|
#7 |
![]() ![]() Jean-Pierre Inscription : août 2005 Messages : 333 ![]() |
Pourquoi ne pas simplement utiliser la convention de noms du framework ?
Ex. : MembresController. My_Db_Table_Membres (pour la classe métier "Membres" qui étend Zend_Db_Table...) My_Db_Table_Row_Membre (... Pour Zend_Db_Row...) My_Controller_Plugin_Auth (pour un plugin "Auth" qui étend Zend_Controller_Plugin_Abstract) etc. Le tout selon l'arborescence décrite dans la doc. Si ton application est modulaire, à ce moment là tu devras ajouter un préxif aux contrôleurs (à l'exception du module 'default'). Cette convention est simple et plutôt efficace... On l'a retrouve d'ailleurs dans PHPUnit, PEAR & co. Faut pas aller chercher plus loin !
__________________
Mes articles DVP : http://jp-grossglauser.developpez.com |
|
|
00
|
|
|
#8 |
|
Nouveau Membre du Club
![]() Inscription : janvier 2007 Messages : 41 ![]() |
J'ai le même avis que Guardian_7.
Personnellement, j'ai utilisé le dossier "library". J'ai donc un dossier nommé "lenomdemonprogramme" dans mon dossier library où je met d'autre dossier pour y ranger mes classes. De plus, grâce à la fonction "spl_autoload_register" de php, tu n'as pas besoin de charger tes classes si tu nommes bien tes fichiers: tu n'auras qu'à faire un $uneInstance = new LeNomDeMonProgramme_DossierClass_Class; ... et tu auras ton instance, sans import à faire! N'est-ce pas joli? Par contre, je comprend pas Baptiste Wicht... Pourquoi ne pas utiliser, comme Zend le fait, le dossier "library"... Il est fait pour non? |
|
|
00
|
|
|
#9 | ||
![]() ![]() Jean-Pierre Inscription : août 2005 Messages : 333 ![]() |
Petite précision pour le register autoload, il n'est pas nécessaire de passer par la fonction spl : il y a la méthode statique : Zend_Loader::registerAutoload()
Code php :
__________________
Mes articles DVP : http://jp-grossglauser.developpez.com |
||
|
|
00
|
|
|
#10 |
![]() ![]() Alain Sahli Ingénieur développement logiciels Inscription : décembre 2004 Messages : 1 086 ![]() |
Pour des sites en production ce n'est pas conseillé d'utiliser spl_register_autoload... Car trop lent.
Pour le placement je trouve pas très juste de le mettre dans le dossier library, car ce n'est pas vraiment une libraire comme l'est le framework...
__________________
Blog - Mon espace developpez - Vous voulez un site internet ? eZ Publish Certified developer |
|
00
|
|
|
#11 | |
|
Expert Confirmé Sénior
![]() ![]() |
Citation:
__________________
Tous mes tutos (Java, PHP, SQL-Server, Hardware) - Mon blog anglais JTheque - Site - Forum |
|
|
00
|
|
|
#12 | |
![]() ![]() Jean-Pierre Inscription : août 2005 Messages : 333 ![]() |
Citation:
Ce n'est pas spl_register_autoload() qui est trop lente. Cette fonction a simplement pour but de définir un auto-chargeur de classes personnalisé. Techniquement, c'est la recherche dans le système de fichiers qui peu s'avérer "lente". En même temps, les require_once ou include_once contrôlent si le fichier existe et si il a déjà été défini dans le flux d'exécution courant, donc en définitif, c'est tout aussi lent... ...Pour améliorer sensiblement la rapidité à ce niveau là, il faudrait utiliser des techniques d'inclusion peu pratiques pour le programmeur ou utiliser des fonctionnalité de cache ou de byte-code. Et d'une manière ou d'une autre, la puissance des serveurs actuels et les technologies telles que les disques durs flash rendent le problème insignifiant. ... Les classes "métier" vont dans le rép. models de l'aborsescence conseillée. Le dossier "Zend" qui figure dans le dossier "library" du fichier de distribution, devrait aller dans un dossier commun, comme le fait Baptiste. Simple non ?
__________________
Mes articles DVP : http://jp-grossglauser.developpez.com |
|
|
|
00
|
|
|
#13 |
![]() ![]() Alain Sahli Ingénieur développement logiciels Inscription : décembre 2004 Messages : 1 086 ![]() |
Je ne comprend pas pk on mettrais les classes métier dans le dossier models
__________________
Blog - Mon espace developpez - Vous voulez un site internet ? eZ Publish Certified developer |
|
00
|
|
|
#14 |
|
Expert Confirmé Sénior
![]() ![]() |
Dans l'architecture MVC, c'est le modèle qui effectue tout ce qui est métier. C'est donc logique de mettre tout ce qui est métier dans models, même si le nom peut prêter à confusion.
__________________
Tous mes tutos (Java, PHP, SQL-Server, Hardware) - Mon blog anglais JTheque - Site - Forum |
|
00
|
|
|
#15 | ||
![]() ![]() Jean-Pierre Inscription : août 2005 Messages : 333 ![]() |
Citation:
Le MVC n'est pas une invention du Zend Framework, pas plus que de PHP ou du développement Web. ...C'est l'architecture logicielle, le langage, ... le code source (et le programmeur) qui s'adaptent au patron de conception, pas l'inverse. Citation:
__________________
Mes articles DVP : http://jp-grossglauser.developpez.com |
||
|
|
00
|
|
|
#16 |
![]() ![]() Alain Sahli Ingénieur développement logiciels Inscription : décembre 2004 Messages : 1 086 ![]() |
LOL en effet sorry tout est clair now ;-) Merci.
__________________
Blog - Mon espace developpez - Vous voulez un site internet ? eZ Publish Certified developer |
|
00
|
|
|
#17 | |
![]() ![]() Alain Sahli Ingénieur développement logiciels Inscription : décembre 2004 Messages : 1 086 ![]() |
Citation:
Avec register_autoload: 586.12 ms soit 40.3% du temps d'exécution total Sans register_autoload: 145.65 ms soit 15.6% du temps d'exécution total Donc presque 4 fois plus rapide !!! C'est quand même hallucinat de penser que sur l'exécution d'un script 40.3% du temps est utilisé pour charger des pages... Même 15.6% c'est beaucoup.
__________________
Blog - Mon espace developpez - Vous voulez un site internet ? eZ Publish Certified developer |
|
|
00
|
|
|
#18 | |
|
Nouveau Membre du Club
![]() Inscription : janvier 2007 Messages : 41 ![]() |
Citation:
Mais, si une classe "métier" est utilisé par un autre module de l'application Web... Comment fait-on? |
|
|
|
00
|
|
|
#19 | |||||
![]() ![]() Jean-Pierre Inscription : août 2005 Messages : 333 ![]() |
Citation:
Aperçu : Citation:
Pour les classes métier ça se passe dans le rép. "models" de ton module, ici on admet qu'il s'agit du module métier qui s'appelle "My", exemple pour une classe métier "TableTest" étandant Zend_Db_Table : Citation:
Citation:
Citation:
C'est pas compliqué, sauf à expliquer !
__________________
Mes articles DVP : http://jp-grossglauser.developpez.com |
|||||
|
|
00
|
|
|
#20 | ||
|
Expert Confirmé
![]() ![]() Urbaniste Inscription : juillet 2004 Messages : 1 428 ![]() |
Zend_Framework n'implémente pas MVC mais VC c'est à toi de faire le nécessaire pour ajouter le M
ZF te fournit une lib conséquent pour y parvenir c'est tout. pour la part j'ai une classe Action qui dérive de Zend_Controller_Action mes contrôleur dérive de cette classe. elle ajoute une instance d'une classe nommé Model comme membre. ainsi dans mes contrôleurs je ne me préoccupe pas de savoir où ni comment sont géré les données. Cette classe Model n'est qu'une façade. elle ne fait rien elle-même mais elle se charge de déterminer quels objet métier utiliser et les appelle. par exemple mon contrôleur fait Code :
$myCollection = $this->model->getBookList('SciFi'); Code :
cela peut paraître compliquer la chose mais en fait ça la simplifie. imaginez que vous commencez vos dev et que vous n'avez pas la source de donnée vous faite une classe bouchon et vous pouvez développer les contrôleurs et l'ihm ensuite il suffit de changer le bouchon pour que cela fonctionne. mieux vous passez de MySQL à LDAP il suffit de changer la classe BookLibrary et la méthode getBookLibrary() de la façade le principe d'une façade est de masquer la complexité à ses utilisateurs elle définit une API et à elle de faire le nécessaire. du coup toutes les utilisations s'en trouvent simplifiées. vous pouvez ainsi mixer dans votre partie métier des technologie très différentes DB, LDAP, Telnet, WebServices, XML, Files etc. toute ressource peut être remplacé par une autre par adaptation de la façade tant que l'api ne change pas rien ne change côté Contrôleur. Pour plus de détail sur les façade http://en.wikipedia.org/wiki/Facade_pattern A+JYT |
||
|
|
00
|
Copyright © 2000-2012 - www.developpez.com