2220

Garde en tête que le scaffolding n'est PAS un code final, ni même intermédiaire. Il s'est qu'une base à retravailler.
Par exemple, mon framework est bien plus efficace si j'indique dans le code quelle table est liée à quelle table, quel type de lien (A appartient à B, B possède plusieurs C...), quelles sont les clés étrangères, certains champs ont-ils des limitations (par ex un champ varchar(45) doit avoir une règle de validation des données vérifiant qu'une insertion ne dépasse pas 45 caractères).
Les conventions suivies règlent une partie de ces contraintes, le scaffolding génère du code pour gérer l'autre partie. Sur une base d'une vingtaine de tables, je devrais écrire une vingtaine de modèles pour gérer ces différentes configurations. Le scaffolding s'en occupe pour moi.
Je parle bien sûr du code répétitif, pas de ce que le script ne peut deviner (même s'il peut en deviner certaines. Par ex un champ "email" recevra une règle vérifiant à l'insertion que la donnée est une adresse email valable).

En fait, je crois qu'il y a un soucis de compréhension entre ceux qui ne sont pas partisans de ce concept et ceux qui l'utilisent quotidiennement. Un peu comme je vous expliquerais en tant que bûcheron qu'utiliser une tronçonneuse est bien plus rapide, que la coupe est plus nette, et qu'on me répond que c'est plus dangereux, qu'il faut y mettre de l'essence...
flanker (./2219) :
Je trouve qu'il est beaucoup mieux de générer le code SQL à partir du code Ruby.
Je ne suis pas sûr de saisir ce que tu veux dire. Je n'écris jamais du code SQL pur dans le code. Par ex, tu devrais pouvoir comprendre cette requête CakePHP :$commandes = $this->Commandes->find() ->where(['Commandes.user_id' => $userId, 'Commandes.exported' => 0]) ->contain([ 'Users' => ['Groupes'], 'Clients' => ['Groupes'], 'CommandeTypes' ]) ->order(['Commandes.actif' => 'ASC']) ->all(); // ou $types = $this->Commandes->CommandeTypes->find('list', [ 'keyField' => 'id', 'valueField' => 'type' ])->toArray();Pour autant, il est certain que pour écrire cette requête, il faut savoir ce qu'on veut faire en SQL.
avatar
« Nous avons propagé sur Extranet une histoire fabriquée de toutes pièces selon laquelle une certaine disposition d'étoiles, vue depuis la planète d'origine des butariens, formaient le visage d'une déesse galarienne.
Sans chercher à vérifier ces informations, certains ont décrété que c'était la preuve de l'existence de la déesse. Ceux qui notaient le manque de preuves se faisaient attaquer. »

Legion, geth trolleur à portée galactique

2221

Zeph (./2213) :
Ah oui tiens, j'ai touché pour la première fois à un site en CakePHP y'a pas longtemps pour un pote, je crois que c'est de loin le pire framework web que j'ai vu. Tout est basé sur des conventions de nommage avec plein d'horreurs comme ces règles singulier/pluriel que tu cites, tout ça pour gratter 3 lignes de code et éviter d'injecter explicitement ses dépendances #gerbe#
Tu aurais un exemple ? Ça m'intrigue, mais j'y connais absolument rien.
avatar
Zeroblog

« Tout homme porte sur l'épaule gauche un singe et, sur l'épaule droite, un perroquet. » — Jean Cocteau
« Moi je cherche plus de logique non plus. C'est surement pour cela que j'apprécie les Ataris, ils sont aussi logiques que moi ! » — GT Turbo

2222

(hop #triway#)

Sinon oui je serais aussi curieux de voir vite fait cheeky

2223

Mais à quoi ressemble le code initial, qui permet de générer le code Ruby ?
Je ne suis pas sûr de comprendre exactement, et j'ai l'impression que tu dois retravailler du code généré automatiquement (ce qui veut dire que tu ne peux plus le regénérer si tu as modifié la source).


Pour reprendre l'exemple de Python + Django que je connais assez bien, je ne manipule que le fichier Python suivant, et à aucun moment je n'ai à toucher du SQL (ni la personne qui installera le site, d'ailleurs).
from django.db import models class Question(models.Model): question_text = models.CharField(max_length=200) pub_date = models.DateTimeField('date published') class Choice(models.Model): question = models.ForeignKey(Question, on_delete=models.CASCADE) choice_text = models.CharField(max_length=200) votes = models.IntegerField(default=0)
Je peux modifier comme je veux ce code (ajouter des méthodes qui n'ont rien à voir avec l'aspect BDD, par exemple), vu que c'est le code primaire.
Sous le capot, ça me permet de construire deux tables SQL avec trois et quatre colonnes respectivement (la clef primaire est ajoutée automatiquement si besoin), dont une colonne fait référence à une autre table. *toutes* les informations sont dans le code Python (y compris les index, les contraintes d'intégrité, les tailles de champs, etc.). Une fois mon code écrit, je le fige (avec une ligne de commande "python manage.py makemigrations") en générant un fichier Python quelque part (et je n'aurai jamais besoin de le regarder).
Su le serveur, la commande "python manage.py migrate" crée toutes les tables et les index. Si je dois modifier ma structure, je modifie directement mes classes Python et je rejoue les commandes "makemigrations" sur mon poste de dév et "migrate" sur le serveur.
À partir de là, je peux très bien faire un migrate vers une version antérieure de la base de données. Pas de souci non plus pour faire une mise à jour de plusieurs versions d'un coup : les migrations seront appliquées les unes après les autres de façon transparente.
avatar
<<< Kernel Extremis©®™ >>> et Inventeur de la différence administratif/judiciaire ! (©Yoshi Noir)

<Vertyos> un poil plus mais elle suce bien quand même la mienne ^^
<Sabrina`> tinkiete flan c juste qu'ils sont jaloux que je te trouve aussi appétissant

2224

pen^2 > vtff
avatar
<<< Kernel Extremis©®™ >>> et Inventeur de la différence administratif/judiciaire ! (©Yoshi Noir)

<Vertyos> un poil plus mais elle suce bien quand même la mienne ^^
<Sabrina`> tinkiete flan c juste qu'ils sont jaloux que je te trouve aussi appétissant

2225

Muhuhuhu!
Ça t'apprendra à faire des posts utiles et longs embarrassed

2226

Je n'étais pas sûr de comprendre, du coup : https://en.wikipedia.org/wiki/Scaffold_(programming)(programming)
It has been adapted to other software frameworks, including OutSystems Platform, Express Framework, Play framework, Django, web2py, MonoRail, Brail, Symfony, Laravel, CodeIgniter, Yii, CakePHP, Phalcon PHP, Model-Glue, PRADO, Grails, Catalyst, Seam Framework, Spring Roo, ASP.NET Dynamic Data, KumbiaPHP and ASP.NET MVC framework's Metadata Template Helpers.
Avec symfony c'est ça du coup : http://symfony.com/doc/current/bundles/SensioGeneratorBundle/commands/generate_doctrine_crud.html

Ca permet d'ajouter les interactions de base avec une table en db dont on a le model.

2227

flanker (./2223) :
Mais à quoi ressemble le code initial, qui permet de générer le code Ruby ?
Je ne suis pas sûr de comprendre exactement, et j'ai l'impression que tu dois retravailler du code généré automatiquement (ce qui veut dire que tu ne peux plus le regénérer si tu as modifié la source).
Pour reprendre l'exemple de Python + Django que je connais assez bien, je ne manipule que le fichier Python suivant, et à aucun moment je n'ai à toucher du SQL (ni la personne qui installera le site, d'ailleurs).
Je vois. Tu ne comprends pas parce que ton approche est que le code doit générer la base de données, tandis que du mien la base de données génère le code (et quand je dis "code généré", je parle de vues et formulaires exploitables en localhost, c'est ça le scaffolding).
On ne régénère pas la base de données par du code quand on la change de mon côté, car les changements se font côté DB.
avatar
« Nous avons propagé sur Extranet une histoire fabriquée de toutes pièces selon laquelle une certaine disposition d'étoiles, vue depuis la planète d'origine des butariens, formaient le visage d'une déesse galarienne.
Sans chercher à vérifier ces informations, certains ont décrété que c'était la preuve de l'existence de la déesse. Ceux qui notaient le manque de preuves se faisaient attaquer. »

Legion, geth trolleur à portée galactique

2228

Meowcate (./2227) :
On ne régénère pas la base de données par du code quand on la change de mon côté, car les changements se font côté DB.
Mais le changement se fait forcément à la fois côté DB ET côté Ruby hum
Si je rajoute un champ "birth_date" à ma classe User, je dois changer ma BDD (pour ajouter la colonne), mais aussi les formulaires ainsi que la définition de la classe User.
Du coup, comment fait-on en Ruby pour ne pas toucher le code à trois endroits différents dans deux langages distincts ?
avatar
<<< Kernel Extremis©®™ >>> et Inventeur de la différence administratif/judiciaire ! (©Yoshi Noir)

<Vertyos> un poil plus mais elle suce bien quand même la mienne ^^
<Sabrina`> tinkiete flan c juste qu'ils sont jaloux que je te trouve aussi appétissant

2229

A vrai dire ne pas du tout vouloir voir le code SQL c'est ce voiler la face. Le moment on ton truc ne marchera pas et tu sera incapable de faire la moindre requête a la main pour tester ce qui marche de ce qui ne marche pas, tu sera content.
class Question(models.Model): question_text = models.CharField(max_length=200) pub_date = models.DateTimeField('date published')
reviens a faire un
CREATE TABLE 'Question' ( question_text CHAR(200), pub_date DATETIME );
Mon dieu que c'est dur et difficile a faire..

Et ton code automatique ne te garantit pas non plus que ta table sera mis a jour correctement une fois en prod si tu ajoute un champs, si bien ton truc va tout t'effacer et repartir de 0, quelle preuve a tu qu'il n'y a pas de bug dans le code?

Et ce n'est pas comme si le SQL était le langage le plus difficile au monde :/

Meow: vu la qualité intrinsèque de Ruby, franchement.. Je ne prendrais aucune développement fait autour de ce langage comme référence de choses a faire :/
avatar
Proud to be CAKE©®™


GCC4TI importe qui a problème en Autriche, pour l'UE plus et une encore de correspours nucléaire, ce n'est pas ytre d'instérier. L'état très même contraire, toujours reconstruire un pouvoir une choyer d'aucrée de compris le plus mite de genre, ce n'est pas moins)
Stalin est l'élection de la langie.

2230

Sauf que
* ça signifie synchroniser en permanence deux codes qui n'ont rien à voir (la classe Ruby/Python ET le code SQL) -> ça finira toujours avec une désynchro entre les deux et tu ne sauras plus où… par expérience, c'est franchement pénible et une source de bugs très commune (suis-je le seul à penser ça ?)
* bien sûr, quand tu n'as que deux tables avec deux champs, c'est facile à faire. C'est nettement plus pénible quand tu as quelques dizaines de classes avec des contraintes d'intégrité de partout, ainsi que des index particuliers. Et quand tu rajoutes un clef étrangère à une classe parente de 5 ou 6 classes, il faut modifier, toujours à la main, les 5 ou 6 tables SQL (au bon endroit ! )… couic
* oui, c'est facile à faire en SQL… mais au fait, de quel SQL parles-tu ? SQLite ? OracleSQL ? Postgresql ? MySQL ? Ça me paraît franchement dommage de se lier à un dialecte en particulier… couic^2 c'est même rédhibitoire pour moi
* si, le code automatique me garantit que la table SQL sera synchronisée par rapport à la version du code Python. Si j'ai ajouté un champ, je peux spécifier une valeur par défaut ou générer la bonne valeur à chaque ligne.
* il y a beaucoup moins de chance d'avoir un bug dans le code du framework (écrit par des spécialistes et relu) que dans mon code
* au final, par expérience et même avec des requêtes compliquées, je n'ai jamais besoin de pondre du SQL. Oui, il faut comprendre comment fonctionne le SGBD et savoir comment fonctionne le code Python pour générer le SQL. Par contre, pas besoin de savoir s'il faut un `, un " ou un ' en fonction du SGBD derrière.
avatar
<<< Kernel Extremis©®™ >>> et Inventeur de la différence administratif/judiciaire ! (©Yoshi Noir)

<Vertyos> un poil plus mais elle suce bien quand même la mienne ^^
<Sabrina`> tinkiete flan c juste qu'ils sont jaloux que je te trouve aussi appétissant

2231

J’espère beaucoup pour toi que tu ne tombera jamais dans le cas obscure ou le générateur de code te fait de la merde et te plante tout, et ça arrive crois moi.
La "relecture par des pro" ou "l'opensource empêche de telle problèmes car le code est lisible par tout le monde" et tout ce qui va avec a montre mainte fois que même dans du code HYPER CRITIQUES, bien plus que ton générateur de SQL, des bugs a la con peuvent traîner plus de 15ans. (cf HeartBleed)

Je n'ai jamais eu confiance dans les truc qui font magiquement a ma place, jamais, ça m'a toujours apporte plus d'emmerdes qu'autre chose.

D'ailleurs pour ton point 3, tu change de SGBD tous les combien?
Non parce que je doute que tu change tous les 4 matins, faire un truc compatible 100% tout le monde est illusoire dans bien des domaines.
(au passage le SQL est standardise, tout comme le C, C++ et certains autres langages, il y a des extensions oui, mais la base du langage est la même pour tout le monde)

M'enfin fait comme tu veux, tu as tes préférences et tu as fait tes choix, je ne les partages pas.
avatar
Proud to be CAKE©®™


GCC4TI importe qui a problème en Autriche, pour l'UE plus et une encore de correspours nucléaire, ce n'est pas ytre d'instérier. L'état très même contraire, toujours reconstruire un pouvoir une choyer d'aucrée de compris le plus mite de genre, ce n'est pas moins)
Stalin est l'élection de la langie.

2232

Godzil (./2231) :
J’espère beaucoup pour toi que tu ne tombera jamais dans le cas obscure ou le générateur de code te fait de la merde et te plante tout, et ça arrive crois moi.
À nouveau, la probabilité qu'il y ait une erreur dans ce code est bien plus faible que celle qu'il y ait une erreur dans mon code oui
La "relecture par des pro" ou "l'opensource empêche de telle problèmes car le code est lisible par tout le monde" et tout ce qui va avec a montre mainte fois que même dans du code HYPER CRITIQUES, bien plus que ton générateur de SQL, des bugs a la con peuvent traîner plus de 15ans. (cf HeartBleed)
Je n'ai pas dit que l'open-source ou l'écriture par des pros garantissaient l'absence de bug ou de failles. J'ai dit qu'ils étaient bien meilleurs que moi tout seul. Ça n'a rien à voir !
Je n'ai jamais eu confiance dans les truc qui font magiquement a ma place, jamais, ça m'a toujours apporte plus d'emmerdes qu'autre chose.
Ça n'a rien de magique et le principe est assez simple pour être fiable ; suffit de voir le nombre de bug reports dans le tracker. Et si jamais il y a un souci, c'est simple d'afficher les requêtes SQL générées. Je l'ai fait à plusieurs reprises (sans jamais avoir à les modifier) pour être sûr du comportement avec des JOIN et pour voir la durée d'exécution de chaque requête. À nouveau, ça ne dispense pas de savoir comment ça marche en-dessous, ce n'est pas magique.
Accessoirement, le générateur de requêtes SQL est probablement exactement le même que pour Ruby, donc il y a peu de chances qu'il soit plus buggué. Par contre, il évite de devoir coder les choses en double, ce qui est une garantie d'avoir des bugs quand on modifie la structure de la bdd.
D'ailleurs pour ton point 3, tu change de SGBD tous les combien?
Tous les jours. SQLite en dev, Postgres ou MySQL pour les derniers tests et quand je déploie.
Non parce que je doute que tu change tous les 4 matins, faire un truc compatible 100% tout le monde est illusoire dans bien des domaines.(au passage le SQL est standardise, tout comme le C, C++ et certains autres langages, il y a des extensions oui, mais la base du langage est la même pour tout le monde)
Oui, enfin même un SELECT s'écrit différemment dans chaque moteur… et je ne parle pas des formats dates et heures couic
avatar
<<< Kernel Extremis©®™ >>> et Inventeur de la différence administratif/judiciaire ! (©Yoshi Noir)

<Vertyos> un poil plus mais elle suce bien quand même la mienne ^^
<Sabrina`> tinkiete flan c juste qu'ils sont jaloux que je te trouve aussi appétissant

2233

./2221 & ./2222 : Il y a un bon aperçu sur cette page, voilà quelques morceaux choisis :
Nous sommes de grands fans des conventions plutôt que de la configuration.
un controller à mot unique renvoie facilement vers un chemin URL en minuscules. Par exemple, ApplesController (qui serait défini dans le nom de fichier ‘ApplesController.php’) est accessible à l’adresse http://exemple.com/apples.

Les controllers à multiples mots peuvent être de forme ‘inflecté’ qui correspondent au nom du controller:

/redApples
/RedApples
/Red_apples
/red_apples
iront tous vers l’index du controller RedApples. Cependant, la convention est que vos URLs soient en minuscules et avec des underscores, c’est pourquoi /red_apples/go_pick est la forme correcte pour accéder à l’action RedApplesController::go_pick
Les noms de tables correspondant aux models CakePHP sont au pluriel et utilisent le caractère souligné (underscore). Les tables correspondantes aux models mentionnés ci-dessus seront donc respectivement : people, big_people, et really_big_people.

Note des traducteurs francophones : seul le dernier mot est au pluriel et tous les pluriels français ne seront pas compris par CakePHP sans lui indiquer précisément (par exemple cheval/chevaux). Voir pour cela le chapitre sur les inflexions.
Pour vous assurer de la syntaxe des mots pluriels et singuliers, vous pouvez utiliser la bibliothèque utilitaire Inflector. Voir la documentation sur Inflector pour plus d’informations.
Les fichiers de vue sont nommés d’après les fonctions du controller qu’elles affichent, sous une forme avec underscores. La fonction soyezPret() de la classe PersonnesController cherchera un gabarit de vue dans : /app/View/Personnes/soyez_pret.ctp.
etc, etc, tout est comme ça. Il y a parfois moyen de définir explicitement comment le programme doit fonctionner plutôt que de laisser CakePHP le deviner en faisant de la réflexion sur les noms de classe, de fichiers et de méthodes, mais la doc incite à laisser faire le framework autant que possible.

Après je comprends qu'on puisse préférer, comme souvent c'est une histoire de goût. Mais en l'occurrence c'est tellement aux antipodes de ce que je considère comme des bonnes pratiques sur à peu près tous les points mentionnés dans la doc que ça m'est vraiment resté en tête comme le framework à ne surtout jamais utiliser ou conseiller grin
avatar
All right. Keep doing whatever it is you think you're doing.
------------------------------------------
Besoin d'aide sur le site ? Essayez par ici :)

2234

C'est souvent bien d'avoir des conventions imposées par le framework (genre le nom de la table déduit du nom de la classe), mais là c'est franchement extrême grin Et je ne vois pas comment la gestion des pluriels peut être une bonne idée :/
avatar
<<< Kernel Extremis©®™ >>> et Inventeur de la différence administratif/judiciaire ! (©Yoshi Noir)

<Vertyos> un poil plus mais elle suce bien quand même la mienne ^^
<Sabrina`> tinkiete flan c juste qu'ils sont jaloux que je te trouve aussi appétissant

2235

Merci !
flanker (./2234) :
Et je ne vois pas comment la gestion des pluriels peut être une bonne idée :/
Oui, avec les pluriels irréguliers, ça doit être rigolo cheeky

2236

En cas de changement grammatical décrêté par une académie, ils font comment ? Ils cassent la base de code existante, ou ils travaillent avec un dictionnaire patché N?

2237

Ha neutralité va poser des problèmes c'est certains! (C'est maintenant interdit d'utiliser tout mot à connotation de genre, bon courage!)
avatar
Proud to be CAKE©®™


GCC4TI importe qui a problème en Autriche, pour l'UE plus et une encore de correspours nucléaire, ce n'est pas ytre d'instérier. L'état très même contraire, toujours reconstruire un pouvoir une choyer d'aucrée de compris le plus mite de genre, ce n'est pas moins)
Stalin est l'élection de la langie.

2238

./2235 & ./2236 : c'est là que c'est rigolo : Inflector.php hehe

(en cherchant cette classe dans le repo je suis tombé par hasard sur cette autre perle, dont la fonction "calculate" est presque une oeuvre d'art grin)
avatar
All right. Keep doing whatever it is you think you're doing.
------------------------------------------
Besoin d'aide sur le site ? Essayez par ici :)

2239

• Godzil a envie de vomir
avatar
Proud to be CAKE©®™


GCC4TI importe qui a problème en Autriche, pour l'UE plus et une encore de correspours nucléaire, ce n'est pas ytre d'instérier. L'état très même contraire, toujours reconstruire un pouvoir une choyer d'aucrée de compris le plus mite de genre, ce n'est pas moins)
Stalin est l'élection de la langie.

2240

Zeph : euh... wow grin

J'ai l'impression de lire le scénario d'une série, où un grand méchant a conçu un plan super élaboré pour dominer le monde, et où tout le monde attend de savoir quel sera le petit truc qui va tout faire s'écrouler comme un château de cartes en pratique grin
avatar
Zeroblog

« Tout homme porte sur l'épaule gauche un singe et, sur l'épaule droite, un perroquet. » — Jean Cocteau
« Moi je cherche plus de logique non plus. C'est surement pour cela que j'apprécie les Ataris, ils sont aussi logiques que moi ! » — GT Turbo

2241

Ah ouais, quand même grin

2242

mais putain pendez les, les mecs qui ont inventé ca.

2243

Zeph (./2238) :
(en cherchant cette classe dans le repo je suis tombé par hasard sur cette autre perle, dont la fonction "calculate" est presque une oeuvre d'art grin)
Mais ce n'est pas de leur faute que certaines langues ont des règles totalement tordues sur quand utiliser le singulier et quand le pluriel, voire quel parmi plusieurs pluriels. Ce sont les langues humaines, le bordel.
avatar
Mes news pour calculatrices TI: Ti-Gen
Mes projets PC pour calculatrices TI: TIGCC, CalcForge (CalcForgeLP, Emu-TIGCC)
Mes chans IRC: #tigcc et #inspired sur irc.freequest.net (UTF-8)

Liberté, Égalité, Fraternité

2244

Ouais mais dialoguer en C entre humains, ça a ses limites aussi, hein.

Parce que quand tu as une erreur de compilation dans ta phrases...

2245

Ou pire que tu fais un overflow.
avatar

2246

Tron: Et toi une erreur d'accord.

Kevin: Ouais exactement, elles ont aussi des règles naturelles et humaines sur le féminin, d'ailleurs.

2247

#facepalm#

2248

./2228
En partie parce que la DB appartient à un métier différent de celui du développeur (au mieux à un admin db, à défaut à l'admin système). La DB contrôlée par le dev fait parti de la configuration répandue "le dev fait tous les aspects du code" (db, front, back, parfois même la config serveur).
De fait, devoir synchroniser en permanence deux codes... oui. C'est aussi le cas si tu as un dev frontend, il va avoir besoin que le backend lui envoie de nouvelles données s'il vient à changer son affichage. C'est une affaire de communication dans l'équipe, pas d'hypercentralisation.
flanker (./2230) :
C'est nettement plus pénible quand tu as quelques dizaines de classes avec des contraintes d'intégrité de partout, ainsi que des index particuliers. Et quand tu rajoutes un clef étrangère à une classe parente de 5 ou 6 classes, il faut modifier, toujours à la main, les 5 ou 6 tables SQL (au bon endroit ! )…
On n'est peut-être pas d'accord sur la façon de développer un projet. Ce que j'ai toujours fait, en revenant le projet/CdC, c'est travailler la base de données, concevoir des tables, réfléchir aux besoins du client (avec les index pour la recherche, les contraintes de champs et de clés étrangères, d'unicité, etc), et tout cela doit être finalisé avant de commencer à écrire la plus petite ligne de code.
Je ne conçois pas la DB au fil du développement, c'est la base de mon projet. Autant dire que je ne retourne jamais sur la DB ensuite, à l'exception des nouvelles demandes clients (pour lesquelles, là encore, je fais les modifs DB avant toute autre chose).
Aussi, dans mon cycle de développement, concevoir la DB via le code m'est non seulement inutile (je n'ai pas besoin de régénérer la DB par la suite), mais en plus contre-productif (je suis plus efficace en concevant ma DB par un outil d'administration DB comme Workbench, ou même à défaut par phpMyAdmin, qu'en y tapant du code. Sans compter l'importance des schémas de relation quand tu travailles avec des DB ayant des dizaines de tables, et ça arrive assez souvent pour une clientèle professionnelle).
flanker (./2230) :
mais au fait, de quel SQL parles-tu ? SQLite ? OracleSQL ? Postgresql ? MySQL ?
Je ne pense pas que ce soit un problème. Avec "SQL" je parle de mon côté de MySQL, mais par l'expérience (et des clients aux configs différentes) je connais les plus grandes différences avec Oracle, SQLite, et Transact SQL. C'est essentiellement un point de détail.
flanker (./2230) :
au final, par expérience et même avec des requêtes compliquées, je n'ai jamais besoin de pondre du SQL
Là on est dans la théorie, et elle fonctionne du côté code, je le conçois. En revanche, la pratique impose parfois d'aller au-delà du code. J'ai régulièrement besoin d'ouvrir Workbench pour aller corriger de mauvaises données, supprimer des enregistrements douteux, etc (c'est toujours une merveille quand on bosse avec un client qui a besoin d'un import Base pro -> SQL quotidien rempli de cas particuliers).

Pour tout ce que je défends de mon approche du problème, je visualise bien l'intérêt de ta génération du SQL et les avantages que cela apporte. Il est certain qu'une faiblesse (un exemple parmi d'autre) de mon approche est qu'il est difficile de synchroniser sa DB de dev avec des collègues si elle se situe en localhost.




./2233
Tu es un peu à la bourre à sortir la doc de CakePHP 2.x, mais il faut reconnaître qu'il est très populaire. Même si CakePHP fut l'un des premiers gros frameworks PHP, il est resté en retrait en 2.x sur la concurrence (par ex de tout vouloir faire passer par des arrays que des méthodes).

La règle des pluriels avait pour but de permettre un fonctionnement simple du système de convention automatique (pour que le framework différencie Apple et Apples par exemple parmi la structure du code). C'est un point particulier, et moi-même ne suis pas certain que ce soit la bonne chose à faire, en parti à cause du pluriel irrégulier.
Je ne me pose pas la question en français, car une bonne pratique (à mon sens) est que le code soit en anglais.
Et justement dès lors, en dehors du pluriel, le reste de la convention fait parti des bonnes pratiques PHP sur les règles de nommage : fichier en PascalCase, pareil pour les classes, méthodes en camelCase... l'url de la méthode appelée doit être en snake_case simplement parce que les urls sont case-free.
J'insiste une fois encore pour dire que c'est de la convention automatique. Le fichier de routing par ex permet de redéfinir les appels url->méthode.

Mais je vais rester sur ton idée que c'est une question de goût, parce qu'en effet ça ne m'a jamais posé de problème, même au moment d'apprendre le framework. Seule la question du pluriel m'a effectivement fait tiquer. Mon plus récent collègue qui vient d'un entreprise Symfony a mis quelques jours à s'adapter à CakePHP mais n'a jamais remis en question ses conventions de nommage.

Je ne défends pas mon beefsteak en prétendant que ce framework est le meilleur tongue simplement que je n'arrive pas à saisir la critique faite. Peut-être en effet une simple question de goût.

./2243
D'accord avec toi sur le coup. Pour autant que cette fois semble bizarre, ce n'est pas le code qui m'effraie mais de découvrir les différences majeures de règles de pluriel. Les liens fournis dans la doc intégrée de calculate() sont intéressants à lire.
avatar
« Nous avons propagé sur Extranet une histoire fabriquée de toutes pièces selon laquelle une certaine disposition d'étoiles, vue depuis la planète d'origine des butariens, formaient le visage d'une déesse galarienne.
Sans chercher à vérifier ces informations, certains ont décrété que c'était la preuve de l'existence de la déesse. Ceux qui notaient le manque de preuves se faisaient attaquer. »

Legion, geth trolleur à portée galactique

2249

Perso avec Doctrine (par défaut dans Symfony) je ne fais pas de SQL non plus, je fais des classes qui représentent mes tables, et ces fichiers vont générer les tables dans la db. Je trouve ça plus simple aussi, ça m'évite d'aller faire du sql tout est généré et ça fonctionne parfaitement.

2250

Personnellement j'ai vraiment du mal à comprendre comment on peut vouloir ne pas toucher à la base de données et espérer que des outils de génération automatique donnent toujours un résultat parfait.
Sauf à réécrire le SQL dans un autre langage que le SQL, c'est impossible d'avoir un schéma de BDD géré au poil sans mettre les mains dans le cambouis. (Puis les requêtes SQL, bordel… !)
C'est peut-être parce que je suis moins un développeur web que certains ici, mais ça me sidère. À chaque fois que j'ai vu des outils "magiques" qui gère la BDD à ma place, le résultat derrière (SQL) était profondément horrible.

Je peux comprendre le côté "cool" de ne pas avoir à gérer deux bases de code en parallèle, mais de tout ce que j'ai vu, rien ne remplacera jamais un bon développement SQL. Et la rapidité de développement n'est pas une excuse pour une qualité de SQL médiocre :/

Clairement, je comprends beaucoup mieux l'approche de Meowcate à ce niveau, mais le seul outil que j'ai vu mapper des tables vers du code, c'était chez MS avec EntityFramework (et c'est un truc reconnu par certains pour ses qualités, qui fonctionne avec des tas de gens), mais à chaque fois que j'ai essayé de lui faire bouffer un schéma SQL juste un peu plus que basique (typiquement des relations N <-> N + attributs), j'ai très vite vu les limites du système.
Du coup, dans un sens comme dans l'autre, je ne sais pas comment tout peut bien marcher, mais il existe peut-être des outils miraculeux qui arrivent à envoyer un batch transactionnel de plusieurs instructions SQL (lectures ET écritures) coordonnées en une seule fois au serveur SQL (plutôt que 50 échanges client<->serveur incontrôlés) avec un schéma de BDD non trivial. Si c'est le cas, faites moi découvrir cet outil miraculeux, parce que j'ai vraiment du mal à y croire.
avatar
Le scénario de notre univers a été rédigée par un bataillon de singes savants. Tout s'explique enfin.
T'as un problème ? Tu veux un bonbon ?
[CrystalMPQ] C# MPQ Library/Tools - [CrystalBoy] C# GB Emulator - [Monoxide] C# OSX library - M68k Opcodes