[Scala] play! - Version imprimable +- JeuWeb - Crée ton jeu par navigateur (https://jeuweb.org) +-- Forum : Discussions, Aide, Ressources... (https://jeuweb.org/forumdisplay.php?fid=38) +--- Forum : Programmation, infrastructure (https://jeuweb.org/forumdisplay.php?fid=51) +--- Sujet : [Scala] play! (/showthread.php?tid=6129) |
[Scala] play! - srm - 14-05-2012 Bonjour, Je vous ai déjà plein de fois du langage Scala et un peu aussi du framework play!. Et on m'a souvent dit "tu as codé quoi en Scala ? Montre nous voir". Je vais essayer de vous montrer ici des choses que j'aime bien dans le langage Scala et le framework play! Un exemple tout simple, je n'aime pas dans quasiment tous les framework leur couche ORM qui empêche de faire des requêtes super compliqués (car elles ne map dans aucun objet), du moins on peut le faire, mais on perd toute la notion d'objet. J'aime pas aussi le fait que dans un ORM on soit trop rigide dans le sens ou le model objet colle beaucoup trop au model de la base de données, alors que ce sont deux mondes différents. Je vais vous donner un exemple simple. J'ai une table Game (T_GAME_GAM) qui contient les informations d'une partie (du jeu Heroes of Newerth), par exemple l'heure du match, le nombre de participants, etc. Cette table et relié à la table Player (T_PLAYER_PLA) par l'intermédiaire de la table de jointure (TJ_PLA_GAM_PGA). Cette table de jointure contient des informations du joueur pour cette partie, par exemple le level qu'il a atteint, le nombre de joueur qu'il a tué, etc. Dans la plus part des frameworks (si vous utilisez un framework, n'hésitez pas à donner ici le code correspondant à cet exemple pour que l'on en discute) vous aurez une modélisation de Game et d'un objet par exemple Participate, qui contiendra les informations de la participation d'un joueur dans la partie. Mais en objet pure on aurait sans doute pas architecturé les choses ainsi, mais plutôt de la sorte : un joueur à joué à une Game, qui contient toutes les informations nécessaires. Quoi qu'il en soit, que vous soyez d'accord ou pas avec cette idée, avec play! on peut faire les deux, Game et Participate, ou tout le mettre dans Game de façon très simple, car dans play! on peut construire n'importe quelle requête et la mapper exactement comme on veut dans les objets. Voici ce que donne mon exemple précédemment :
RE: [Scala] play! - niahoo - 14-05-2012 tes noms de tables sont sensationnellement atroces. Code : inner join tj_pla_gam_pga pga on (gam.gam_id = pga.gam_id) Je sais pas pourquoi ça me fait penser à un canard. Mais tu pointes du doigt un défaut de pas mal d'ORM : ne pas penser aux champs dans les tables de jointure, obligeant à créer des objets qui gèrent ça. D'ailleurs si ces champs on un nom précis, j'aimerais le savoir ça m'aiderait dans mes recherches de doc. KOIN ! RE: [Scala] play! - srm - 14-05-2012 Je nomme mes tables, mes champs, mes index, mes clés étrangères (et tout le reste) selon une norme assez précise. En gros, pour expliquer le nommage ici : - On préfixe les tables par T_ - On préfixe les tables de jointures par TJ_ - On suffixe les tables par un trigramme unique sur toute la base de données - On préfixe tous les noms de colonnes par ce trigramme - On nomme les tables de jointures avec les trigrammes des tables utilisés et on suffixe avec le trigramme de la jointure Avec cette nomenclature, on s'assure que chaque élément est unique, c'est impossible par exemple d'avoir deux colonnes avec le même nom. On sait directement en un clin d'oeil si une colonne fait partie d'une table ou si c'est une colonne étrangère. On sait en un clin d'oeil le rôle d'une table, T_, TJ_, TR_ (table relationnel) Il y a pas mal d'autres raisons aussi, mais je me souviens plus de toutes. C'est pas très joli visuellement, mais c'est carrément bien pratique et évite pas mal d'âneries dans la vie de tous les jours Plus d'explications ici : http://sqlpro.developpez.com/cours/standards/ Edit : Grmbl, d'ailleurs je vois que je me suis planté sur les noms de table de jointure, je sais plus ou j'avais lu autre chose, je vais devoir corriger ça :o RE: [Scala] play! - niahoo - 14-05-2012 c'est quoi une TR en gros ? erf je devrais le savoir de par ma formation mais je ne vois pas. (oui y a google sinon mais bon) sinon le système est sympa mais c'est moche. fais donc un petit ORM qui gère ça Et sinon pour scala ben ... on voit surtout du SQL (d'ailleurs il manque une quote ça nique la coloration). D'où vien la variable 'get' ( get[Pk[long]] et l'opérateur ~ TR => table de référence en gros c'est les tables dont le contenu ne bouge pas ? RE: [Scala] play! - srm - 14-05-2012 Oui pour TR :-) Il manque pas une quote, c'est la syntaxe pour dire que c'est un symbole. scala> 'Bouh res1: Symbol = 'Bouh get ça fait partie de l'orm Anorm, dans mon exemple j'ai pas mis les include que voici :
En effet ici il n'y a pas de Scala quasiment, je parle surtout de play! dans mon message Et concernant le ~ c'est un type de variable spécial de Anorm, en gros si je dis Int~String j'ai un type "Int String" RE: [Scala] play! - Marc15 - 06-07-2012 Mon prochain jeu Web utilisera Play! 2.0 avec Scala. Je l'ai essayé un peu. C'est formidable. C'est dur de revenir au PHP après... RE: [Scala] play! - srm - 06-07-2012 Comme ça d'un coup d'un seul tu sors ça ? ^^ RE: [Scala] play! - srm - 07-07-2012 Je comprends mieux RE: [Scala] play! - Marc15 - 09-07-2012 Désolé, je ne comprends pas... :/ RE: [Scala] play! - Sephi-Chan - 09-07-2012 Je suppose qu'il ironisait sur ton absence de réponse. |