Grafikart / Grafikart.fr

Dépôt pour la nouvelle version de Grafikart.fr
640 stars 180 forks source link

Quel langage / framework choisir ? #1

Closed Grafikart closed 4 years ago

Grafikart commented 4 years ago

La question se posera au moment du développement mais pour le moment j'hésite entre Laravel / Symfony et Rails.

Ruby on Rails

J'aime le langage et je trouve que le framework permet d'avancer rapidement et offre de bons outils. En revanche, le code peut rapidement être difficile à parcourir à cause du méta-programming qui est fréquent dans le framework et pas sûr que tout le monde soit en mesure de participer dans ce choix technique.

Avantages

Inconvénients

Symfony

J'aime bien l'approche Data Mapper de l'ORM Doctrine fournit dans le framework mais il a de nombreuses limitations qui bloquent assez rapidement (relation polymorphique, hydratation des liaisons pas forcément évidente...) du coup j'ai peur de perdre un temps considérable sur cette partie là.

Avantages

Inconvénients

Laravel

J'aime bien le code (un peu comme pour rails) mais d'expérience le code devient rapidement difficile à gérer au niveau des Model qui finissent pas englober pas mal de logique (relation, persistance, mutateurs...).

Avantages

Inconvénients

Le reste ?

Evidemment il existe d'autres frameworks / langage mais je préfère rester sur qqchose que je maitrise pour créer un code propre ce coup ci ;)

brandonsueur commented 4 years ago

Si tu souhaites avoir du monde qui participe sur le projet, apporter en même temps de la simplicité je pense qu'il serait judicieux de choisir Laravel. 🙂

acanoenfr commented 4 years ago

Après le site web en full javascript ou typescript, ça pourrait être super intéressant. A voir maintenant, tout dépend, comme tu l'as dit @Grafikart, de tes compétences et tes besoins.

ghost commented 4 years ago

Étant désormais un grand fan de Laravel et on vu des besoins "simple" que demande un site comme le tiens, je serais tenté de dire Laravel.

Ayant une petite expérience avec SF & Laravel je trouve le choix de SF judicieux pour les institutionnels. et assez "gros".

En revanche, je suis pas forcément d'accord avec @brandonsueur, il y aura bien plus de gens pour mettre la main à la patte avec SF que Laravel. On sait tous que en France SF explose (et de loin) Laravel pour ce qui est de la popularité.

Autre point @Grafikart, si jamais tu venais à faire une série un peu "avancé" sur Laravel pour expliquer le développement, ça serait un contenu supplémentaire. Le contenu SF est quand même déja bien en place sur Grafikart actuellement (et le contenu Laravel un peu outdated).

quenti77 commented 4 years ago

Pour laravel :

Par contre je suis pas contre de voir autre chose que du laravel. Je voulais juste éviter de voir des points comme MAJ difficile ou autre.

TuxBoy commented 4 years ago

Laravel serait un bon choix, il offre vraiment une flexibilité au niveau de l'organisation, il y a l'organisation par Domain (https://stitcher.io/blog/organise-by-domain) de plus, depuis la version 6 ils ont grandement améliorer les perfs (LazyCollection par exemple) et il respecte aussi le Semantic versioning sur le framework maintenant. Pour alléger la partie Model on peut toujours mettre tout ce qui concerne les requêtes dans une classe dédié (genre un repository, plus facile à tester aussi je pense).

ça serait vraiment bien de voir le site Grafikart sur du Laravel :) Une question comme ça @Grafikart tu n'as pas du tout pensé à CakePHP ?

Mcdostone commented 4 years ago

Je ne sais pas trop quoi répondre à cette question car je ne sais pas si Grafikart a prévu du refactoring sur sa database. Je m'explique: Grafikart énonces par exemple le fait qu'il n'y ait pas de relation polymorphique dans SF (je connais pas le framework). La question que je me pose du coup, c'est: utilises-tu cette fonctionnalité pour le site actuelle?

Conclusion: Pour ma part, il est trop tot pour que je puisse donner un avis pertinent. Certes Grafikart énonce ce qu'il le pousse à refaire le site (c.f. README.md) mais il me semble difficile de choisir un framework sans connaitre les besoins. Je ne sais pas si je suis assez clair.

SwithFr commented 4 years ago

Avis de cœur, mais pas forcément le plus objectif, je partirais sur du Laravel pour la simplicité ce qui est aussi son point faible, trop de façons de faire une même chose ce qui obscurci le code. La problématique des models qui se chargent en complexité que tu évoques peut-être "contournée" ou limité avec une couche Repository et/ou en définissant en amont de ce à quoi va être limité le model pour ne pas le complexifier avec le temps.

farpat commented 4 years ago

Mon choix subjectif : Laravel 6 => Le code est plus " métier " que Symfony : Juste attention à imposer " une norme " de code pour faire les choses de la même façon. ROR, je ne connais pas plus que ça.

Mon choix objectif : Symfony 4 => C'est le framework le plus connu en France. Il a des points positifs par rapport à son " concurrent " Laravel (attention c'est subjectif) :

Grafikart commented 4 years ago

@Mcdostone Oui j'ai pas mal de relation de ce type. Par exemple :

Dans tous les cas le choix se fera après la conception du diagramme de base de données donc on pourra voir les problèmes à ce moment là pour reparler du choix.

ndalaba commented 4 years ago

J'ai été confronté au même problème que toi. Le choix entre symfony et laravel (désolé pour ruby, connais pas)

Eloquent > doctrine blade = twig Je préfère le routing de symfony(annotation), moins de fichiers à gérer.

La différence s'est faite au niveau du testing Pour les tests unitaires et fonctionnel (laravel c'est beaucoup plus simple à mettre en place). Constat personnel.

Après j'ai voulu combiné symfony et eloquent https://github.com/wouterj/WouterJEloquentBundle/blob/master/Resources/docs/usage.rst#eloquent-orm mais au final j'ai hésité.

zimski commented 4 years ago

Je partirai sur du Rails

Le méta-programing, c'est très simple faut l'éviter :)

La partie recherche pour un avoir une bonne expérience de recherche, Algolia propose un bon service Saas de recherche, ce qui permet de réduire la complexité interne et virer la couche Elastic Search

Un bon exemple d'un site ROR qui est très performant, il est open-source en plus dev.to

maxchene commented 4 years ago

Pourquoi pas un petit retour aux sources avec CakePHP (3 ou 4 )qui a bien évolué depuis .

rebelor commented 4 years ago

Tu fais des tutos sur le PHP, y a même de quoi faire ton propre CMS (si vraiment un CMS est nécessaire puisque tu sais exactement ce que tu veux et ce que tu ne veux pas!) alors : Et pourquoi pas ton propre code ? (là je vais sûrement me faire incendier mais bon pas grave)

Sh1n1x commented 4 years ago

Hello Graf',

Au vu du site actuel et de la technologie utilisée, je partirai sur RoR car :

En gros tu as tout à gagner en repartant sur Rails car ça va t'éviter de devoir réécrire un bon 40% du code backend.

tmicka23 commented 4 years ago

Hello, moi je dirais RoR, pour les raisons invoquées par @Sh1n1x et @zimski, et aussi parce que je pourrais participer ! :laughing: sinon en dehors de rails, je te pousserais sur Laravel, qui regroupe pas mal d'avantages de Rails, notamment la "simplicité" du code, et puis c'est du PHP, donc facile de trouver des collaborateurs... pour ce qui est des inconvénients, vu ton expérience je suis sûr que tu trouveras des solutions pour chaque technos...

####### EDIT ########## Rails te permettrais de mettre à jour la formation sur Ruby on Rails aujourd'hui en version 6 et qui apporte de nombreux changement intéressants... ####### END EDIT ######

alors +10 pour RoR et +1 pour Laravel

okeb commented 4 years ago

Salut Jonathan @grafikart

Pour ma part non choix se porterait vers RUBY ON RAILS C'est vrai que tu liste des inconvénients, mais avec la nouvelle version 6 je pense qu'il y a de quoi en faire. Et c'est vrai que les models peuvent vite devenir gros mais on a toujours des concern.

En ce qui concern le typage, il n'y a pas vraiment d'alternative, physique la force de ruby c'est justement d'un peu contrebalancer ça. Est ce problématique vraiment?🤔 Honnêtement je ne pense pas.

Donc voilà d'autant plus que si tu change d'avis avec les vuejs et react c'est direct intégré avec turbolinks en deux lignes de code. Perso je suis passé sur ROR a cause de la vitesse de chargement de grafikart.fr malgré le tout plein d'info. C'est pas le meilleur des argument mais ROR n'est pas pour rien.

Recrit grafikart.fr plus proprement avec ROR+swelte+css en dure+MySQL

Donc voilà pour moi c'est le ruby qui l'emporte. D'autant plus que ce ne sera pas un enfer de le mettre a jour où le maintenir

florentsorel commented 4 years ago

Je partirais sur du Zend Framework 3 ☺️ ou Laminas (le jour où on aura des nouvelles dessus 🙄) J'utiliserais zend-db en écrivant les requêtes SQL à la main.

Parmis tes choix je prendrais Symfony. Ce que je n'aime pas dans Symfony c'est la configuration par défaut en ayant des validateurs et l'association de sgdb au sein même de l'entité. Pour moi l'entité c'est juste une classe métier qui ne doit pas comprendre d'annotation pour de l'applicatif ou de l'infrastructure.

Personnellement je ne fais pas de relation polymorphique, je crée autant de table que j'ai d'association. Une table PostCategory, une table VideoCategory, etc. Le fait de faire un where sur ton type ne me plaît pas, que ça soit en terme de performance ou même à écrire.

betaWeb commented 4 years ago

Salut @Grafikart,

Je suis tes vidéos depuis assez longtemps, et je pense que le choix le plus judicieux pour toi serait d'utiliser Laravel. Parce que celui-ci reste rapide à mettre en place, dispose de beaucoup de fonctionnalités embarquées qui faciliteront le dev et est, si on adopte une bonne archi, facilement scalable. Et puis tu aimes travailler avec ce framework il me semble :) Ca serait le choix de la logique compte tenu de ce que tu as à implémenter (ça reste relativement 'simple', y'a rien de bien complexe).

Après je me demandais : quid du backoffice ? Tu penses le dissocier du front (autre nom de domaine, autre projet, autre techno) ? Ou bien le développer en parallèle sur le même projet ?

mouhssinelghazzali commented 4 years ago

@Grafikart oui je suis d'accord avec toi avant de choisir le framework il faut faire la conception pour tu pourras savoir les problèmes avec la solution si tu termines la conception j'aimerais de voir la conception de la base de données et je suis disponible si tu as besoin d'aide ou de qlq chose

Grafikart commented 4 years ago

@mouhssinelghazzali Je viens de mettre la structure de la base de données sur un autre ticket : https://github.com/Grafikart/Grafikart.fr/issues/34

@betaWeb Pour le backoffice pour moi ça serait dans le même code car ça me permet de réutiliser les model et le code de l'application.

Gawaboumgaa commented 4 years ago

Pour Ruby On Rails, ça te permettra de réutiliser certaines briques existante, Ruby c'est simple et facile à comprendre pour les débutants qui veulent contribuer et avec RoR 6, on a de quoi faire ;)

zkiller commented 4 years ago

Fait ton propre framework basé sur les middleware cela permettrais même de faire des vidéos.

agentcobra commented 4 years ago

@Grafikart tu n'as pas proposé cakephp !

bernard-ng commented 4 years ago

Pour le langage je propose PHP, et pour le framework symfony, en regardant les Inconvénients et avantages que @Grafikart retient de symfony et laravel, on peut facilement gérer symfony :

ksom commented 4 years ago

Pour le langage je propose PHP, et pour le framework Symfony. Je rejoins le commentaire de @bernard-ng

Pour les relations polymorphique je ne vois pas le soucis avec Doctrine. En effet il est possible de gérer cela d'une très bonne manière.

Pour cela 2 choix: Avec une seule table (utile parfois mais ce je préfère l'autre solution) : https://www.doctrine-project.org/projects/doctrine-orm/en/2.6/reference/inheritance-mapping.html#single-table-inheritance Avec le join strategy (2 tables): https://www.doctrine-project.org/projects/doctrine-orm/en/2.6/reference/inheritance-mapping.html#class-table-inheritance

Je l'ai déjà utiliser dans un gros projet sans aucun problème. Tu aurais par exemple 3 entités: Category, TutorialCategory, FormationCategory. De cette manière tu auras un repository pour chaque. Et le CategoryRepository serait commun à tous.

Je sais que dans ta video tu annonçais que tu ne préférais pas aller vers API/Client. En disant que ca serait probablement galère et que les frameworks évoluent tout le temps. J'aurais pour ma part Voter PHP Symfony Api-Platform pour le backend (tu as une full API expose en ayant juste décrit tes entités). Et Angular pour le front (il est stable depuis longtemps, et pour avoir fait des MAJ sur les projets entre Angular 2 jusqu’à 7 je n'ai jamais rencontre de galère. Pour la SEO no problem c'est embed il y a le server side rendering super easy a mettre en place je l'ai déjà fait de multiple fois. [EDITED] En gros le server side rendering est gérer simplement avec un petit serveur node qui est fournit (rien a réaliser comme travaille) qui va s'occuper de parser la page demandée cote serveur avant de la renvoyer cote client donc elle est complètement rendered comme ca le serait avec la manière classique. [END EDITED] Pour le cache -> no problem également c'est gérer directement dans angular avec PWA qui permet d'utiliser le site comme une app mobile ou une app desktop (sans avoir a ouvrir chrome et accéder au site via URL). Et qui ne demande quasiment aucun travail supplémentaire. [EDITED] Un autre avantage mais qui est moindre étant donne que les videos sont host sur youtube et que je suis pas sur qu'il permettent de les stores (a vérifier) est que le site est accessible offline grace au PWA. Si les videos étaient host sur ton site ca serait possible : exemple sur stackoverflow, un autre exemple et peut être meme possible avec Youtube.[END EDITED]

Avoir le site sous forme d'API aurait permit entre autre par la suite de faire une application native avec Flutter (Google) qui est juste incroyable et qui par exemple aurait pu servir de tutoriel. Pour rappel Flutter permet de créer une application full native iOS et Android (rien a voir avec React ou Ionic ou tout autre cross platform mobile app).

Flutter permet aussi de faire des applications Desktop et Web avec le meme codebase ! Je me suis pas prononcer sur Flutter pour le client Web car je ne suis pas sur s'il a ou non des restrictions en SEO étant donne qu'il utilise un canvas.

arbims commented 4 years ago

@Grafikart tu n'a pas pensé a cakephp dans ça nouvelle version c'est très léger et l'orm très fort et il utilise les route comme dans laravel

AlbertBeweb commented 4 years ago

Sf tout simplement car il est français sans partir dans un chauvinisme extrême, nous avons la chance d'avoir quelque chose de bien et typiquement tout le monde va voir si l'herbe est plus verte ailleurs avec toutes les bonnes raisons que chacun a. Mais je trouve que supporté nos entreprises françaises commence par là :) Si ça blesse certains, cela est mon avis et je privilégiai toujours un français si la qualité et les produits sont a peut près similaires.

tmicka23 commented 4 years ago

@Grafikart j'ai cru comprendre que le typage était un élément important pour toi de plus en plus, voilà de quoi avancer dans ce sens en Ruby ... https://youtu.be/jielBIZ40mw

agentcobra commented 4 years ago

PHP 7 permet du typage fort en mode strict

ksom commented 4 years ago

PHP 7 permet du typage fort en mode strict

Et avec 7.4 qui vient de sortir on peut meme typer les propriétés de classes ! ;)

Grafikart commented 4 years ago

Le choix a été fait ! Et pour la partie backend cela sera du coup du Symfony.

Cela n'a pas été un choix simple mais voila mon raisonnement :

Ephraim-tuto commented 6 days ago

Bonsoir