Zend FR

Consultez la FAQ sur le ZF avant de poster une question

Vous n'êtes pas identifié.

#1 07-08-2014 11:23:10

JGreco
Administrateur
Date d'inscription: 22-12-2012
Messages: 432

Questions sur le zf2 dépendance de module et conception.

Bonjour à tous,

J'ai aujourd'hui des questions auquel j'aimerais si possible votre avis.

Voila je suis toujours en développement de mon application super ultra méga compliqué. Bien qu'en quelques mois grâce à vous j'ai progressé sur zf2, mais il y a encore beaucoup à apprendre. Donc merci par avance de lire ce qui suit : (je m'excuse d'avance je ne peux hélas donner de code pour illustrer ces soucis là, je resterai donc juste théorique sur ces problèmes mais vous pouvez donnez des exemples pour expliquer vos idées quand même smile )

- Je viens d'identifier que je vais devoir séparer une classe que j'identifie comme faisant partie d'un autre module, je m'explique j'ai des "commandes groupés" qui partent, mais ces commandes implique une mise à jour des stocks dans certains cas et j'ai donc pour cela un module de gestion de stock(qui gère d'autre truc sur les stocks). Toutefois a quel niveau je fais ma distinction de l'indépendance d'un module ? Je comptais faire un :

Code:

 new mouvementStock()

dans mon service de commande groupés par exemple, mais du coup je les deux module avec une dépendance que je pourrais ne pas souhaiter avoir. Quels autres solutions s'offre à moi et comment procéder ?

- D'autre part, je me rend compte que l'appli que je commence à réaliser devient vite complexe car l'existant l'est aussi et c'est une usine à gaz en devenir mais je veux à tout prix éviter cette dérive, mon travail de refactoring est pour ainsi dire merdique car il faut bien faire le taf en fait ! et j'ai bien peur d'avoir recours à la facilité, je n'arrive pas à appliquer un pattern strategy viable.
Avez vous déjà eu ce genre d'expérience et qu'avez vous retenu de ce genre d'impression ? Vos conseils serait vraiment importants à mes yeux.

Par exemple j'ai des méthodes dans mes services qui font 100 lignes de code environs avec 2-3 foreach imbriqués mais le boulot doit être fait comment factoriser ce genre de chose ? Est-ce qu'il faut pour que le taf soit fait parfois fermer les yeux sur du code de ce genre ? (jenkins me dit que mes méthodes ne devrait avoir que très peu de ligne au final j'imagine mal le faire sachant que j'ai des requêtes de fou dedans... et la complexité de certaines méthodes est bien trop élevée même si la complexité globale reste faible..)

- J'ai aussi une classe service qui va atteindre bientôt les 20 méthodes et 1500 lignes de codes, le traitement est long je peux essayer de découper en plusieurs traits / classes quand c'est possible mais est-ce la bonne solution ? Un pattern strategy est un bon principe sur le fond, mais n'ayant jamais vraiment eu de mentor qui aurait pu me l'expliquer dans une appli complexe j'ai des bonnes pratiques à apprendre ! sad on m'a dit aussi (du moins je l'ai lu sur un autre forum) que parfois quand on peut juste pas on ne doit pas faire du strategy... votre avis ? N'ont pas que je ne veuille pas en faire..


J'espère être clair, sinon n'hésitez pas à demander quelques infos supplémentaires !


ZF2 et doctrine addict
profil stack overflow : http://stackoverflow.com/users/3333246/ … ab=profile

Hors ligne

 

#2 07-08-2014 21:42:33

flobrflo
Membre
Lieu: Marseille
Date d'inscription: 26-04-2013
Messages: 376

Re: Questions sur le zf2 dépendance de module et conception.

Hello smile

Je te donnerai un avis plus général que du zf2, avec plutôt une expérience de développeur au sens plus large du terme.

Comme tu dis : il faut que ça fasse le café.
Oui il y a des bonnes pratiques, oui il faut structurer et simplifier au maximum.

Mais il faut faire la part des choses. Il faut allier propreté, clarté et efficacité.
Je pense qu'un bon développeur se reconnaîtra par la bonne distinction entre ces choses la.

C'est un avis personnel qui n'engage que moi, mais il ne faut pas tomber dans l’excès de la bonne pratique d'un coté, ni dans le vite fait bien fait de l'autre.

Dernière modification par flobrflo (07-08-2014 21:49:42)

Hors ligne

 

#3 08-08-2014 10:00:33

JGreco
Administrateur
Date d'inscription: 22-12-2012
Messages: 432

Re: Questions sur le zf2 dépendance de module et conception.

Salut, flobrflo, merci pour ta réponse tu confirmes bien entendu mon sentiment qu'il ne faut pas tomber dans l'excès de bonne pratique car sinon on fait plus rien smile


ZF2 et doctrine addict
profil stack overflow : http://stackoverflow.com/users/3333246/ … ab=profile

Hors ligne

 

#4 08-08-2014 10:31:38

Splyf
Membre
Date d'inscription: 24-10-2013
Messages: 115

Re: Questions sur le zf2 dépendance de module et conception.

salut,

J'ai les même problématique que toi Jgreco, j'ai tout appris sur le tas et sans "mentor".
Je suis aussi passé a zf2 pour factorisé une grosse appli ou je ne m'en sortait plus niveau maintenance.
Et moi aussi j'ai la hantise de retombé quand même dans le schema de l'usine a gaz xD

Sa fait plaisir de voir qu'on est pas seul ^^

Moi depuis un petit moment, je me pose cette simple question: si un autre développeur devais reprendre mon machin, peut il s'en sortir sans doc? Car c'est bien sa l’intérêt d'un code bien fait: sa maintenabilité. et je me suis même apperçu que la performance est dans bien des cas secondaire!
 
Pour le moment je suis pas bien satisfait en répondant a cette question et je suis constament a la recherche sur le net de méthodologie, mais quand je met mon nez dans les divers module zf2 que je glane a droit ou a gauche, je me rend compte que tout le monde a des "best practice" totalement différente... et du coup sa me rassure et je me dit que mon code est pas si pourri que sa ^^.

Hors ligne

 

#5 08-08-2014 10:43:41

JGreco
Administrateur
Date d'inscription: 22-12-2012
Messages: 432

Re: Questions sur le zf2 dépendance de module et conception.

Salut Splyf.
Bah en fait je suis encore un dev junior et je me dis que si je dois tordre des habitudes vaut mieux que ce soit maintenant plutôt qu'après les avoir mises en pratiques pendant des années.

Bref je commente deja pas mal les méthodes de mon code ce qui rends le truc relativement exploitable. Mais c'est plutôt sur un pattern strategy ou je m'inquiète le plus vu que je nage dans l'inconnu a ce niveau là.


ZF2 et doctrine addict
profil stack overflow : http://stackoverflow.com/users/3333246/ … ab=profile

Hors ligne

 

#6 08-08-2014 12:01:54

Splyf
Membre
Date d'inscription: 24-10-2013
Messages: 115

Re: Questions sur le zf2 dépendance de module et conception.

bin pareille, du coup je suis curieux de voir les réponses des autres, mais j'ai bien peur qu'il n'y est pas de "pattern strategy" universel, le MVC oriente déjà beaucoup et pour moi c'est déjà une révolution ^^. Le reste je pense que cela dépend des abitudes et des besoin du dev lui même.
Moi par exemple sur net bean, je me suis fait des template et des "code snippet" pour plein de chose (pour les factory, les form, les controller, ect). Sa évite les copier coller et sa rentre dans la logique de la répétition de pattern.
En un clique et tu a des class complête avec les fonction toute prête, y'a plus qu'a remplir par ci par la.
Mais l'inconvéniant est qu'il faut les maintenir a jour a chaque changement de "strategy" ou des versions des framework utilisé.

Dernière modification par Splyf (08-08-2014 12:03:57)

Hors ligne

 

#7 09-08-2014 11:54:26

Orkin
Administrateur
Lieu: Paris
Date d'inscription: 09-12-2011
Messages: 1261

Re: Questions sur le zf2 dépendance de module et conception.

Salut, juste comme ça entre nous netbeans c'est pas tip top pour faire du php. Le mieux c'est PhpStorm c'est le jour et la nuit wink !

Pour éviter les dépendances entre modules =>les évènements. En gros ton module de gestion de stock va écouter un évènement et ton module de commande en lancer un. Même chose pour le module de commande s'il lance un évènement qui n'est pas écouté il ne se passera rien. Après faut pouvoir être logique et se dire que ces deux modules sont fait pour être dépendant l'un de l'autre. Et de ce que tu en dis ça a un sens. Faut juste faire gaffe aux dépendances circulaires et faire un sorte que la dépendance soit que dans un sens et pas dans les deux (sinon c'est chiant pour la création de services via le ServiceManager (SM), faut passer par du lazy-loading etc ...).

Je sais pas si tu as regardé sur google ce qu'était le pattern strategy mais c'est un pattern qui existe réellement donc je sais pas si tu parlais d'une façon d'architecturer ton projet ou si tu souhaites mettre en place ce pattern. Que tu utilises forcément via le SM puisque les factory et les "invokables" utilisent ce pattern. Tu ne fais quasiment jamais de new (sauf pour les modèles) donc tu as bien un service qui s'occupe de créer pour toi les objets dont tu as besoin. Pour l'organisation de ton code c'est à toi de la faire comme tu le sens de la façon la plus propre possible, en séparant bien les couches etc ... Alors ça prend un peu plus de temps à dev car il faut écrire les différentes couches mais tu as un code aéré et facilement lisible surtout si tu respectes les PSR-1 et/ou 4 (sur les namespaces et l'organisation des fichiers, composer le gère très bien pour toi via les fichiers d'autoload, tu peux regarder un peu de ce côté). Tu dois à tout pris (je pense) éviter de prendre des raccourcis par flemme, faut vraiment faire les choses proprement pour éviter que ça devienne le bordel. Dans un contrôleur tu manipules pas les modèles (sauf la partie liée aux formulaires mais tu fais pas de save ou d'update dedans par exemple même si dans certains cas on est tenté car faire un service pour faire une fonction qui va contenir qu'un save et un persist c'est un peu lourd sauf qu'on sait pas peut être que plus tard ce service sera utilisé pour une évolution de l'application).

Tu peux tenter de factoriser au mieux après jenkins tu peux lui faire dire ce que tu veux ça dépend de la config. Généralement faut éviter les fonctions de plus de 100 lignes mais faut pas toujours le respecter. Dans le cas où tu as un switch avec 40-50 cas tu vas forcément les dépasser alors que ton code est propre et simple. Dans certains cas effectivement il peut te dire ta fonction là elle est trop compliquée donc faut essayer de la penser différemment si t'as le temps ça vaut le coup de regarder mais si c'est pas le cas ou que la fonction est primordiale et qu'elle fonctionne telle quelle parfois vaut mieux ne rien faire surtout si tu t'en fous de la perf. Et crois moi ça passe pas toujours au second degré ça dépend de l'application. Une fonction mal faite en période de fort traffic ton application peut passer d'un temps de réponse de moins d'une demi seconde à plus de 4 secondes par exemple. Là faut faire quelque chose parce que les utilisateurs s'en vont quand c'est comme ça. Et le problème c'est que même si c'est qu'une seule fonction mais qui a un rôle primordial faut parfois s'arracher les cheveux et perdre du temps parce que c'est nécessaire.

Les traits c'est pas fait pour ça, c'est fait pour palier à l'héritage multiple qui n'est pas possible en php. Donc découper un service en utilisant des traits juste pour qu'il soit plus petit et que le code soit dans d'autres fichiers ça sert à rien. T'as des accès disques plus nombreux car plus de fichiers pour un seul service et les traits sont pas réutilisés. L'intérêt des traits c'est vraiment quand tu as des fonctions identiques à mettre dans plusieurs services que ça a de l'intérêt (de la factorisation en gros) si c'est juste pour découper ton code c'est inutile.

Donc c'est à chacun de s'imposer une rigueur de travail et de la respecter au maximum pour assurer la maintenabilité par d'autres développeurs. S'il y a une phpdoc assez propre et que tout est fait de la même manière c'est tout de suite plus facile pour rentrer dans le code smile.

Hors ligne

 

#8 09-08-2014 15:59:47

JGreco
Administrateur
Date d'inscription: 22-12-2012
Messages: 432

Re: Questions sur le zf2 dépendance de module et conception.

Merci orkin,
Oui en effet je souhaite plus architecturer mon code, qu'appliquer un pattern strategy j'ai mélangé un peu les deux on va dire;

J'ai beaucoup réfléchi à ta réponse et j'ai une question :
Peut-on instancier un trait via les factory et faire de l'injection de dépendance ?


ZF2 et doctrine addict
profil stack overflow : http://stackoverflow.com/users/3333246/ … ab=profile

Hors ligne

 

#9 09-08-2014 18:43:59

Orkin
Administrateur
Lieu: Paris
Date d'inscription: 09-12-2011
Messages: 1261

Re: Questions sur le zf2 dépendance de module et conception.

Non smile. Un trait c'est pas une classe wink. L'injection de dépendance tu la fait dans la classe qui utilises le trait. Généralement un trait contient des getters/setters

Hors ligne

 

#10 09-08-2014 19:00:01

JGreco
Administrateur
Date d'inscription: 22-12-2012
Messages: 432

Re: Questions sur le zf2 dépendance de module et conception.

Oui je m'en doutait ^^ merci smile


ZF2 et doctrine addict
profil stack overflow : http://stackoverflow.com/users/3333246/ … ab=profile

Hors ligne

 

#11 03-05-2015 21:03:39

Seryus
Membre
Date d'inscription: 17-02-2012
Messages: 128

Re: Questions sur le zf2 dépendance de module et conception.

Bonjour,

Je me permet de remonter le sujet, j'ai quelques questions à propos des dépendances.

Si j'ai bien compris ce que tu dis Orkin, on ne peut pas se passer des dépendances entre les modules (sauf si vraiment les modules n'ont aucun rapport), il faut juste faire en sorte que la dépendance ne soit pas bidirectionnel ?

Comment ça se passe au niveau des models ? Si j'ai un module BlogUser et un module BlogPost par exemple, avec une entité User et une entité Post. Le module BlogPost devrait ajouter en plus, sur l'entité User, la méthode "getPosts". Or si l'entité User est une partie du module BlogUser, il faudrait modifier ce module pour ajouter la nouvelle méthode.

Peut-être que les models doivent être dans un module à part ?

Je ne sais pas si mon exemple est assez clair ^^'

Hors ligne

 

#12 04-05-2015 00:58:20

Orkin
Administrateur
Lieu: Paris
Date d'inscription: 09-12-2011
Messages: 1261

Re: Questions sur le zf2 dépendance de module et conception.

Salut dans le cas où les modules ne peuvent pas fonctionner l'un sans l'autre ils ont forcément une dépendance forte donc t'as pas trop le choix que de les utiliser ensemble.

Dans ton cas il faudrait peut être que tu t'arranges pour éviter de créer la méthode getPosts() directement dans ton modèle mais plutôt avoir dans un service une fonction qui te retournes les posts d'un utilisateur. De cette manière tu ne modifie pas le modèle initial et comme le module BlogPost a une dépendance vers le module BlogUser tu peux te le permettre.

Pour les dépendances bidirectionnelles c'est surtout pour la création de service si ton UserService a une dépendance à BlogService et BlogService a une dépendance à UserService tu as une dépendance circulaire puisque pour créer le UserService tu as besoin du BlogService qui lui même a besoin du UserService etc ...

Hors ligne

 

#13 06-05-2015 21:57:48

Seryus
Membre
Date d'inscription: 17-02-2012
Messages: 128

Re: Questions sur le zf2 dépendance de module et conception.

En faisant ça mes modèles n'auront plus la même "logique" que ma base de données non ? Admettons que je veuille récupérer tous les utilisateurs, ainsi que tous le nombre de posts pour chacun. Je vais devoir récupérer d'un coté tous les utilisateurs, puis pour chaque utilisateurs compter tous leurs posts ?

Mon service devrait me retourner les résultats dans deux objets complétement différent, un qui contiendrait l'utilisateur, un qui contiendrait les posts ?

Dernière modification par Seryus (06-05-2015 21:58:45)

Hors ligne

 

#14 07-05-2015 08:58:55

JGreco
Administrateur
Date d'inscription: 22-12-2012
Messages: 432

Re: Questions sur le zf2 dépendance de module et conception.

Bonjour,

Ou sinon on peut aussi considérer que post et utilisateur sont tellement lié entre eux qu'il doivent faire partie d'un seul module. Ce sont surement des contrôleur différent, des services différents, mais un seul module.


ZF2 et doctrine addict
profil stack overflow : http://stackoverflow.com/users/3333246/ … ab=profile

Hors ligne

 

#15 07-05-2015 10:07:35

Orkin
Administrateur
Lieu: Paris
Date d'inscription: 09-12-2011
Messages: 1261

Re: Questions sur le zf2 dépendance de module et conception.

Seryus a écrit:

Mon service devrait me retourner les résultats dans deux objets complétement différent, un qui contiendrait l'utilisateur, un qui contiendrait les posts ?

C'est pas gênant après c'est à toi de bien formater ton/tes objet(s) retournés à la vue pour que ça corresponde à ton besoin.

Hors ligne

 

#16 07-05-2015 12:01:31

Seryus
Membre
Date d'inscription: 17-02-2012
Messages: 128

Re: Questions sur le zf2 dépendance de module et conception.

JGreco a écrit:

Bonjour,

Ou sinon on peut aussi considérer que post et utilisateur sont tellement lié entre eux qu'il doivent faire partie d'un seul module. Ce sont surement des contrôleur différent, des services différents, mais un seul module.

Si je fais ça je perds l'intérêt d'utiliser les modules ^^'

Je suis tombé sur un article en cherchant un peu. En faite je pourrai aussi créer des modules génériques qui n'ont aucune dépendance, et ensuite dans un nouveau module, étendre chaque partie du module en question pour créer les dépendances dont j'ai besoin ?
Pour reprendre mon exemple, j'aurais alors un module BlogUser sans aucune dépendance et un module BlogPostUser qui contiendrait une entité User qui étend de l'entité du module BlogUser.

Dernière modification par Seryus (07-05-2015 13:09:42)

Hors ligne

 

#17 07-05-2015 13:44:43

Orkin
Administrateur
Lieu: Paris
Date d'inscription: 09-12-2011
Messages: 1261

Re: Questions sur le zf2 dépendance de module et conception.

Et après tu gères comment ton mapping ? Ca devient vite la foire. T'as pas vraiment de solution. Tu peux aussi passer par des évènements et injecter des infos. A mon sens utiliser un système où le user_id est toujours en clé étrangère pour un post (ça sera surement le cas de toute façon) est le plus propre. Même si t'as pas tout dans un objet. Sinon soit tu fais qu'un seul module, soit tu fais une dépendance forte entre tes 2 modules wink.

Hors ligne

 

#18 08-05-2015 02:03:15

Seryus
Membre
Date d'inscription: 17-02-2012
Messages: 128

Re: Questions sur le zf2 dépendance de module et conception.

Hmm.. J'ai du mal à visualiser comment les évènements pourraient être la solution au problème en fait.

Dans mon module BlogUser, je déclenche un évènement qui contient mon entité User
Dans mon module BlogPost, si cet évènement se produit, je peux récupérer mon entité User (qui sera le contenu de l'évènement). Et ensuite ? hmm

Si par exemple, sur le profil de l'utilisateur (une vue qui se trouverait dans le module BlogUser), je veux qu'il y ait la liste de ses posts, comment je devrais m'y prendre ? La vue ne connait pas le module BlogPost.

Hors ligne

 

Pied de page des forums

Propulsé par PunBB
© Copyright 2002–2005 Rickard Andersson
Traduction par punbb.fr

Graphisme réalisé par l'agence Rodolphe Eveilleau
Développement par Kitpages