IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Dotnet Discussion :

Cela vaut-il la peine de développer un orm ?


Sujet :

Dotnet

  1. #1
    Membre expérimenté Avatar de davcha
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    1 258
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 1 258
    Points : 1 539
    Points
    1 539
    Par défaut Cela vaut-il la peine de développer un orm ?
    Depuis quelques temps, je développe à mes heures perdues un outil de mapping o/r.
    Et régulièrement, comme ce soir, je me demande si cela vaut vraiment la peine.

    Je teste de temps en temps les possibilités de "concurrents", comme Linq-to-SQL ou EF, dernièrement. Et je ne suis jamais réellement convaincu. Il y a toujours quelque chose qui manque. D'un côté les relations many-to-many, l'héritage de multiples tables, de l'autre la génération de la base de donnée, les relations 1-1 reflexives, et j'en passe...
    De même chez NHibernate, même s'ils sont parvenus à quelque chose de vraiment sympathique, je trouve leur outil bien lourd, pas simple à utiliser et donc difficile à maintenir.

    Cependant, il y a encore de gens qui travaillent à améliorer leurs produits, je pense à EF2 ici, du coup, je doute sur l'intérêt de développer sa propre solution.

  2. #2
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 753
    Points
    39 753
    Par défaut
    Les ORM existants ne sont pas parfaits évidemment... mais ils sont quand même de très bonne qualité (à mon sens en tous cas), et comme tu l'as dit, EF va probablement s'améliorer encore.
    Maintenant, si vraiment ça ne convient pas à tes besoins, tu peux toujours faire ton propre ORM, mais soyons réalistes : crois-tu vraiment pouvoir réaliser, seul et même pas à plein temps, quelque chose de mieux que les équipes de EF ou NHibernate qui bossent dessus depuis des années ? Si tu y arrives, tu es mon idole

  3. #3
    Membre éprouvé Avatar de anthyme
    Homme Profil pro
    Inscrit en
    Mars 2004
    Messages
    1 559
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2004
    Messages : 1 559
    Points : 1 257
    Points
    1 257
    Par défaut
    moi a ta place je prendrai le problème dans l'autre sens :

    nhibernate et EF sont de très bon ORM et tu auras du mal a faire quelque chose d aussi bien... mais malgré tout cela ne correspond pas a tes besoin donc pourquoi ne pas, justement, étendre les possibilités de ces framwork la ou cela ne répond pas a tes besoins.

    par exemple ajouter un générateur de base de données pour EF ou créer un plugin visual studio pour nhibernate ? (on a sa en commun dans les manques )

  4. #4
    Membre expérimenté Avatar de davcha
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    1 258
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 1 258
    Points : 1 539
    Points
    1 539
    Par défaut
    Je me vois mal ajouter des fonctionnalités comme les relations 1-1 réflexives ou des notions d'héritage multiple à EF...

    J'avoue que j'espérais quelques encouragements en écrivant ce message

    Enfin bref, je crois qu'en fait, la source de mes doutes, quant à l'intérêt de ce projet, est un poil plus complexe que "y'a beaucoup de concurrence, installée depuis plus longtemps".

    Je me demande souvent durant ces moments de doutes si le projet va dans la bonne direction, et comme je fais ça tout seul dans mon coin... Evidemment, je sais que ce que je produis répondra à mes besoins, mais j'aimerais aussi pouvoir proposer quelque chose qui pourra être utile pour davantage de développeurs.
    Et là, il est clair qu'il me manque beaucoup de retours (j'ai aucun retours, puisque j'ai seulement commencé un blog là-dessus hier soir...)

  5. #5
    Membre éprouvé Avatar de anthyme
    Homme Profil pro
    Inscrit en
    Mars 2004
    Messages
    1 559
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2004
    Messages : 1 559
    Points : 1 257
    Points
    1 257
    Par défaut
    Citation Envoyé par davcha Voir le message
    Je me vois mal ajouter des fonctionnalités comme les relations 1-1 réflexives ou des notions d'héritage multiple à EF...
    Qu'est ce que tu veux dire par relation réflexive ?
    Sinon pour moi l'héritage multiple dans une architecture objet en C# me semble etre une abération

    Citation Envoyé par davcha Voir le message
    J'avoue que j'espérais quelques encouragements en écrivant ce message
    désolé ...

    Le truc c'est que aussi bon soit il, ton orm arrive un peu tard dans le monde .net car nhibernate est installé depuis des années et les partisans du "on évite les lib tier pour garder une cohérence" ont maintenant les outils de MS.

    Citation Envoyé par davcha Voir le message
    Et là, il est clair qu'il me manque beaucoup de retours (j'ai aucun retours, puisque j'ai seulement commencé un blog là-dessus hier soir...)
    Donne le lien ici et t aura quelques retours

  6. #6
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 753
    Points
    39 753
    Par défaut
    Citation Envoyé par anthyme Voir le message
    Sinon pour moi l'héritage multiple dans une architecture objet en C# me semble etre une abération
    +1
    Vu que .NET ne supporte pas l'héritage multiple, ça n'a pas de sens de vouloir le faire dans un ORM .NET...

  7. #7
    Membre expérimenté Avatar de davcha
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    1 258
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 1 258
    Points : 1 539
    Points
    1 539
    Par défaut
    Citation Envoyé par anthyme Voir le message
    Le truc c'est que aussi bon soit il, ton orm arrive un peu tard dans le monde .net car nhibernate est installé depuis des années et les partisans du "on évite les lib tier pour garder une cohérence" ont maintenant les outils de MS.
    Ca, j'en suis bien conscient (d'autant plus que d'une manière générale, je fais partie de ces partisants du "tout microsoft"), d'où mes doutes qui reviennent régulièrement.
    J'avais pensé à proposer l'orm à microsoft (sait-on jamais ?...) mais vu qu'ils ont déjà EF, ça paraît aussi compromis.

    Sinon, concernant l'héritage multiple et le blog...

    L'héritage multiple auquel je pense n'est pas vraiment de l'héritage multiple au sens où on l'entend habituellement, là, il s'agit plus d'une construction qui permet de manipuler les même données vues sous des angles différents.

    Par exemple, avec EF, en supposant que j'ai une classe "client" qui hérite de "personne", je n'ai pas trouvé le moyen de créer un client à partir d'une personne. Soit on crée un client, soit une personne, mais une fois que le type est déterminé, il ne bouge plus.
    C'est un peu dommage, parce qu'en définitive, si je complexifie un peu en ajoutant une classe "fournisseur" et/ou "employé" qui héritent de "personne", on voit bien qu'un fournisseur ou employé peut devenir un client un jour.

    Et le blog, pour le moment, il n'y a qu'une petite présentation très succinte, vous pouvez cliquer sur le bouton "www", vous arriverez dessus.

  8. #8
    Membre éprouvé Avatar de anthyme
    Homme Profil pro
    Inscrit en
    Mars 2004
    Messages
    1 559
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2004
    Messages : 1 559
    Points : 1 257
    Points
    1 257
    Par défaut
    Ce dont tu parle c'est plutot du changement de type d'un objet.

    Si dans certain langages (dynamique) comme le python on peut simplement changer le type d'un objet en changeant une des propriétés (__type__ en python), ce n'est pas le cas en C# donc encore une fois ça irai contre le fonctionnement de de C#.

    J'avoue avoir déjà eu ce souci en LTS ... mais je n'ai pas trouvé de solution efficace pour le contourner...

    Bon courage pour la suite

  9. #9
    Membre chevronné
    Profil pro
    Inscrit en
    Février 2005
    Messages
    1 273
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 1 273
    Points : 2 203
    Points
    2 203
    Par défaut
    Je vous rassure, encore 2/3 semaines et peut être qu'on va enfin pouvoir publier notre générateur de code Nhibernate en open source...Enfin si la boite est d'accord.

    Pour la terminologie; Nhibernate est lourd pour ceux qui font du relationnel; quand tu pars du domaine objet, c'est un pur bonheur.

    Pour EF; c'est un mappeur; mais certainement pas un ORM.

    Quant à faire ton ORM ; tu peux le faire; regarde Evaluant, tout seul un dieu du code l'a fait : EUSS Evaluant; qui est un excellent ORM !

    Franz bouma a démarré LLBL seul aussi.

    Et microsoft a acheté Subsonic...

    Alors tous les rêves sont permis.

    Pour l'héritage je comprends ce que tu veux dire, et c'est exactement ce qui fait que nhibernate est un ORM et pas EF.
    Nhibernate a cette notion ou l'objet prévaut sur la/les table(s).

    Good luck.

  10. #10
    Rédacteur
    Avatar de Paul Musso
    Profil pro
    Inscrit en
    Août 2008
    Messages
    368
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Août 2008
    Messages : 368
    Points : 443
    Points
    443
    Par défaut
    Pour EF; c'est un mappeur; mais certainement pas un ORM.
    B.AF, est-ce que tu dis ça uniquement parce que EF ne supporte pas les classes POCO ? (obligation de faire hériter les classes métiers d'interfaces).

    Certes les classes métiers sont couplées à des classes du framework, mais cela ne les couple pas pour autant à la structure de la base de données ... Le schéma de liaison (MSL) permet de garantir cette indépendance.

    Je dis pas que cette conception est un avantage lorsque les classes métiers existent déjà, bien au contraire ...

  11. #11
    Membre chevronné
    Profil pro
    Inscrit en
    Février 2005
    Messages
    1 273
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 1 273
    Points : 2 203
    Points
    2 203
    Par défaut
    Non, mais j'en parlai justement avec un architecte de ms hier :
    Le designer d'EDM cache la vraie puissance du moteur.

    Mais bref, je ne prends plus le risque de citer EDM.

  12. #12
    Rédacteur
    Avatar de Paul Musso
    Profil pro
    Inscrit en
    Août 2008
    Messages
    368
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Août 2008
    Messages : 368
    Points : 443
    Points
    443
    Par défaut
    Ok ^^

    C'est clair qu'il restreint pas mal de possibilités comme par exemple les types complexes et l'utilisation de classes personnalisées.

    La version 2 arrangera pas mal de choses à priori.

  13. #13
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 753
    Points
    39 753
    Par défaut
    Citation Envoyé par Paul Musso Voir le message
    C'est clair qu'il restreint pas mal de possibilités comme par exemple les types complexes et l'utilisation de classes personnalisées.
    Pour les classes personnalisées, ce n'est qu'à moitié vrai... comme les classes générées par le designer sont déclarées comme partial, tu peux très bien les compléter avec du code à toi qui ne sera pas écrasé par le designer. Par contre tu ne peux évidemment pas les faire hériter de la classe que tu veux, mais tu peux toujours implémenter des interfaces.

  14. #14
    Membre chevronné
    Profil pro
    Inscrit en
    Février 2005
    Messages
    1 273
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 1 273
    Points : 2 203
    Points
    2 203
    Par défaut
    Oui clairement, le dsign POCO n'a pour moi d'utilité que dans la possibilité de pouvoir substituer le moteur sans toucher au design du domain.

    En plus, a priori MS a créé un adapter poco pour EF donc a tenu compte de cela.

    Voilà.

    Maintenant, le designer tient compte du fait que souvent l'ORM est utilisé depuis la base vers l'objet et non l'inverse.

    Et il encapsule pas mal de complexité de l'outil; mais il cache beaucoup trop de choses à mon goût. Je crois que maitrisé EF passe aussi par la maitrise des mappings et leur compréhension, comme tout ORM, et qu'une fois qu'un pattern est trouvé et correspond au cas d'utilisation, un designer ou un outil de génération fait du sens.

  15. #15
    Membre expérimenté Avatar de davcha
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    1 258
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 1 258
    Points : 1 539
    Points
    1 539
    Par défaut
    Citation Envoyé par B.AF Voir le message
    Oui clairement, le dsign POCO n'a pour moi d'utilité que dans la possibilité de pouvoir substituer le moteur sans toucher au design du domain.
    Les POCO sont aussi intéressantes quand tu dois faire du n-tier. Se trimbaler des classes qui implémentes des membres relatifs à l'accès aux données dans la couche de présentation, par exemple, c'est pas super.

    Sinon, c'est surtout qu'un design non-poco ne permet pas toujours de faire tout ce qu'on veut avec le domaine.
    Genre des classes qui héritent d'autres classes, des collections choisies pour les relations, des structures (je ne parle pas de structs) qui permettent de simuler des "changements de type", etc.

  16. #16
    Membre chevronné
    Profil pro
    Inscrit en
    Février 2005
    Messages
    1 273
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 1 273
    Points : 2 203
    Points
    2 203
    Par défaut
    Oui mais (allez, j'ouvre un hors sujet) c'est que finalement, passer sur le tuyau des entités de la DB, c'est bien pour une application "simple"

    Si la logique business est complexe, c'est impossible, tu es obligé de dissocier.

    Maintenant , on peut mixer les deux aussi, il n'y a pas de vérité absolue en architecture.

    Mais effectivement le Design Poco simple est bien adapté au N-Tiers sur la forme.
    Dans le fonds, tu finis toujours pas avoir des questions d'états de session, de time out, de change tracking...

    PS: Tu cherches pas du taf ???????????

  17. #17
    Membre expérimenté Avatar de davcha
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    1 258
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 1 258
    Points : 1 539
    Points
    1 539
    Par défaut
    Ca fait un bail, j'avais même pas vu ta dernière intervention, B.AF.

    Pour ce qui est du change tracking et compagnie, à l'époque où j'avais écrit ce post, j'avais réalisé un système dans cet "orm" qui permettait de faire ce genre de chose de manière totalement transparente.

    En fait, pour faire simple, disons que suivant la configuration du mapping, les modifications de valeurs au niveau d'un client pouvaient être automatiquement répercutées sur le serveur et broadcastées à tous les autres clients connectés au serveur.
    Enfin bref...

    Pourquoi cette question concernant la recherche de taf ? Tu avais un truc à proposer à l'époque ? :p

  18. #18
    Membre habitué
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    156
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 156
    Points : 173
    Points
    173
    Par défaut
    Comme je te l'ai dis par MP moi aussi je me suis lancé dans l'aventure de création d'un ORM.

    Ce genre de projet est très instructif et permet de toucher a des parties du framework que l'on utilise pas dans les projets habituels...(Reflexion, génération de MSIL...).


    Je viens de poster un petit descriptif de mon ORM dans la section projet.
    http://www.developpez.net/forums/d79...m/#post4552794

Discussions similaires

  1. Que pensez-vous de underscore.js ? Cela vaut la peine de s'y mettre ?
    Par beegees dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 15/02/2015, 11h39
  2. Différence entre Powerpack et Free : vaut-elle la peine ?
    Par iDaaX dans le forum Mandriva / Mageia
    Réponses: 3
    Dernier message: 11/11/2007, 15h53
  3. [AJAX] [Question] vaut-il la peine
    Par Graphix dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 09/03/2007, 15h53
  4. Réponses: 15
    Dernier message: 11/05/2006, 10h23
  5. Vector, est ce que cela vaut la peine
    Par elekis dans le forum SL & STL
    Réponses: 6
    Dernier message: 11/12/2005, 20h22

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo