Forum CMS Made Simple FR
Nouveau module : de l'ORM dans CmsMadeSimple - Version imprimable

+- Forum CMS Made Simple FR (https://forum.cmsmadesimple.fr)
+-- Forum : Ressources (https://forum.cmsmadesimple.fr/forum-4.html)
+--- Forum : Développement et Astuces (https://forum.cmsmadesimple.fr/forum-15.html)
+--- Sujet : Nouveau module : de l'ORM dans CmsMadeSimple (/thread-1815.html)



Nouveau module : de l'ORM dans CmsMadeSimple - bess - 28/11/2013

UPDATE : 11 décembre : lien

Bon allez je me lance.

Vous trouverez le sujet en anglais (aprox.) sur linkedin, je duplique ici puisque toutes les ressources sont bonnes à prendre. Je précise que je suis évidement l'auteur du projet/message.


[h]Seriez vous intéressé par un framework ORM dans vos modules ?[/h]

Durant les deux dernières années j'ai travaillé sur une solution type ORM dans mes propres modules qui serait capable d’éliminer toutes les requêtes SQL de mon code.

Qu'est-ce qu'un framework ORM ? Wikipedia dit : Object-relational mapping (ORM, O/RM, et O/R mapping) dans le langage de programmation est une technique de programmation pour convertir des données entre différents type de système incompatible dans une approche orientée objet propre aux langages programmation. Cela créé dans les faits une "base de donnée objet virtuelle" qui peut être utilisée depuis l'intérieur du programme

http://en.wikipedia.org/wiki/Object-relational_mapping

Vous connaissez peut être Hibernate pour Java, Doctrine pour PHP (au sein de Symphony). Adodb n'étant pas un réel ORM.

J'ai fait une présentation de mes premiers travaux sur ce projet durant le dernier geekmoot (2012) et depuis ce jour j'ai totalement ré-écrit le framework pour le rendre plus sexy que jamais.

Mais maintenant je suis bloqué dans une situation ou mon module est quasi-prêt à l'usage en production mais je n'ai aucun projet l'utilisant. Aucun projet donc aucun travail supplémentaire sur mon framework. Aucun travail => je n'ose pas le proposer sur la forge.

Devrais-je passer plus de temps sur sur super projet ? je le ferrais si des personnes étaient intéressées à l'inclure dans leur modules.

Donc ... il y a t il des personnes intéressées par ce genre de nouvelles fonctionnalités dans vos propres modules ?


* Il ne casse absolument pas votre code existant
* Il est très léger et vraiment intuitif

Code :
[== Indéfini ==]
//Instancier l'objet
$css = new Css();

//Renseigner ses valeurs
$css->set('css_name','Module: Quotes Made Simple');
$css->set('css_text',file_get_contents('stylesheet.css'));
$css->set('media_type','');
$css->set('create_date',date());
$css->set('modified_date',date());

//Sauvegarder l'objet en base
$css->save();


* Mais attendez il y a encore mieux ! :
Code :
// trouver tous les objets CSS dans notre table
array $cssList = $css->findAll();

Code :
//Instancier l'objet
$css = new Css();
//Renseigner certaines de ses valeurs
$css->set('css_name','Module: Quotes Made Simple');
// supprimer son équivalent en base
$css->delete();

Code :
[== Indéfini ==]
//Rechercher par critère
//Instancier l'objet
$css = new Css();
//Renseigner certaines de ses valeurs
$css->set('css_name','Module: Quotes Made Simple');
// rechercher ses semblables
$css->findByExample($css);

* Même pour les installations / désinstallation de vos modules :

Code :
[== Indéfini ==]
//Créer toutes les tables du module d'un coup
$entities = MyAutoload::getAllInstances($this->GetName());
foreach($entities as $anEntity) {
  Core::createTable($anEntity);
}

* Il peut automatiquement gérer les clés primaires, les clés étrangères, les clés d'association (relation dite many to many)
* Il peut vérifier les tailles, le formatage des données, la présence des données dites obligatoire, interdire la suppression d'une données si un objet l'utilise encore ailleurs en base ou au contraire interdire l'ajout d'un objet si certaines de ses dépendances n'existe pas encore.
* Il utilise Adodb pour la communication avec la base de donnée et est codé sous la forme d'un parfait module cmsms. Zéro modification de fichier ou autres merdes sont nécessaires pour le faire fonctionner.
* ...

Toutes les descriptions des entités sont présentées dans un simple fichier PHP comme celui ci : https://github.com/besstiolle/orm-ms/tree/master/src/OrmSkeleton/lib

Comme vous pouvez l'imaginer c'est énormément de travail que j'ai investi dans ce projet et ce serait une honte pour moi de l'abandonner en l'état. Donc Il y a t il des volontaires intéressés pour l'utiliser en environnement réel au sein de vos propres modules.

Merci pour avoir lu cet énorme post et pour l'intérêt que vous pourrez porter à ce projet Wink

le Github du projet : https://github.com/besstiolle/orm-ms


Nouveau module : de l'ORM dans CmsMadeSimple - heriquet - 28/11/2013

+1... I like... retweet... J'achète...


Nouveau module : de l'ORM dans CmsMadeSimple - bess - 28/11/2013

Quelques ajouts sur le sujet :
* Tout le code est testé par de solide tests unitaire avec leur propre documentation et donne un résultat visuel : vert ou rouge parce que je souhaite que chacun puisse relancer les tests chez soi Wink
* A l'intérieur du projet sur Github vous trouverez un projet comme Skeleton qui possède de nombreux exemple facile à comprendre et facile à copier/coller pour vos propres besoins : https://github.com/besstiolle/orm-ms/tree/master/src/OrmSkeleton
* Toujours à l'intérieur du projet sur Github vous trouverez une apidoc très bien documentée comme vous pouvez le trouver déjà pour cmsmadesimple ici : http://apidoc.cmsmadesimple.org/


Nouveau module : de l'ORM dans CmsMadeSimple - Philipppe - 01/12/2013

Bonjour bess,
Voui, me revoilà !
Au risque de me fourvoyer complètement dans ce que je crois comprendre, il me semble que ce module pourrait me permettre de passer au travers d'une de mes difficultés avec Cmsms : la connaissance trop parcellaire des différents langages mis en oeuvre (php + smarty, sql + inodb, jquery ...), et hélas mes pb de santé et mes yeux fadas me permettent de moins en moins de passer du temps à chercher où est l'erreur de syntaxe ou autre qui mets mon code en défaut !

Bref ton module me permettrait-il de faire :

- Interrogation d'une table spécifique de la base de données :
Trouver un enregistrement sur un ou plusieurs critères.
- Affichage écran du résultat pour :
voir, mettre à jour, et imprimer dans un fichier .pdf (ben oui, tant qu'à faire !)
- Mise à jour de la table :
après modification.
- Envoi d'un mel à l'administrateur :
Un message mel envoyé à un utilisateur pour information.

Bon, ben voilà ... !


Nouveau module : de l'ORM dans CmsMadeSimple - heriquet - 01/12/2013

Bonjour Philippe !

Ce module est un relais entre la DB et les modules.

Il sert uniquement (et c'est déjà énorme) à fournir les données aux modules qui l'invoquent.

Cela permet de limiter très fort le code à écrire pour cette partie d'un module mais pour le reste, c'est au développeur à écrire son propre module.

C'est donc une brique à utiliser pour les autres modules et non un module à part entière. Bess parle d'ailleurs plus de framework que de module.

Bon dimanche !


Nouveau module : de l'ORM dans CmsMadeSimple - Philipppe - 01/12/2013

Bonjour @heriquet
heriquet a écrit :... Ce module est un relais entre la DB et les modules.

Il sert uniquement (et c'est déjà énorme) à fournir les données aux modules qui l'invoquent.

Cela permet de limiter très fort le code à écrire pour cette partie d'un module ...
C'est donc bien ce que j'avais compris ... : la brique que moi, je n'arrive pas à écrire justement !
Et loin de moi l'idée de ne plus rien avoir à faire moi-même !

Donc, merci à toi de me confirmer dans ma "lecture" !
Et merci à @bess de mettre cette merveilleuse "brique" à notre disposition !

Maintenant ... "reste" à mettre en oeuvre !
Et là, un tit coup de main please @bess ? Quand tu peux !
Et bon dimanche à vous !


Nouveau module : de l'ORM dans CmsMadeSimple - Philipppe - 01/12/2013

Bonsoir @bess
bess a écrit :Quelques ajouts sur le sujet :
... * A l'intérieur du projet sur Github vous trouverez un projet comme Skeleton qui possède de nombreux exemple facile à comprendre et facile à copier/coller pour vos propres besoins : https://github.com/besstiolle/orm-ms/tree/master/src/OrmSkeleton...
J'ai été voir sur le lien, me suis logué sur Github ..., et je crains chaque fois de risquer de détruire ...
Tu veux bien guider mes premiers pas .... ? à partir de mardi quand tu peux !
Merci.


Nouveau module : de l'ORM dans CmsMadeSimple - jce76350 - 01/12/2013

@ Philipppe tu n'es pas obligé de te loguer pour "piquer les fichiers"
Tu vas a la racine https://github.com/besstiolle/orm-ms
et tu cliques sur "Download Zip" à droite en bas


Nouveau module : de l'ORM dans CmsMadeSimple - bess - 01/12/2013

salut Phillipe, salut tout le monde

Alors dans l'ordre, je confirme les dires de Heriquet. Mon framework doit être considéré comme un moyen de réduire les appels au code SQL tels qu'on le fait (trop) souvent dans nos modules.

Tu devras toujours écrire un descriptif de ton modèle dans un fichier php (tu as des simples exemples de description ici) afin que mon module sache quoi faire et comment discuter avec la base de donnée. Ce n'est donc ni un "phpmyadmin-like" ni un moyen détourner d'aller piocher des données dans des tables qui n'appartiennent pas à ton module. Bien évidement, vu qu'il sait comment discuter avec ta base de donnée, il est capable de créer les tables de ton module et les détruire sitôt si tes fichiers de descriptions sont corrects (premier gain de temps)

Comme l'as dit Heriquet c'est donc une interface, mon framework réduisant à peau de chagrin ce genre de code que je trouve affreux :

Code :
[== Indéfini ==]
$db_prefix = cms_db_prefix();
$dict = NewDataDictionary($db);
$flds= "
    id I,
    textid C(32),
        description C(255)
    ";

$taboptarray = array('mysql' => 'TYPE=MyISAM');
$sqlarray = $dict->CreateTableSQL(cms_db_prefix().'module_quotegroups', $flds, $taboptarray);
$dict->ExecuteSQLArray($sqlarray);
$db->CreateSequence( cms_db_prefix()."module_quotegroups_seq" );

ou encore les innombrables appel aux $sql = "INSERT INTO ...... (xx,yy,zz) values (?,?,?)". Avec ce framework on pense "Objet", un objet se créé, se manipule et se recherche même que ce soit via son ID soit via une recherche par critère : "les villes de plus de X habitants dont le nom contient les lettres "xx" mais pas "yy" devient aussi simple que
quelques lignes de code qui sont très compréhensibles

Le framework est déjà opérationnel depuis Janvier 2013 pour de nombreuses opérations CRUD basique : select, select by ID, delete, insert, update. Il est également capable de travailler avec des relations fortes entre les entités : un client possède une ou des adresses. Tu ne peux supprimer un client si tu n'a pas supprimé toutes les adresses avant par exemple. Il gère également les cardinalités "many to many" dans les modèles ce qui te permet de récupérer par exemple "tous les livres dont l'un des auteurs est xx"

Mon travail la semaine prochaine (pas là ce we) sera d'implémenter d'autres fonctionnalités : recherche par criteria, mise en cache des recherches pour augmenter la vélocité de réponse, ...

Concernant GitHub : jamais tu ne seras capable de casser mon code car c'est impossible. Tu as forké mon code, c'est donc maintenant le tien. Si tu modifie, tu casse le tiens dans la pire des situations Big Grin Pas de panique, Git te permet de revenir en arrière. Mieux encore, si tu trouve un bug, une amélioration dans le code ou dans la documentation, tu peux me proposer facilement la correction, on appel cela faire une "Push Request" que je validerais ou pas. Si je valide, ton "patch" intègre aussitôt mon code de manière officiel, c'est la magie de Git : tout est publique, rien n'est cassable.

Un coup de main ? avec plaisir, tu sais maintenant comment faire : fork, modifie, commit, push, push Request Smile

J'espère stabiliser une première version dédiée au CRUD dès lundi ou mardi soir avec de la documentation associée sous la forme d'un classique module cmsms. A partir de là chacun pourra me remonter ses questions, ses idées et surtout ses impressions sur la facilité de prise en main du framework. J'attends beaucoup de chose de ce côté car c'est réellement facile à utiliser, un peu moins à comprendre le fonctionnement d'un ORM pour ceux qui n'ont jamais joué avec Hibernate, doctrine et autre Smile


Nouveau module : de l'ORM dans CmsMadeSimple - Philipppe - 01/12/2013

Bonsoir @jce,
jce76350 a écrit :@ Philipppe tu n'es pas obligé de te loguer pour "piquer les fichiers"
Tu vas a la racine https://github.com/besstiolle/orm-ms
et tu cliques sur "Download Zip" à droite en bas
Merci : il est vraiment .... Philippe ! Bien sûr, en se positionnant sur la racine du module, les fonctions sont accessibles !


Nouveau module : de l'ORM dans CmsMadeSimple - Philipppe - 01/12/2013

Merci @bess d'avoir pris le temps de cette introduction à Github et à ton module.
Je vois à te lire que j'arrive juste au bon moment pour tester au fur et à mesure que tu vas développer la suite !
Et je touche du bois pour ne pas devoir jeter l'éponge en cours de route : je suis de nouveau opérationnel.
A suivre donc.


Nouveau module : de l'ORM dans CmsMadeSimple - jissey - 02/12/2013

Hello every body (pardon : tout le monde...),
je suis la conversation (je connais déjà un peu le framework), et j'en profite pour passer un bonjour amical à Philippe!
Content de te savoir en meilleure forme Big Grin


Nouveau module : de l'ORM dans CmsMadeSimple - Jean le Chauve - 02/12/2013

Moi je t'ai apporté des bonbons Philippe, parce que les fleurs c'est périssable.
Heureux de te lire à nouveau Smile
Et en passant du côté de chez Bess, félicitations pour ta progression incroyable dans le domaine du développement.


Nouveau module : de l'ORM dans CmsMadeSimple - bess - 02/12/2013

merci Jean le Chauve Wink

A noter pour jissey : si l'esprit de ce nouvaeu framework reste identique à mmmfs, le framework d'origine, les signatures diffèrent beaucoup dans le bon sens normalement. Moins de paramètres nécessaires, moins de déclaration mais également moins de fonctionnalités qui n'étaient pas le fait d'un ORM : les générateurs de fields HTML disparaissent par exemple.


Nouveau module : de l'ORM dans CmsMadeSimple - Philipppe - 02/12/2013

Bonsoir @jissey et @Jean, merci de votre préoccupation :p
Heu ... Ta Seigneurie, une trappiste plutôt ... !


Nouveau module : de l'ORM dans CmsMadeSimple - bess - 03/12/2013

Première release ce soir, même si je ne suis pas assez satisfait de l'avancement global du projet pour le considérer comme stable.

Néanmoins vous avez dès maintenant la possibilité de forker mon repo github pour obtenir ceci :
* src\Orm : le framework
* src\OrmUT : une compilation de test unitaire afin de m'assurer de la non-regression de mon code
* src\OrmSkeleton : jetez vous dessus, c'est le meilleur moyen de mettre dans le bain ! Le code est minimaliste mais totalement testé et testable
* doc : l'api doc complètement à jour, très documentée vous aurez tout, même des trucs qui ne marcherons pas dans la version actuelle.

Je suis preneur des bugs trouvés, des avis sur le fonctionnement, sur les signatures de méthodes, sur la nomenclature utilisée dans le nommage des fonctions, .... Vous l'aurez compris c'est pas finit ! Smile

Pour ceux qui souhaitent travailler uniquement à partir des releases : http://dev.cmsmadesimple.org/projects/orm


Nouveau module : de l'ORM dans CmsMadeSimple - Philipppe - 03/12/2013

Bonjour @bess
bess a écrit :Première release ce soir...
* src\OrmSkeleton : jetez vous dessus, c'est le meilleur moyen de mettre dans le bain ! Le code est minimaliste mais totalement testé et testable
...
Pour ceux qui souhaitent travailler uniquement à partir des releases : http://dev.cmsmadesimple.org/projects/orm
Ha merci Big Grin ! le voilà le skeleton annoncé plus haut, que je ne trouvais pas ces deux derniers jours ! Et je recommençais à me dire : encore un truc pas pour moi !
Je vais donc commencer à tester !
=> Ajout : :p @bess pour le français déjà intégré sur les releases installables ... : Y a plus qu'à..., ce soir !


Nouveau module : de l'ORM dans CmsMadeSimple - bess - 03/12/2013

oui. le projet POC initialement présent est supprimé au profit des tests unitaires d'un côté et d'un module type Skeleton de l'autre.

J'ai changé toutes les urls du post pour éviter les 404


Nouveau module : de l'ORM dans CmsMadeSimple - bess - 11/12/2013

Allez, je n'ai pas eu le temps de le faire en français hier, donc vous aurez la news avec un peu de retard : Notre framework ORM est déjà disponible en version 0.1.1, version stable et exploitable en production !

Je tiens d'ailleurs à remercier une nouvelle fois notre collègue Heriquet qui s'est énormément investis dans mon petit délire et qui a su apporter son aide, ses idées et m'aura permis de remettre beaucoup de choix en question pour le bien de tous. Merci à toi mon ami Belge ! Wink

Allez, au menu de cette version majeure :

ADD : Type de champs : UUID
ADD : Type de champs : DATETIME
ADD : Index unique sur une colonne
ADD : Valeur par défaut sur une colonne
ADD : Nouveau système auto-increment qui évite les tables _seq en base
ADD : Nouvel exemple d'entité dans OrmSkeleton : BookSkeleton
ADD : Recherche récursive dans les répertoires /lib pour chercher vos Entités
ADD : Amélioration de la fonctionnalité des clés associatives
ADD : Une console permet de suivre en live les logs de fonctionnement pour aider au débug
CHANGE : Amélioration des formulaires de OrmSkeleton
FIX : corrections de l'apidoc

Vous pouvez trouver dès maintenant de nombreuses ressources pour vous aider à intégrer ce Framework

Mais également et surtout vous avez la possibilité de voir les prochaines fonctionnalités que nous allons implémenter Heriquet et moi même dans ce framework dans les prochaines Milestones et suivre leur évolutions au fur et à mesure des jours à venir.

Je ne peux que vous inviter à tester l'installation du framework et de OrmSkeleton pour constater à quel point il est plus agréable de développer des modules sous CmsMadeSimple puisque notre but avoué et de supprimer complètement le SQL de votre code !

Et n'hésitez pas à participer, nous avons besoin de développeurs, de testeur, de traducteur (anglais) et d'idées à implémenter pour les prochaines versions.

Prochaine version majeure prévue dans une semaine environ


Nouveau module : de l'ORM dans CmsMadeSimple - Jean le Chauve - 11/12/2013

Il y a un développeur anglophone sur .org qui utilise un orm également : http://forum.cmsmadesimple.org/viewtopic.php?f=6&t=68391&sid=6aa64ab70da626f7325e13f4c40a4d04


Nouveau module : de l'ORM dans CmsMadeSimple - bess - 11/12/2013

oui effectivement, nous ne sommes pas pionnier dans ce domaine

exemple : une classe DAO de ce monsieur qui a réagit sur Linkedin

Mais là ou certains fonctionnent avec du DAO, nous avons de notre côté un réel outil d'ORM que je n'ai encore jamais vu sur cmsms. Notre partie de description d'entité dans des fichiers php est pour moi la clé de voute de la viabilité du framework, et on a une certaine avance dans ce domaine du coup Smile


Nouveau module : de l'ORM dans CmsMadeSimple - heriquet - 12/12/2013

C'est bien un "premier" release. Y aura de la suite rapidement et du support. Chapeau à bess qui se tape toute une doc comme on n'en a jamais vu dans les (nombreux) modules que j'ai pu tester.

Perso je développe mes parties d'Orm sur un (gros) site qui est en dev chez moi. Donc dans des conditions réelles et franchement ca marche pas mal. Beaucoup moins de code nécessaire et donc moins de risque d'erreur et plus de temps pour s'occuper de la demande du client.

Je me réjouis d'avoir des retours d'autres devs.