Flex et/ou les frameworks: pas tout le temps, pas n'importe comment
Par -Alexandre LEGOUT aka LAlex- le 29 août 2008, 13:07 - Divers - Lien permanent
La demande est forte en ce moment sur le développement Flex.
Flex a cet espèce d'aura de "vrai outil pour les pros":
- de ceux qu'on confie à des SSII, blindées d'ingénieurs qu'il font du code sérieux vous comprenez....
- de ceux que les freelances proposent pour faire plus expert, parce qu'ils ont déjà affiché un item qui change quand on sélectionne une entrée dans un Combo Box, et qu'ils n'ont pas envie de recoder un bouton dans un site liquide redimensionnable...
Si j'écris ce billet, c'est parce que je me retrouve tout à tour devant ces deux situations.
Seulement voilà, ce type de développement Flex, lorsqu'il a besoin d'être
repris par un développeur autre que le développeur d'origine, peut poser des
problèmes différents selon celle des deux situations citées plus haut qui se
présente - la troisième, qui a priori ne pose aucun problème, étant le
développement de l'application par un codeur Flex expérimenté pas trop attaché
aux usines a gaz ![]()
Le développement par une SSII
La plupart des ingénieurs en développement sont formés sur des langages type Java ou .NET. Quand je me parle à moi-même (et oui, ca m'arrive), j'appelle ca des langages "non-visuels". Ces langages disposent d'un framework extrêmement développé, sans compter le nombre de frameworks annexes(type Spring, MINA, etc..), utilisés par tellement de monde que c'est comme s'ils étaient natifs au système et disposent d'un support énorme par la communauté.
Ces développeurs reproduisent naturellement les mêmes mécanismes quand ils
se retrouvent dans un environnement Flex et utilisent le premier framework qui
passe et qui ressemble à ce dont ils pensent avoir besoin. Je dis bien ils
pensent, car l'utilisation de ces frameworks revient souvent à compliquer une
architecture qui n'en a pas besoin. Cela permet la plupart du temps au
développeur de retrouver un environnement de développement qui lui est familier
concernant le MVC, ou l'utilisation de connecteurs plus "standards" (j'entends
par là standard à leur langage de prédilection) pour la récupération de données
(WebService la plupart du temps).
La formation ou le transfert de compétence étant le plus souvent effectuée par
la première personne qui a initié le projet, cela ne semble poser de problème à
personne. Sauf si l'on pense au fait qu'une fois le produit livré, ça laisse
difficilement la possibilité au client final de confier la maintenance ou
l'évolution du produit à un autre prestataire, a moins que le doc soit vraiment
extrêmement complète - ce qui, avouons le, est très rare: une bonne doc (ASDoc
+ doc rédigé) prenant beaucoup de temps, ce que peuvent rarement se permettre
les prestataires s'ils veulent respecter leur délais sans facturer la partie
documentation.
Le problème là n'est pas lié à Flex, mais bien à la philosophie SSII (la plus répandue en tout cas): des ingénieurs parlent aux ingénieurs. Et étant donné que Flex commence à être vu, comme je le disais, comme un outil "serieux", les SSII sont de plus en plus sollicitées sur cette technologie, mais pour des clients "web", dont la politique n'est pas de se retrouver pieds et mains liées à cause de choix technologiques du prestataire.
Les prestataires peu expérimentés
Suite à un assez vieux post,
j'ai été considérés par certain comme un élitiste casseur de débutants, alors
que le message que je désire faire passer est qu'il faut seulement essayer de
faire ce que l'on sait, et apprendre ce que l'on ne sait pas.
En tant que codeur AS2, mon passage à l'AS3 s'est fait via Flex2, avant que ne
sorte Flash CS3. J'ai eu l'immense chance à ce moment là de faire partie d'une
entreprise pour laquelle le projet que je devais réaliser avait un besoin
impératif d'une conception propre, quitte à passer beaucoup de temps à étudier
le framework Flex avant de commencer à coder l'application. J'ai donc passé
beaucoup de temps en R&D avant de passer en production, ce qui m'a permis
d'apprendre beaucoup de mes tests et erreurs.
Flex a ce côté séduisant du fait que pas mal de choses peuvent sembler se
faire toutes seules: positionnement, binding, navigation, composants... Mais il
faut malgré tout en connaître le fonctionnement précis pour, par
exemple:
- ne pas utiliser une gestion des states avec manipulation de la display list
là où une ViewStack est plus indiquée...
- ne pas utiliser un binding là ou un simple événement suffit...
- ne pas utiliser un (Binding) là où un (Binding(event="..")) sera bien plus performant... (les crochets passent mal sur Dotclear)
C'est pourquoi le seul conseil que je peux donner ici est de ne pas se
lancer dans un projet qui est au delà de ses compétences
actuelles. L'auto formation est une excellente chose et je ne
jure que par elle, mais pour un freelance, c'est selon moi un manque de respect
au client que de vendre une prestation qui a 9 chances sur 10 d'être plus ou
moins bancale (par exemple, je préviens systématiquement mes clients si je n'ai
pas la compétence/expérience sur une techno précise, quitte a refuser le
contrat).
Cela en plus complique la tache d'un éventuel autre prestataire qui aurait
besoin d'assurer la maintenance ou l'évolution du produit: c'est donc aussi pas
très cool pour les collègues...
Je parle bien ici précisément de Flex: rien a voir avec le fait d'accepter de
coder un diaporama sans en avoir jamais fait: il s'agit bien là d'un framework
complet et de toute la philosophie de développement qui lui est attaché, ainsi
que de ses outils.
Les frameworks en général
Beaucoup de développeurs de haut-niveau se sont essayés, souvent avec succès, au développement d'un framework open-source... Rappelons d'ailleurs que Flex n'est "qu'un" framework AS3, auquel est associé un "traducteur" MXML->AS3. Ces frameworks permettent de faire plus de choses, ou d'encapsuler un certain nombre de comportements communs. Que ce soit une implémentation du MVC, une couche d'accès aux données ou tout autre fonctionnalité, ces frameworks disposent pour chacun d'une philosophie de développement propre à son concepteur ou à ceux qui ont adhéré au framework.
Ce qui veut dire également que ceux qui n'ont pas adhéré au framework se
voient affronter un mode de développement complètement différent de la
technologie qu'ils pratiquent, pour laquelle ils se sont déjà formés. Alors
s'il s'agit d'un easyMVC (7 classes) ou d'un cairngorm(22 classes), ca peut encore aller. Mais s'il s'agit d'un
servebox
foundry (121 classes en comptant commons+foudry+toolbox), d'un VEGAS (171 classes) ou autre
lowRIA (265
classes), ça commence a faire usine à gaz...
Et quels que soit les avantages et inconvénients de chacun de ces frameworks,
il est à chaque fois obligatoire de se conformer à la philosophie de
développement de chacun sous peine de perdre tout l'intérêt des les
utiliser.
Bref, je dirais que l'utilisation d'un framework "propriétaire" dans le cadre d'un framework agence ou de projets perso peut être une excellente chose: il peut correspondre ainsi à un goût pour tel ou tel mode de travail, ou devenir une politique d'entreprise dans le cas des agences. Mais pour un prestataire qui sait que ce projet va lui échapper, je pense que ce n'est certainement pas une bonne idée: non pas pour son propre travail, mais pour ceux qui peuvent être amenés ensuite à intervenir sur le projet.
Et moi en tant que prestataire aujourd'hui, faudrait-il que je maîtrise
l'ensemble des frameworks les plus courants pour pouvoir accepter les missions
que l'on veut me confier? Ce serait l'idéal, mais travail+R&D+sommeil sont
rarement tous les 3 compatibles! ![]()
Et faire de la R&D pour maîtriser un framework qui ne me permet pas de
faire plus de choses que ce que j'aurais fait sans, je dois avouer que ça me
rebute un peu...
Et puis quand je livre un client, je fais systématiquement en sorte qu'il ne soit pas "verrouillé". C'est avec j'avoue un peu de fierté que je dis en général à mes clients qu'ils peuvent faire appel a n'importe quel prestataire compétent dans la technologie (Flash ou Flex) pour prendre la suite, sans requis supplémentaires. C'est bien plus pratique pour tout le monde: le client ne se sent pas prisonnier d'un prestataire, et je ne culpabilise pas de ne pas pouvoir assurer la maintenance si mon emploi du temps ne me le permets pas car je sais qu'un autre prestataire pourra le faire facilement.
Pour finir, je rappelle que les Design Patterns sont une solution générique pour un problème précis, généralement pour des problèmes que l'on rencontre souvent dans du développement Objet. Cela veut aussi dire qu'il ne sert à rien de les utiliser si le problème ne se pose pas! Un MVC avec une seule vue et un seul contrôleur est par exemple totalement inutile, et pourtant j'en vois si souvent... Car évidemment, quelqu'un qui utilise un framework qu'il aime pratiquer en vient à l'utiliser systématiquement, même quand il n'est pas nécessaire...
--
Si j'ai le temps et la foi suffisante, j'essaierai de faire un ticket sur un ensemble de pratiques personnelles en Flex, qui se sont avérées être efficaces et productives sur le terrain, qui grâce aux commentaires pourraient être débattues et enrichies.
Commentaires
Je ne suis pas développeur en SSII, mais j'ai trouvé ton article très juste.
Cependant, je voudrais réagir sur ta vision de l'utilisation des framework.
"Un MVC avec une seule vue et un seul contrôleur est par exemple totalement inutile, et pourtant j'en vois si souvent..."
Effectivement, c'est inutile. Mais adopter une méthodologie de développement unique est souvent le meilleur moyen de simplifier la maintenance. Si j'ai l'habitude d'utiliser MVC pour structurer mon projet, je n'aurais pas à me replonger dans cette structure lorsque j'aurai des évolution à faire ... et qui sais si je n'aurai pas une vue et un controller à ajouter ?
@SuperDevy> Soyont franc: je ne compte plus les MVC posés sur un projet qui n'aura qu'une seule vue et qu'un seul contrôleur quoi qu'il arrive: par exemple pour un site événementiel, donc éphémère, avec une V1 et point-barre.
Soit parce qu'il s'agit d'un site institutionnel, avec une crea figée, et donc une vue figée et des fonctionnalités figées: un menu de navigation a pas besoin (sauf concepts originaux) d'être basé sur un MVC...
Et puis je ne vois pas en quoi ca me simplifie la vie: en tout cas pour moi, faire une usine a gaz là ou 25 lignes de code suffisent c'est plus de la rigidité que de la rigueur...
Pour compléter mon propos: faire toujours la même chose de la même manière permet en effet de faciliter la maintenance, mais tout faire de la même manière n'a, a mon humbe avis, aucun intérêt sinon d'appliquer une méthode de développement à un contexte qui n'en a pas besoin, et donc risquer seulement d'embrouiller un "relecteur" ou un presta qui prend la suite.
Mais en plus tu risques de plomber des performances: la souplesse se fait souvent au détriment des performances (les moteurs les plus optimisés ont souvent le code le plus crade), donc si on peut rester propre, pas besoin d'introduire dans une partie du code de la souplesse dont on aura pas besoin!
Toute la subtilité d'un code propre, performant et évolutif consiste a se projeter dans l'avenir du projet, pour faire un code suffisamment évolutif pour aller aussi loin que le projet pourrait le nécessiter, sans tomber dans l'ultra évolutif et des besoins qui ne sont pas réels.
Un projet qui a un début et une fin strictement établis ne nécessite pas de souplesse du tout, et peut donc être mieux optimisé. Il ne faut pas faire l'erreur du "et si j'avais besoin de faire ça?", tout en sachant pertinemment qu'on en aura pas besoin...
Si un produit évolue dans une mesure non prévue, il faut rapidement se poser la question de "recommencer".
Moi en tout cas, j'applique la même stratégie. Il faut savoir coder de plusieurs façons.
j'ai essayé de répondre mais humm je dois mettre trop de texte ou un
truc du genre et ca jarte mon comment
bref, alors je poste mon comment ici
(oui en general je copie qlqpart ce que je poste en cas où blog de
m#rde qui jarte mon comment :p)
----
il ne faut pas tout mélanger
quand tu parles de framework usine à gaz en se basant sur le nombre de
classes
(cad trop de classes à étudier avant de comprendre le framework) il
faut etre plus précis
- dans le cas d'un framework architectural, trop de classes oui il
faut passer du temps à l'étudier et là oui le nombre de classes peut
jouer un role car il faut connaittre TOUTES les classes pour
comprendre l'architecture.
- dans le cas d'un framework applicatif le nombre de classes on s'en
fout
car ca ne force pas une architecture en particulier c'est on va dire
du code utilitaire, qu'il y ait 1000 ou 100 classes ca ne change rien
on peut tres bien utiliser un framework applicatif en n'en connaissant
qu'une tres petite partie (ex le framework .NET et Java)
- pour le framework Flex, c'est un cas particulier car c'est un mixte
de framework applicatif et de framework orienté composants, donc si on
ne passe pas par Application, SystemManager, UIComponent et le
reste... forcément ca foire (ex: on ne peut pas ajouter un composant
de Flex dans un projet ActionScript, il faut que le projet soit un
projet MXML)
mais bon en général je suis d'accord sur ce que tu dis, il y a trop de
gens, SSII ou pas, freelance ou pas, expert ou pas, qui foutent le MVC
à toutes les sauces sous excuse que sa structure leur code pour
pouvoir travailler en équipe,
donc oui utiliser le MVC pour 1 View et 1 Controller, oui grosse
boulette et ca merite des baffes :).
Quelques petites précisions sur ce que tu dis
- VEGAS, ce n'est pas un framework MVC, c'est un framework applicatif
avec ADT, loggeurs et events basé sur le W3C
- pour le coup des sources pas documentés, dans 90% des cas je me
retrouve avec des employeurs qui ne souhaitent pas payer le temps
necessaire pour la documentation, pire meme des employeurs qui
refusent que l'on passe du temps pour ecrire des unit tests, bref
c'est de leur faute, le fameux manager ou autre chef de projet qui ne
bite que dalle à la programmation et gestion de code source.
Pour revenir sur les frameworks, je vais prendre un exemple que je
connais bien
maashaack
http://code.google.com/p/maashaack/source/browse/#svn/trunk/AS3
c'est un framework applicatif et il grossit regulierement,
10,768 lignes de code, 7,239 de comments
et pourtant je considere le projet petit
de ce que j'ai vu qd des gens (meme tres debutant) commencent a
l'utiliser
ils passent par des choses simple comme Strings.format()
ils se fouttent totallement de la taille, ils voient le coté
utilitaire principalement.
bref ils n'ont pas besoin de connaitre 100% des classes du framework
juste pour dire qu'ils ne faut pas mettre tous les framework dans le
meme panier
----
j'ai pas commenté sur la partie
"Et puis quand je livre un client, je fais systématiquement en sorte
qu'il ne soit pas "verrouillé". C'est avec j'avoue un peu de fierté
que je dis en général à mes clients qu'ils peuvent faire appel a
n'importe quel prestataire compétent dans la technologie (Flash ou
Flex) pour prendre la suite, sans requis supplémentaires. [...]"
les mots "verrouillé" et autre "compétent" ca peut etre interpreté
tres differemment
je me prends en exemple, si je démarre un code de zero en AS3
tres peu de chance que j'utilise un framework architectural dès le
départ,
par contre si j'ai besoin d'un singleton je le définirais comme je
l'explique là
http://code.google.com/p/maashaack/wiki/Singleton
parce que je pense que c'est la manière la plus propre et standard de
faire
et bah dans certains boulot on m'a sorti que c'etait un hack et que
parce que
je n'utilisais pas "getInstance()" les pauvres autres developpeurs ne
comprenaient
meme pas que c'etait un Singleton, bref meme si mon intention était de
fournir
un code propre, documenté, non-verrouillé, etc.
il suffit qu'il y ait un dev qui bloque sur "ou est le
getInstance() ?" et ca peut vite partir
en queue de boudin.
(note: j'ai eut aussi la meme remarque en utilisant eden car on me
sortait que le code
etait trop compliqué à comprendre et que non non il fallait tout
mettre en XML, bref..)
zwetan
@zwetan> Tout dépend ensuite de la manière qu'on a d'interpreter le mot "framework": pour moi, une collection de classes utilitaires est ce que j'appelle une "bibliothèque". J'avais lu je sais plus trop ou une définition du terme framework qui revenait à dire que framework architectural est en gros un pléonasme. Aprés, c'est comme pas mal de termes techniques: il existe des définitions différentes et aussi des abus de langages (le plus connu étant "propriété", qui est utilisé à la place de "attribut" la plupart du temps - par moi le premier d'ailleurs)
Si tel était le cas, on pourrait qualifier de framework la corelib ou la flexlib? Non, je ne pense pas.
Le nombre de classe dans mon exemple ne reste qu'un indicateur arbitraire dans cet article. J'avoue ne pas connaitre VEGAS par exemple, mais quand je vois un tuto en 6 parties pour l'utilisation d'un concept du framework (l'IOC en l'occurence), j'avoue que ca fait peur dés le départ. Je ne doute pas qu'il existe des cas dans lequel ce type de concepts est nécessaire voire indispensable, et je suis sur que l'ami eka s'en sert avec brio dans ses développement, mais je m'imagine mal reprendre un projet basé la dessus (et pourtant je pense pas être un débutant même en concepts avancés de la POO, ni un psycho-rigide du code). Ne nous voilons pas la face, aujourd'hui les développements à effectuer dans le cadre d'une mission freelance en production on rarement besoin de tels concepts, et c'est plus souvent une manière pour un puriste de se faire plaisir plutôt que de répondre strictement au besoin du projet...
Bref, un beau framework c'est bien, ca peut vraiment changer la vie (Flex en est un exemple), mais a moins d'une large diffusion, ce n'est pas toujours une bonne idée si le projet doit passer de mains en mains (et qu'on ne connait pas ces mains), a moins que les avantages ne soient réellement significatifs pour le projet (et non pas pour le codeur).
Hello
Dans tous les cas sinon pour ce qui est du contenu général de ton article je suis tout à fait d'accord mais beaucoup plus nuancé
... Car pour moi ce qu'il en ressort c'est qu'il faut continuer à bosser tous de notre côté et on laisse juste à Adobe le droit de faire un framework "pour tous" ... et si je suis ton raisonnement cela ne sert à rien de créer des frameworks... donc les mecs qui ont codés par exemple Spring (JAVA ou .NET) ou AMFPHP ont bossé pour rien ?
Tu dis justement plus haut que certains frameworks sont devenu tellement naturels dans certains langages qu'ils sont considérés comme part entière du langage... Hors pour le moment en ActionScript nous n'avons pas un "VRAI FRAMEWORK" .. faut donc que tout le monde s'y mette pour un jour en proposer un le plus avantageux possible pour la communauté.
Et dans le principe où tu n'as pas l'envie ou le temps de regarder ce qui se fait ailleurs tu peux alors tout simplement en déduire que cela ne te servira à rien ? ...
Pour ma part je suis moins catégorique que toi
J'apprends principalement en lisant le code des autres et je pense que chacun d'entre nous devrait suivre cette technique simple d'apprentissage.
Ensuite si l'on considère qu'il peut être pas mal de se mettre sur un travail "commun" pour faire avancer les choses et que ce travail peut être ouvert avec une licence opensource par exemple.. c'est encore mieux
Le problème reste qu'il y a beaucoup plus de "profiteur" dans notre métier que de gens motivés pour faire avancer les choses "ensemble".
C'est très facile pour un chef de projet dans une boite de dire qu'il maitrise l'ActionScript car il sait utiliser les frameworks Flex, Papervision ou autre... dans tous les cas la plupart des dirigeant dans ces boites n'y comprenent rien aux technos utilisées et doivent avoir confiance dans leurs employés.. mais finalement la plupart ne savent vraiment pas le contenu exacte de ces frameworks et les utilisent "sur le tas" sans aucune maitrise du code en amont ou en aval du projet.
VEGAS m'a permis de créer un moteur d'application riche avec plusieurs extensions que j'utilise dans mon quotidien (plus tout seul depuis quelques années maintenant) et qui se base justement sur des années de travail seul et ensuite en équipe, sur des travaux pris en cours de production ou qui se basent sur des projets multi langages et utilisant à chaque fois plusieurs technologies en même temps (PHP/FMS/JAVA/ASP/....)
.. Et tu vois il y a de forte chance qu'arrivant enfin au terme de la version 1 finale du framework, la version 2 s'oriente vers une fusion direct avec Maashaack et sa bibliothèque "system" (VEGAS fusionne déjà progressivement vers le travail effectué sur Maashaack)
Le but ici est justement de fournir un outil standard et peut être plus robuste que celui proposé par Adobe à l'heure actuelle et je peux te l'assurer beaucoup plus simple et beaucoup plus modulaire. Avec l'ambition d'avoir des outils pour Flash, Flex, Air qui peuvent tous fonctionner ensemble mais aussi séparément avec le moins de dépendance possible sur les éléments de plus bas niveau du framework.
Faut donc bien cerner qu'un framework a plusieurs niveau d'utilisation. Utilitaire, architecture, Graphisme, CMS, etc... Il peut se contenter de couvrir qu'un seul domaine ou plusieurs... Et justement pour moi freelance ou pas faut avoir après un certain nombres d'années d'expérience la faculté de faire la différence entre un framework complet ou pas? Ensuite il est toujours bon d'avoir un oeil critique sur le travail effectué.. et ne surtout pas hésiter à donner son avis (avec des arguments concrets) ou à participer.
Maintenant je me demande ce qui bloque chacun d'entre nous de regarder le travail des autres et justement de pas s'arrêter à un simple survol ? Le temps ? Je ne pense pas... après tout dépend du travail que l'on effectue dans son quotidien c'est certain. Pour moi donc faut pas confondre un simple exécutant et un vrai développeur dans le sens : R&D, veille, code, passion.
Je peux t'assurer que si tu passes derrière moi sur un projet et que tu cherches à utiliser une heure ou deux mes outils ... cela ne te causera pas trop de soucis à mon avis.. bien au contraire
Maintenant le problème est de travailler seul ou en groupe sur un projet de framework et de fournir à tout le monde un ensemble de ressources (exemples, documentation, etc..) pour aider chacun d'entre nous à utiliser les outils... et surtout à s'organiser pour travailler correctement. Je suis désolé mais pour moi c'est beaucoup plus important quand je reprends un projet qu'il y est un SVN disponible et de la documentation que de voir le code.. Ensuite c'est simple, soit le code est propre et dans ce cas on peut repasser dessus, soit il faut dans tous les cas tout refaire... et c'est ce que l'on appel en Xtrem Programming "LE COURAGE"... et faut en avoir dans notre métier
Reste que je m'interroge lorsque je vois le temps passé par certains à s'acharner sur certaines solutions alors que justement comme il est dit plus haut, il leur manque cruellement de connaissances et surtout un œil critique pour prendre ce qu'il faut dans la communauté opensource et éviter tout le parasitage du tout en chacun...
Je me demande aussi ce qui pousse certains à continuer à s'acharner tout seul dans leurs coins alors qu'il existe "internet" et ses communautés.. et surtout des gens qui passent du temps à écrire des articles, créer des forums ou des mailing list pour aider les autres à avancer...
Pour moi à l'heure actuelle ... il y a une différence entre savoir développer et savoir suivre "la mode et le buzz du net". Et ce que je trouve un peu dommage dans ton article c'est qu'il n'est vraiment pas positif pour ceux qui passent du temps à créer des outils pour la communauté.
Comme le dit Zwetan au dessus.. utiliser la méthode system.Strings.format() ou faire des fichiers de configuration avec system.eden dans Maashaack.. rien de plus simple et aucune philosophie à avoir ici .. et si on suit ton article.. pas besoin de regarder comment cela marche et surtout de voir à quel point c'est simple de faire les choses correctement !
Donc au final toujours un peu cette peur de voir ce qui se fait ailleurs et dès qu'un framework fait plus de 20 classes.. c'est la panique à bord ! Dommage
EKA+
Je n'aurai malheureusement pas le temps de répondre aussi longuement que je le voudrais à tout ca: en tant que développeur à l'origine d'un framework, je trouve ca normal que tu "défendes ton bout de gras" ;), et d'ailleurs comme je le dis dans l'article et dans les commentaires qui ont suivi, ces outils sont certainement bien étudiés, et encore plus certainement efficaces entre les mains de ceux qui les ont conçus, et de ceux qui ont pris le temps de se former sur ce framework.
Aujourd'hui, je prend pas mal de projets en cours. Je suis tombé sur pas mal de frameworks différents, pour des évolutions de projets dans des délais pas toujours relax. Je me vois mal devoir tous les apprendre si je veux être à l'aise dans les développements que j'effectue.
Et quand on me demande de finir un site en rajoutant une rubrique, et qu'il me faut 2 jours pour comprendre comment fonctionne la navigation, parce qu'un bête menu de 5 entrées est basé sur un XML hargé par un NavigationModelLoader qui transmets le XML à un NavigationModelFormatter qui va injecter des données dans le NavigationModel et créer un NavigationContainer dans lequel sont des NavigationItem qui contiennent des NavigationItemrenderer, et qui quand on clique dessus vont manipuler un NavigationItemHandler qui dispatche un évenement à un NavigationController dont les évenements sont écoutés par un ContentContainer qui fait un tour sur lui-même avant de signaler aux ContentDecorator que le ContentNotifier est en congé maladie alors c'est le ContentDepouilleur qui va s'occuper d'associer un ContentLoader au ContentAffichouilleur, ben ca me fout un peu les glandes quand un bête symbole dans la bibliothèque de Flash aurait suffi... :-S
Globalement, développer un framework sert souvent a celui qui le développe et a ses fans, a moins qu'il comble un gros manque (genre PV3D). Aujourd'hui, je ne vois pas à quelle demande je ne peux pas répondre avec simplement quelques classes génériques, plutôt qu'un framework complet... Et je ne pense pas sortir du code crade pour autant.
Si tu reprends un de mes projets, tu n'auras pas d'outil à apprendre, ni de manière de penser autre que celle d'un développeur Flash (je vais même me risquer à dire pompeusement un développeur Flash de bon niveau).
Quant à "Pour moi donc faut pas confondre un simple exécutant et un vrai développeur dans le sens : R&D, veille, code, passion", si pour moi ne pas avoir l'envie de savoir comment fonctionne pixLib ou Vegas fait de moi un faux développeur, j'en suis un alors...
Je ne vois aucune peur de voir ce qui se fait ailleurs, juste se dire que voir une usine à gaz là où ça pouvait être fait facilement et efficacement sans, disons le, ça devient parfois de la masturbation de neurones...
PS: AMFPHP est l'implémentation d'un protocole réseau, pas un framework.
Hello
Je vois très bien ce que tu veux dire en parlant de NavigationModelLoader & co.. mais pour ce qui est d'utiliser un moteur IoC dans une application je pense sérieusement que c'est justement pas du tout la même chose
Le
problème entre les dépendances des objets dans une application est justement le
problème majeur à l'heure actuelle dans les applications et une bonne maitrise
des dépendances avec une programmation en couche (avec n'importe quel framework
sérieux qui utilise ce principe) sera beaucoup plus simple à utiliser qu'un
code fermer dans des classes...
On peut bien entendu schématiser toutes les classes d'une application, etc.. mais sérieusement, faut avoir un peu utiliser l'IoC pour en parler sérieusement.
Par contre, attention, je ne dis pas que cela solutionne tout et n'importe quoi mais c'est surtout un moyen de voir les choses "autrement" et franchement une fois que l'on voit le code sous cet angle .. que cela soit avec 100% de code ou avec des fichiers de configuration.. c'est plus du tout pareil après
Reste que cela m'étonne que tu sois capable de faire des tas de projets différents sans réaliser de ton côté une bibliothèque de code propre et réutilisable ? Tu réinventes ou copies/colles certains éléments de ton code à chaque fois ?
PS : Quand je parle de AMFPHP cela reste pour moi une library avec : une passerelle, une manière d'implémenter des classes pour créer les services et des classes pour gérer JSON etc.. donc un petit framework tout de même côté PHP qu'il faut suivre avec une certaine logique propre à AMFPHP et si l'on prend WebOrb .. pas possible de l'utiliser de la même manière côté serveur
EKA+
Je dispose d'un ensemble de classes utilitaires évidemment: chargement de config, boutons génériques, controle de la timeline, localisation, formatage de données, etc... mais dans l'absolu pas grand chose.
l'IOC est surement un grand concept, comme le MVC ou la POA ou autres concepts de haute voltige de la POO. Toujours est-il que je m'en passes trés bien la plupart du temps. Je n'hésites pas a faire du couplage fort quand le couplage faible n'a rien de nécessaire... Quant au couplage faible, je pense qu'il existe d'autres moyens que l'IOC qui, de ce que j'en sais (et je n'en sais âs beaucoup je dois l'avouer) n'est qu'une utilisation judicieuse des interfaces. Et, comme encore une fois je ne connais pas beaucoup l'IOC, je vais me contenter de citer Wikipedia dans la version anglaise de la page IOC:
Aprés, tout ce qui est dit dans mon billet n'est que mon ressenti et donc un avis tout ce qu'il y a de plus personnel...
il y a différent type de frameworks: applicatif, architectural, documentaire, etc.
apres oui en fonction de ce que fait le code il peut y avoir oui une limite assez vague entre une bibliotheque (library) et un framework, perso je met ca sur la taille et/ou l'envergure de ce que fait le code
une bibliotheque c'est je pense en general du code qui se specialise sur un domaine (une bibliotheque zlib par ex), un framework applicatif c'est plus generaliste et/ou cela englobe differents domaines en meme temps (données, cryptographie, serialisation, etc.)
donc as3corelib oui ce serait plutot une bibliotheque
> Globalement, développer un framework sert souvent a celui qui le développe
> et a ses fans, a moins qu'il comble un gros manque (genre PV3D).
> Aujourd'hui, je ne vois pas à quelle demande je ne peux pas répondre avec
> simplement quelques classes génériques, plutôt qu'un framework complet...
> Et je ne pense pas sortir du code crade pour autant.
je pense pareil, meme si je pense que qlqch comme maashaack puisse etre utile.
Si tu veux tu promouvoie presque le developpement ala XP,
cad ne se baser sur aucun framework et diretement ecrire le code / les features que l'application a besoin
et oui c'est plutot tres bien de faire comme ca
mais autant on peut faire comme ca facilement avec Java et .NET
car le "vendeur" fournit deja un framework applicatif par defaut
autant avec AS3 il n'y a pas de framework applicatif du tout
donc ok le codeur va commencer a écrire des utils, les re-utiliser
plus ou moins d'une application à une autre, mais le probleme amha
c'est qu'il ecrit ces "utils" dans le contexte des applications, pas dans
le contexte de produire un code generaliste reutilisable,
et c'est amha pour ca que un framework a du bon
zwetan , eka >
j'ai l'impression de relire chaque fois les mêmes réactions quel que soit le forum et peu importe le sujet. c'est fatigant.
perso je ne crois pas au framework lancé par un hermite génial.
les seuls frameworks valables sont ceux développés en interne par des boîtes pour répondre à leurs propres besoins. le reste n'est que pignolette pour codeurs qui s'écoutent parler...
nicoptere >
en général ces boites utilisent des framework externes quand ils ne le savent pas le faire eux-meme, soit leurs developpeurs n'ont pas le niveau (écrire PV3D ou utiliser PV3D ca ne demande pas le meme niveau hein), soit ils n'ont tout simplement aucun interet à développer un framework qu'ils ne peuvent pas directement facturer au client.
Pour leurs frameworks interne, euh mouais, tout depends des boites,
mais en général c'est du closed source et c'est plutot de tres tres mauvaise qualité (ils ne connaissent ni le versioning, ni les builds, ni les unit tests, etc.)
ex concret:
vu dans une tres tres grosse boite de comm londonienne
un framework interne basé sur pureMVC plus d'autres trucs
avec a peu pres 3000 errors et warnings quand on le charge dans FDT
avec une version différente utilisée pour chaque site
et avec zero unit tests
et bien sur chaque site en production qui utilise ce fameux framework interne
systèmatiquement en retard de 1 mois ou 2
pour cause de bugs
et je le meme exemple pour des grosses boites de comm parisienne
donc sur la partie
"les seuls frameworks valables sont ceux développés en interne par des boîtes pour répondre à leurs propres besoins."
ca me fait pas mal rigoler
c'est justement parce que des boites (grosses ou moyennes) s'embourbent dans des framework interne ou externe (le sujet de ce post) qu'ils sont désespérés pour trouver des developpeurs AS3 experts (surtout qd le(s) gar(s) qui leur ont dévelopés leur framework interne se barre(nt) sans prévenir)
pour le reste "hermite" et "pignolette", on ne force personne à utiliser maashaack ou autre framework, on parlait juste de ce framework comme exemple de framework applicatif (à l'opposé de framework architectural), maintenant si tu veux vraiment critiquer ce framework pas de soucis, mais
1) fait le plutot sur FCNG
http://groups.google.com/group/FCNG...
2) et si tu critiques, fais le sur le code et/ou l'utilité du code
pignolette ou autre nom d'oiseau ca n'a pas vraiment aucune valeur
c'est plus intéressant d'avoir qlqn qui nous sort que telle class ou function ou autre ne fait pas ce dont il a besoin ou que p-e telle fonctionalité à un bug
et si tu n'utilise pas le framework et n'a pas envie de l'utiliser, on ne force personne à l'utiliser, tu peux tres bien continuer a scripter la timeline,
ca nous gene pas :p
Bonjour LAlex,
je suis leader du projet Foundry chez ServeBox, et je suis assez paradoxalement - ou logiquement selon le point de vue - d'accord pour la plus grosse partie. Actuellement, nous sommes en train de refondre l'intégralité du (des) projet(s) et d'en proposer de nouveaux, en particulier pour proposer des solutions plus lisibles et mieux documentées (ce qui pêche clairement à ce jour, nous en sommes très conscients).
Le point de fond sur lequel je suis 100% ok, c'est qu'avant de choisir un framework, mieux vaut se demander précisément quel est le besoin réel, et à partir de là, la checklist :
- puis-je trouver une solution conceptuelle simple (=ai-je besoin d'un framework, comme tu le soulignes très bien) ?
- dans le cas où j'ai besoin d'un framework, quel est le plus adapté ?
- ai-je les skills nécessaires pour utiliser tel ou tel framework ?
- quels sont les compétences, capacités et pratiques de mon équipe de développement ?
Là où je le suis moins, c'est sur le fait de faire des solutions "maison" une panacée. Le temps passé en veille/R.D sur un framework permet aux développeurs "juniors" (théoriquement) de faire un bond en avant sur les aspects conceptuels, et surtout (théoriquement, une nouvelle fois) de rationaliser la production d'une équipe sur un ensemble de connaissances et d'outils. Des exemples dans le monde Java comme Spring illustrent bien, je pense, l'intérêt de telles initiatives.
Merci en tout cas pour l'ouverture de cette discussion bien intéressante.
Hello,
Je me trompe peut être mais j'ai l'impression que la vision de Lalex et celle d'Ekameleon est différente au moins, en partie, parce qu'ils ne travaillent pas du tout sur des projets de même taille, durée de développement.
Surtout, dites-moi si je me trompe...
Personnellement, je travaille quotidiennement sur un logiciel basé sur AS et Delphi, ce qui implique beaucoup de code, de classes, la nécessité que l'application soit "paramétrable", etc...et je regrette beaucoup que le projet ne soit pas plus structuré suivant les patterns de conception, ce qui fournirait de la souplesse dans le développement.
Et pourtant, je suis assez d'accord avec Lalex dans le sens où je préfère investir du temps pour comprendre les concepts de Keith Peters dans son dernier bouquin (Advanced AS 3.0 animation, suite du précédent) pour coder une détection de collision optimisée sur 100 objets ou ajouter des comportements d'IA à des sprites, plutôt que de passer le même temps à appréhender une fabrique d'application du type des frameworks cités plus haut.
Si un projet de taille importante (comme le soft sur lequel je bosse) nécessite effectivement une architecture, je préfère la construire petit à petit, en utilisant les mvc, ioc, commandes et autres, au fur et à mesure, du développement et en m'appuyant sur des références solides mais pas forcément nombreuses (par exemple, le bouquin du gang of 4 sur les designs patterns et c'est tout...c'est déjà bien assez gros)
Très franchement, quand je me balade chez Eyrolles sur le bvd Saint Germain avec tous ces bouquins qui prétendent fournir la meilleur manière de coder telle ou telle fonctionnalité, où que je vois la quantité de frameworks, librairies (par exemple, les bibliothèques de Tween) qui existent et qui sortent tous les jours, je me dis qu'il me faudrait 3 vies parallèles pour pouvoir consacrer du temps à tout ça.
Ca dérive un peu du sujet, mais ce que je préfère en terme de code partagé et distribué à d'autres, c'est les composants. Hop, un petit fichier mxp, on se retrouve avec une jolie branche en + dans le panneau composants de flash, avec une jolie icone. On fait glisser sur la scène, on remplie qqs paramètres et on a une fonctionnalité toute prête, qui fonctionne tout de suite et qui est bien cool...et ça ne demande pas de chercher un tuto, de lire, de consulter le code (même si c'est une très bonne pratique...pour peu que le code soit intelligent) de maintenir à jour via svn..etc.
Afin de fournir de l'eau au moulin de ce post :
"Plus que l’adoption de tel ou tel framework, c’est la technique d’implémentation et les principes sous-jacents qu’il est nécessaire de maîtriser."
Bien senti et écrit dans cet article : http://blog.kapit.fr/ria/2008/09/03...
Fil des commentaires de ce billet