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

C# Discussion :

OR Mapping en c#


Sujet :

C#

  1. #21
    Membre éprouvé
    Avatar de _skip
    Homme Profil pro
    Développeur d'applications
    Inscrit en
    Novembre 2005
    Messages
    2 898
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur d'applications
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Novembre 2005
    Messages : 2 898
    Par défaut
    C'est pas un discours commercial que je recrache mais une bonne expérience que j'ai faite.

    On a développé durant 1 an un projet multi-site utilisant le remoting .net avec llblgen et devexpress le tout sur postgresql. Franchement ça c'est super bien passé. Surtout que les modifications dans la base de données étaient hyper fréquentes.
    On se mettait d'accord sur les nouvelles tables et 20 minutes après on était en train d'insérer des données dedans.

    Notre couche client demandait les entités au serveur en passant les filtres en paramètre, c'était très performant et très convenable à coder.
    Si on avait du se mettre à introduire des strings SQL ou HQL ou autre partout je pense qu'on s'en serait difficilement sorti. Alors que là, pouvoir compiler le code était déjà une quasi-certitude certitude de la non-régression des couches inférieures.

    Quand je vois d'autres produits ou tout passe par de la reflexion et des fichiers XML, ou l'on doit écrire des pseudo-requêtes en chaînes de caractères qui doivent être parsées, mappées, puis transformées en SQL je me dis que finalement ce choix se défend quand même.
    C'est vrai qu'il existe des alternatives open source, mais faut aussi considérer qu'on n'a pas forcément plus de garantie.
    Pour ton projet tu as peut être pas le temps d'attendre sur le bon vouloir d'une communauté si tu rencontres un problème ou un bug. Quant au fait que tu puisses disposer du code... Ben est-ce que ton but c'est de passer tu temps sur ton projet ou de le passer à adapter et débugger un ORM ?

    Nous avons acheté devexpress dans sa formule avec le code source, la vérité est qu'on n'a pas ouvert une seule fois ce code parce que nous ne sommes pas des développeurs de composants.

    C'est quand même sympa de pouvoir s'appuyer sur un produit éprouvé qui fournit plein de fonctionnalités testées "out of the box" et pour lequel tu as un support très actif de la part du développeur (même si c'est vrai qu'il se montre légèrement borné par moment).
    Notre but était de ne pas se casser la tête sur notre couche d'accès au données et de pouvoir s'affranchir de toute la complexité et la difficulté de maintenance qu'elle engendre, et on a largement eu ce qu'on a demandé.

    J'oserai presque dire qu'entre vs2008, devexpress, llblgen et resharper on était aussi productif qu'avec un l4g.

    @maa : ça te génère les entités et les composants pour tout ton requêtage. Par contre ça ne crée pas de façades si c'est ce à quoi tu penses.

  2. #22
    Membre extrêmement actif
    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
    Par défaut
    DevExpress et ReSharper je suis d'accord avec toi.
    Encore que DevExpress en mode unbound, on a regardé le source pour les séquences de paint.

    LLBL est très bon, mais je crois aussi que tu ne vois que ça, tu as dit des trucs énormes :

    2) Tu formes des requêtes à partir de code c# avec autocomplétion et vérification à la compilation. Des requêtes de n'importe quelle compexité (aggrégat, sous-requêtes dans where, requête corréléé etc...). Pas de pseudo-SQL façon hibernate.
    Donc 100% de ton code est checké en compile time.
    Faudrait peut être que tu te penches sur ICriteria, c'est exactement ce que ça fait :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    IList cats = sess.CreateCriteria(typeof(Cat))
        .Add( Expression.Like("Name", "Fritz%") )
        .Add( Expression.Between("Weight", minWeight, maxWeight) )
        .List();
    En plus pour les deux, tout est contrôlé en compil c'est faux, puisque le nom des fields pour les 2 produits reste en string.
    Donc si je lis ce que tu as dis, c'est juste qu'il y a un outil dont vous savez vous servir et pas l'autre.
    Mais tu peux demander à n'importe lequel de mes développeurs quel mode de requête il préfére, ils ont tous utilisé les deux longtemps.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Quand je vois d'autres produits ou tout passe par de la reflexion et des fichiers XML, ou l'on doit écrire des pseudo-requêtes en chaînes de caractères qui doivent être parsées, mappées, puis transformées en SQL je me dis que finalement ce choix se défend quand même.
    C'est pareil, c'est une vision du produit qui se borne à un tutorial grand débutant fait par un stagiaire. Si tu avais bossé sur un mapping très complexe, il y a longtemps que tu aurais modéré ou oublié de faire ce genre de remarque.
    Le modèle de mapping de LLBL est propriétaire et imbuvable.
    Entity Framework utilise des mappings
    Nhibernate utilise des mappings ET une interface fluent (attributs de propriétés)


    Donc tes avis sur le sujet sont très immatures, prouvent que tu n'as pas du tout évalué les solutions et que ton avis sur LLBL est un parti pris.

    D'ailleurs je pense que même Frans, le concepteur de LLBL te dirait que tu as dit énormmément de connerie sur Nhibernate vu qu'il s'intéresse lui-même à NHibernate.

    Surtout que les modifications dans la base de données étaient hyper fréquentes.
    On se mettait d'accord sur les nouvelles tables et 20 minutes après on était en train d'insérer des données dedans.
    C'est pas un ORM dont tu as besoin, c'est d'un mapper.

    Moi j'ai besoin d'un ORM au sens pro, pas au sens, "je veux pas faire de SQL".

    Tu parles de performance, tu ne sais même pas qu'il est possible nativement de brancher 6 moteurs de cache distribué dans Nhibernate et de spécifier dans le mapping la façon dont nh doit les gérer.

    Tu parles de support actif, as-tu déjà posé une question sur le user-group nh ? Sans rien payer, tu as une réponse des dévelopeurs du produit dans la 1/2 heure.

    Quand tu parles de réflection, tu ne comprends pas plus ton sujet, vu que LLBL s'en sert aussi.(je suppose qu'il n'est plus utile de parler de reflector ou de chose comme ça....).

    Et que la réflection dont tu parles dans Nh, c'est de l'émission de IL. (Tu sais emit...). Qu'il y a 3 modes pour garantir les compatibilités avec les frameworks.

    Enfin bref, tu parles et tu dénigres le travail d'excellents développeurs, et pire, parce que
    1 - tu n'as pas sur t'en servir
    2 - tu ne t'en ais même peut être pas servi
    3 - tu n'as pas compris qu'un ORM est utile pour gérer un domain objet et contrôler les graph versus la base, et pas de créer les tables puis de générer du code.
    4 - tu cherches un outil qui te permet d'oublier de penser, c'est bien, mais autant que je me rappelle, LLBL et NHibernate sont très mauvais pour comprendre à la place d'un développeur les dépendances fonctionnelles dans le graph objet. Ce qui fait cette liaison s'appelle un mapping (quelle que soit sa matérialisation d'ailleurs.). Vouloir utiliser un ORM dont tu ne maitrise pas le comportement au chargement du graph objet, c'est une grave erreur de jugement et de compréhension.

    Et comme tu l'as remarqué, oui c'est deux produits que je trouve bon, très bon même, dont je connais la plupart des auteurs, et je ne supporte pas de lire une telle liste de connerie à leur sujet.

    Parce qu'en plus dans ce que tu dis, tu relègues LLBL au "jouet", qui fait boite noir en aveugle.
    Non il le fait en mode wizard, pour les petits joueurs qui font des petits projet (un site naruto quoi).
    Mais il peut faire bien plus.

  3. #23
    Membre éprouvé
    Avatar de _skip
    Homme Profil pro
    Développeur d'applications
    Inscrit en
    Novembre 2005
    Messages
    2 898
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur d'applications
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Novembre 2005
    Messages : 2 898
    Par défaut
    Mais qui te dit que parce je dis du bien de llblgen forcément je sous-entend du mal de nhibernate? Deja celui avec lequel nous avions commencé à la base étaient XPO, que nous avons vite laché.

    Puis les fields en llblgen ne sont pas des string mais des EntityField, enfin bon ça sert à rien de discuter avec toi, tu me fais dire ce que j'ai pas dit.

    Puis il existe une API de cache pour llblgen, tout comme il est possible de contrôler le chargement des graphes d'objets...

    Ca aurait pu être vachement intéressant de causer de ce genre de chose, mais pas de cette façon, pas dans cet esprit. C'est pas une flamewar de technologie.
    Si tu penses que nos projets étaient de petites conneries, ben grâce à elles on a bien gagné des sous et bien mangé, je regrette vraiment que tu prennes ça sur ce ton.
    Ce qui est sûr c'est que j'ai posté dans le but de poser un témoignage sur un framework qui m'a donné d'excellents résultats, si ça te gêne je m'en fous.

  4. #24
    maa
    maa est déconnecté
    Membre éclairé
    Avatar de maa
    Inscrit en
    Octobre 2005
    Messages
    672
    Détails du profil
    Informations personnelles :
    Âge : 42

    Informations forums :
    Inscription : Octobre 2005
    Messages : 672
    Par défaut
    _skip, ton témoignage m'intéresse. Je ne suis pas un pro des ORM et je ne connais pas très bien leur fonctionnement interne. Quand tu parles de façades, tu fais référence à ça: http://www.dofactory.com/Patterns/PatternFacade.aspx ? Ou c'est carrément autre chose ?

    J'utilise Nhibernate et ce que je trouve pratique est que tu peux faire les classes indépendamment de la bdd, en utilisant les propriétés et les types que tu veux. A la limite tu as une application existante, une bdd existante tu peux quasiment sans modification implémenter nhibernate.

    En revanche la création de fichiers de mapping est pénible et pour ma part je dois souvent exécuter plusieurs fois le projet pour éliminer les erreurs qu'il contient. J'aurais aimé avoir un outils pour générer graphiquement les fichiers de mapping, ou du moins pour produire une première ébauche... mais je n'ai rien trouvé sur le web.
    Il est vrai que l'utilisation des requêtes linq serait un aussi un plus, mais il y a un projet linq to nhibernate. Je ne l'ai pas encore testé, mais j'espère que ce projet va prendre de l'ampleur.

    Sinon j'ai regardé un peu devexpress que je ne connaissais pas. Ca à l'air d'être un paquet d'outils en tout genre. Mais quels avantages principaux y vois-tu pour la productivité ?

  5. #25
    Membre Expert

    Homme Profil pro
    Retraité
    Inscrit en
    Novembre 2007
    Messages
    3 565
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Novembre 2007
    Messages : 3 565
    Par défaut
    B.AF :

    Je me suis mis à NHibernate il y a quelques mois, en me basant sur l'expérience java d'un collègue qui ne disait que bien de hibernate.
    J'avoue que c'est un super outil. Il ne lui manque qu'une seule chose, c'est un manuel d'utilisation bien foutu. Parce que j'ai vraiment eu du mal à intégrer ce truc là, malgré plusieurs années de programmation à mon actif. Et je n'utilise qu'une toute petite partie de nhibernate, faute d'avoir pigé comment aller plus loin. Si tu regardais mon code, tu seerais sans doute éffaré . Tu parles de cache à paramétrer, il faudra que je cherche où ça se trouve ;-)

    J'apprécie tout particulièrement les ICriteria qui permettent de faire des requètes complexes très facilement. Je ne suis pas allé dans le détail mais j'ai tout de même lu qu les performances sont parfois pas terribles. Est-ce vrai ? Pour l'instant, l'application qui l'utilise n'a que très peu de données et je ne peux pas juger.

  6. #26
    Membre Expert

    Homme Profil pro
    Retraité
    Inscrit en
    Novembre 2007
    Messages
    3 565
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Novembre 2007
    Messages : 3 565
    Par défaut
    maa :

    Il y a
    http://www.mygenerationsoftware.com/portal/default.aspx

    et celui-là dont je n'avais pas retrouvé le nom plus tôt
    http://www.nconstruct.com/App/NConst...aspx?PageId=12

  7. #27
    maa
    maa est déconnecté
    Membre éclairé
    Avatar de maa
    Inscrit en
    Octobre 2005
    Messages
    672
    Détails du profil
    Informations personnelles :
    Âge : 42

    Informations forums :
    Inscription : Octobre 2005
    Messages : 672
    Par défaut
    très intéressant.

    Tu les as testés. Lequel préfères-tu ?

  8. #28
    Membre extrêmement actif
    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
    Par défaut
    Citation Envoyé par _skip Voir le message
    Mais qui te dit que parce je dis du bien de llblgen forcément je sous-entend du mal de nhibernate? Deja celui avec lequel nous avions commencé à la base étaient XPO, que nous avons vite laché.

    Puis les fields en llblgen ne sont pas des string mais des EntityField, enfin bon ça sert à rien de discuter avec toi, tu me fais dire ce que j'ai pas dit.

    Puis il existe une API de cache pour llblgen, tout comme il est possible de contrôler le chargement des graphes d'objets...

    Ca aurait pu être vachement intéressant de causer de ce genre de chose, mais pas de cette façon, pas dans cet esprit. C'est pas une flamewar de technologie.
    Si tu penses que nos projets étaient de petites conneries, ben grâce à elles on a bien gagné des sous et bien mangé, je regrette vraiment que tu prennes ça sur ce ton.
    Ce qui est sûr c'est que j'ai posté dans le but de poser un témoignage sur un framework qui m'a donné d'excellents résultats, si ça te gêne je m'en fous.
    C'est un facile de critiquer sans fondement.
    Si la discussion est inintéressante, c'est parce que tu ne comprends pas la technologie dont tu parles, et tu te bornes à des fonctionnalités triviales.

    Je ne fais pas le "flameware" d'une techno ou d'une autre, je respecte et suffisamment frans et suffisamment le travail qu'ils ont tous fourni pour ne pas laisser dire une telle tétrachiée d'inepties.

    Tu n'as abordé AUCUN des points qui justifient l'ORM.
    Juste de points ridicules comme un designer, ou autre artefacts qui n'ont d'utilité que dans des développements RAD, mais aucune valeur ajoutée sur l'arcitecture ou le couplage.

    C'est effectivement un sujet très intéressant à condition d'en parler avec des gens qui le maitrise.

    Je me fous qu'on pense que je fais du pro-technologie, je ne supporte pas
    qu'on dénigre le travail d'EXCELLENTS développeur par fainéantise.

    Oh...Il y a pas un wizard avec 3 boiboites et faut que je comprenne comment mes objets vont persister...Ah bah l'outil est pas bien alors.
    Ah, et puis je peux pas écrire de requêtes mal faites, comme ça si je les teste pas avant et que je veux pas le faire, le compilo va me le dire.
    C'est en gros la substance premiére de ton raisonnement.

    Autant dire qu'effectivement, et ça c'est un vrai jugement de valeur, je doute fondamentalement que tu sois capable avec ça de porter un jugement de fonds sur la valeur de l'outil.

  9. #29
    Membre extrêmement actif
    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
    Par défaut
    Citation Envoyé par Papy214 Voir le message
    B.AF :

    Je me suis mis à NHibernate il y a quelques mois, en me basant sur l'expérience java d'un collègue qui ne disait que bien de hibernate.
    J'avoue que c'est un super outil. Il ne lui manque qu'une seule chose, c'est un manuel d'utilisation bien foutu. Parce que j'ai vraiment eu du mal à intégrer ce truc là, malgré plusieurs années de programmation à mon actif. Et je n'utilise qu'une toute petite partie de nhibernate, faute d'avoir pigé comment aller plus loin. Si tu regardais mon code, tu seerais sans doute éffaré . Tu parles de cache à paramétrer, il faudra que je cherche où ça se trouve ;-)

    J'apprécie tout particulièrement les ICriteria qui permettent de faire des requètes complexes très facilement. Je ne suis pas allé dans le détail mais j'ai tout de même lu qu les performances sont parfois pas terribles. Est-ce vrai ? Pour l'instant, l'application qui l'utilise n'a que très peu de données et je ne peux pas juger.
    Les performances d'un ORM ne sont pas dues à l'ORM directement, mais à la façon dont on construit le graph objet et de comprendre comment les ORM (là l'API n'importe laquelle) gère son identity map.

    Dans le cas de Nh, elle est composée de deux éléments :
    La SessionFactory qui contient les informations de mapping et qui est la "productrice" de domain
    La Session qui correspond à :
    - soit un Unit Of Work, dans lequelle existe un cache dit de niveau stockant l'ensemble des entités chargées.
    - soit une session "Stateless" qui se "contente" de faire ce qu'on lui dit sans appliquer de politique de changement.

    Tous les produits ont une logique dite de chargement
    - Lazy
    Un objet est initialisé avec tout ou partie de ses relations exitentes
    Certains outils (EF par ex) utilises un lazy explicite
    --> EF n'a pas de unit of work, donc il existe toujours un context où trouver les données
    D'autres (Nh) utilises un lazy implicite
    --> La session étant un unit of work en elle même, un proxy se substitue à la relation, son appel déclenchant le chargement
    Chaque mode a autant d'avantage que d'inconvénients.
    Dans le cas 1, il y a une maitrise à posteriori du chargement, donc un graph inutilement chargé potentiellement, dans le second, il y a un risque d'anémie et de "sur sql"

    Donc et c'est valable pour TOUS les ORM, si tu prends une table telle que
    TOTO {id,name,parent_id}
    ou chaque id peut être dépendante d'une autre id;
    La plupart des générateurs vont traiter la relation ainsi (graph simplifié)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
     
    public class Toto
    {
        public int Id{get;set;}
        public string Name{get;set;}
        public Toto ParentId{get;set;}
        public IList<Toto> Linked
    }
    Imaginon maintenant que 3 éléments existent en base :
    1;Toto1;null
    2;Toto2;1
    3;Toto3;1

    Dans chaque cas, et par défaut, un chargement eager va produire le résultat suivant :

    Une instance de Toto contenant :
    Les propriétés de Toto; une liste de 2 Totos(Toto2,Toto3)

    Toto2 va contenir
    Les propriétés de Toto2; une référence vers Toto1 (parent)

    Toto3 va contenir
    Les propriétés de Toto3; une référence vers Toto1 (parent)

    Chaque Toto1 dans Toto2 et Toto3 va véhiculer le premier Toto1.
    L'ORM saura juste qu'il a chargé une entité Toto1, donc ne sollicitera pas la base, mais potentiellement, une simple table avec un mapping ORM inapproprié peut provoquer une récursivité monstrueuse

    Le contrôle du graph est donc de la stratégie de chargement (si tu prends Nh, tu peux gérer 72 mappings d'une table si tu le souhaites) sont les fondamentaux de l'utilisation correcte d'un ORM.

    Si tu ne sais pas précisemment quelles données tu vas charger et quel graphe elles vont générer et sans nécessairement provoquer d'overhead dans la base, tu es dans une situation où l'ORM te dessert.

    D'où l'importance vitale pour qui se sert d'un ORM professionnellement d'avoir un moyen standardisé de contrôler l'interaction de l'ORM avec la base.
    Ce sont les mapping NH;EF et LLBL (oui LLBL mappe aussi...)

    Pourquoi il y a un tel "activisme" des dba contre ses outils ?
    Parce que les développeurs s'en servent mal dans la majeure partie de cas pour les raisons ci-dessous.
    Donc fut un temps où principalement en Java (le principe d'ORM a vraiment vu le jour grâce à Java) les DBA remontés de listing SQL de 40 pages produits par ses outils; et forcémment, ça n'a pas joué en faveur de ces outils.
    Autre point qui est souvent un "bloated controller" c'est la gestion des sessions et de la sécurité. Si chaque ORM expose des transactions ou permet de faire des transactions systèmes, c'est parce qu'encore aujourd'hui en 2009, les ORM sont utilisés commes des mappers.
    Donc à contre nature; puisqu'en gros, l'usage moyen que l'on voit et en fait d'écrire des procédures stockées en objet plutôt qu'en SQL.

    Donc l'ORM c'est souvent appellé le vietnam de l'informatique pour ceux que le sujet intéresse, c'est compliqué, et quel que soit l'outil, aucun n'est une réponse magique à la gestion de la base.
    Dans certains cas ils sont même contre productifs.
    Aucun développeur ne devrait utiliser un ORM dans un sujet qu'il n'arriverait pas à traiter en SQL.

    Je suis en train de bosser sur un tuto d'architecture distribué basé sur un ORM (NH et EF) pour justement montrer en quoi un défaut dans les fondamentaux d'implémentation d'un ORM peut induire un défaut en chaine dans l'architecture logicielle.

  10. #30
    Membre éprouvé
    Avatar de _skip
    Homme Profil pro
    Développeur d'applications
    Inscrit en
    Novembre 2005
    Messages
    2 898
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur d'applications
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Novembre 2005
    Messages : 2 898
    Par défaut
    Oh...Il y a pas un wizard avec 3 boiboites et faut que je comprenne comment mes objets vont persister...Ah bah l'outil est pas bien alors.
    Ah, et puis je peux pas écrire de requêtes mal faites, comme ça si je les teste pas avant et que je veux pas le faire, le compilo va me le dire.
    C'est en gros la substance premiére de ton raisonnement.
    Si tu trouves trivial le fait qu'un maximum de code (notamment les requêtes) soit checkée à la compilation afin d'éviter des régressions lorsque le schéma de la BDD évolue, ben ok...
    Et puis oui, la productivité ma foi c'est le critère no 1 là ou je bosse, la vitesse de développement et les coût de maintenance moindre c'est ce qu'on nous demande. Donc forcément, on alterne prototypage et refactoring, les phases de tests sont très très courtes. J'aimerai bien que ce ne soit pas le cas, hélas si.

    Autant dire qu'effectivement, et ça c'est un vrai jugement de valeur, je doute fondamentalement que tu sois capable avec ça de porter un jugement de fonds sur la valeur de l'outil.
    Ma première réaction en temps normal serait de te dire que ton opinion de moi je m'en tape. Mais d'une certaine façon t'as raison, je ne suis pas Dieu, j'ai fait des choix architecturaux au cours de certains de mes projets qui aujourd'hui me déplaisent fortement mais je suis toujours à la recherche de concepts et d'idées du moment que ces dernières sont compatibles avec les exigences du milieu RAD à flux tendu dans lequel j'évolue.

    Donc si jamais tu veux ouvrir une discussion sans m'attaquer personnellement je suis ton homme, par contre si c'est pour me scier ben on parle d'autre chose.

  11. #31
    Membre extrêmement actif
    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
    Par défaut
    Citation Envoyé par _skip Voir le message
    Si tu trouves trivial le fait qu'un maximum de code (notamment les requêtes) soit checkée à la compilation afin d'éviter des régressions lorsque le schéma de la BDD évolue, ben ok...
    Oui parce que ça veut dire que les modifications de domaine ne sont pas maitrisées. Autrement dit, cette situation n'arrive que si et seulement si le modèle n'est pas maitrisé parfaitement, ce qui relêve de la conception logicielle (rien à voir avec toi dans l'absolu au fait).
    Et ces problèmes doivent être surtout levés par des tests unitaires.

    Citation Envoyé par _skip Voir le message
    Ma première réaction en temps normal serait de te dire que ton opinion de moi je m'en tape. Mais d'une certaine façon t'as raison, je ne suis pas Dieu, j'ai fait des choix architecturaux au cours de certains de mes projets qui aujourd'hui me déplaisent fortement mais je suis toujours à la recherche de concepts et d'idées du moment que ces dernières sont compatibles avec les exigences du milieu RAD à flux tendu dans lequel j'évolue.

    Donc si jamais tu veux ouvrir une discussion sans m'attaquer personnellement je suis ton homme, par contre si c'est pour me scier ben on parle d'autre chose.
    Moi non plus je ne suis pas Dieu, j'ai entre autres défauts celui d'être sanguin et passionné par mon job.
    Voilà.
    Quand je donne mon avis, c'est pas toujours diplomatique, soit, mais c'est sans rancune et c'est honnête.
    Et moi aussi je me suis trompé dans des choix, j'en regrette certains, j'aurai pu faire mieux aussi si j'avais su.

    Mais sur ce sujet là en particulier qui est une vraie patinette géante pour développeur, je trouve très important déjà que tous les développeurs puissent comprendre que l'important c'est que tous les ORM répondent au même pattern et de façon standard.
    Ce qui diverge, c'est l'outillage et les extensions (bon parfois le core, mais ça reste très similaire dans le résultat)

    Un développeur qui échoue à l'usage d'un ORM n'aura pas plus de chance de réussir avec un autre. Un bel outillage (l'éditeur d'entité de LLBL est excellent par exemple, même si il lui manque un aspect collaboratif) peut induire un développeur en erreur.

    Pour comprendre ce genre d'outils, il faut admettre de le faire "a mano" au début. Quand les automatismes sont mis en place, dans ce cas on peut choisir l'outil.

  12. #32
    Membre éprouvé
    Avatar de _skip
    Homme Profil pro
    Développeur d'applications
    Inscrit en
    Novembre 2005
    Messages
    2 898
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur d'applications
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Novembre 2005
    Messages : 2 898
    Par défaut
    Citation Envoyé par B.AF Voir le message
    Oui parce que ça veut dire que les modifications de domaine ne sont pas maitrisées. Autrement dit, cette situation n'arrive que si et seulement si le modèle n'est pas maitrisé parfaitement, ce qui relêve de la conception logicielle (rien à voir avec toi dans l'absolu au fait).
    Et ces problèmes doivent être surtout levés par des tests unitaires.
    C'est comme tu dis, on a besoin de plus de tests et de plus de temps pour développer. Mais je suis sûr que tu te rends compte à quel point ce genre de chose peut devenir problématique lorsqu'on veut tenir un rythme de livraison très serré tout en s'assurant que chaque livraison amène son lot de nouveautés et sa valeur incrémentale.


    Moi non plus je ne suis pas Dieu, j'ai entre autres défauts celui d'être sanguin et passionné par mon job.
    Voilà.
    Quand je donne mon avis, c'est pas toujours diplomatique, soit, mais c'est sans rancune et c'est honnête.
    Bah tu sais on est sur un forum, forcément il manque la nuance, les malentendus sont vite arrivés autant pour moi. Oublions ça.

    Et moi aussi je me suis trompé dans des choix, j'en regrette certains, j'aurai pu faire mieux aussi si j'avais su.
    Je pense que ça fait partie de ce métier, on est amené à faire des choix sur des choses susceptibles d'évoluer, avec toutes les contraintes de délais imposées (sans forcément vouloir toujours se cacher là derrière ça reste un facteur de poids).
    Mais être capable de porter un jugement sur son projet fini puis de se rendre compte de ce qui a bien fonctionné et là où ça a pêché, c'est important.
    Ca fait un peu cheap talk mais la remise en question est souvent nécessaire.

    Un développeur qui échoue à l'usage d'un ORM n'aura pas plus de chance de réussir avec un autre. Un bel outillage (l'éditeur d'entité de LLBL est excellent par exemple, même si il lui manque un aspect collaboratif) peut induire un développeur en erreur.
    Je m'autorise à penser que dans la mesure où les délais ont été respectés, que la satisfaction du client est là et que la maintenance n'est pas trop complexe, il faut croire qu'on a pas tout fait faux.
    En revanche, je sais que certains aspects de notre architecture sont très criticables bien qu'en partie défendables, je pense honnêtement que si il existait des solutions miracles dans ce domaine ça se saurait.

    Je ne compte pas le nombre de fois où nous avons été tiraillé entre l'envie d'avoir des couches métier et BDD bien séparées et le besoin de pouvoir quasiment micromanager nos chargements de données... Les compromis ont vraiment été difficiles sur certains points, puis l'incertitude du choix architectural aussi.

  13. #33
    Membre Expert

    Homme Profil pro
    Retraité
    Inscrit en
    Novembre 2007
    Messages
    3 565
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Novembre 2007
    Messages : 3 565
    Par défaut
    maa :

    A vrai dire, j'ai commencé avec mygeneration mais comme c'était mes tous début avec NHibernate, quand j'ai vu tous les templates proposés, j'ai été un peu perdu.

    L'avantage de nconstruct, même en version lite, est sa simplicité d'utilisation. Il a quand même tendance à créer des hbm pas trop light.

    Mon expérience s'est donc limité à générer des fichiers lors de ma découverte de NHibernate histoire de voir rapidement à quoi ça pouvait ressembler. J'ai ensuite regardé la doc d'un peu plus près et j'ai repris les fichiers générés pour les adapter à mon cas, en enlevant des choses inutiles, en rajoutant d'autres choses, ce qui m'a permis de comprendre un peu mieux le fonctionnement des fichiers de mappings. Pour les classes C#, il n'y a rien de sorcier.

  14. #34
    Membre Expert

    Homme Profil pro
    Retraité
    Inscrit en
    Novembre 2007
    Messages
    3 565
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Novembre 2007
    Messages : 3 565
    Par défaut
    B.AF :

    Tout d'abord, merci de ton explication. Tu sembles connaitre particulièrement le sujet.
    J'aurais aimé que tu sois dans le coin quand j'ai découvert NHibernate.

    Tu parles du lazy loading. Je me suis heurté à ce truc là au début, n'ayant pas construit mon mapping correctement, avec les relations qui allaient bien.
    Je me retrouvais souvent avec des objets non chargés qui plantaient sauvagement mon programme.
    C'est là que je me dis que, si j'avais pu trouver une doc plus "claire" sur le sujet, j'aurais pu gagner du temps.
    Attention, loin de moi l'idée de dénigrer le travail des auteurs de la doc.
    C'est un peu comme quand on connait la route pour aller chez soi et qu'on l'explique à des amis qui doivent venir à la maison.
    On a tellement l'habitude de rentrer chez soi que ça parait tout simple. . Ca l'est souvent moins pour les "étrangers".

    Puisque tu es en contact avec les auteurs de nhibernate, je vais me permettre une question:
    Il me semblait avoir vu au début des outils en ligne de commande pour générer des hbm et des classes C#.
    Impossible de me souvenir où j'avais vu ça. Ais-je révé ?

    Enfin, si tu veux garder mon adresse email dans un coin pour me prévenir de la disponibilité du tuto que tu prépares, ça serait sympa.


    Question subsidiaire: Que penses-tu de l'idée qui consisterait à demander la création d'une rubrique ORM sur le forum C# ?

  15. #35
    Expert confirmé

    Avatar de Philippe Vialatte
    Homme Profil pro
    Architecte technique
    Inscrit en
    Juillet 2004
    Messages
    3 029
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Juillet 2004
    Messages : 3 029
    Par défaut
    bon petit thread

    Juste en passant, @ Papy214, pour la doc, je te conseille de jeter un oeil sur le livre NHibernate in Action
    http://dotnet.developpez.com/livres/...L9781932394924

    Sinon, tu as nhforge.org, qui contient une tonne d'infos sur nhibernate.

    Pour revenir sur la question d'origine (un orm gratuit/pas cher pour C#), je plussoies pour NHibernate, si le but est d'utiliser un mappeur objet relationnel, ou peut-etre LightSpeed chez les "pas cher"

    Si l'idee est plus d'avoir un mappeur pour faire une relation 1/1 entre les tables et les objets, et eviter de faire du SQL, Subsonic est tres bien et gratuit (et dans le cadre d'une problematique RAD, ca depotte)

    Je suis en train de bosser sur un tuto d'architecture distribué basé sur un ORM (NH et EF) pour justement montrer en quoi un défaut dans les fondamentaux d'implémentation d'un ORM peut induire un défaut en chaine dans l'architecture logicielle.
    Ahhh...bien interesse, la...
    Avec des sagas et tout et tout ?

    Mon Blog

    The Cake is still a lie !!!



    Vous voulez contribuer à la rubrique .NET ? Contactez-moi par MP.
    Vous voulez rédiger des articles pour la rubrique .NET ? Voici la procédure à suivre.

  16. #36
    Membre extrêmement actif
    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
    Par défaut
    Ben oui, par étape quoi; montrer qu'avec le même socle de service, on peut avoir n dal sur n fournissuers, et une distribution en web serv, wcf et remoting, avec un client lambda.

    Du quotidien quoi!

  17. #37
    Membre Expert

    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    1 377
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Octobre 2005
    Messages : 1 377
    Par défaut
    Citation Envoyé par B.AF Voir le message
    Ben oui, par étape quoi; montrer qu'avec le même socle de service, on peut avoir n dal sur n fournissuers, et une distribution en web serv, wcf et remoting, avec un client lambda.

    Du quotidien quoi!
    Super, si t'as besoin de bêta lecteur ^^
    Échouer, c'est avoir la possibilité de recommencer de manière plus intelligente.

    Twitter Blog Mon site

    Mon article sur l'agilité

  18. #38
    Expert confirmé

    Avatar de Philippe Vialatte
    Homme Profil pro
    Architecte technique
    Inscrit en
    Juillet 2004
    Messages
    3 029
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Juillet 2004
    Messages : 3 029
    Par défaut
    Citation Envoyé par rad_hass Voir le message
    Super, si t'as besoin de bêta lecteur ^^
    ++

    Mon Blog

    The Cake is still a lie !!!



    Vous voulez contribuer à la rubrique .NET ? Contactez-moi par MP.
    Vous voulez rédiger des articles pour la rubrique .NET ? Voici la procédure à suivre.

  19. #39
    Membre Expert

    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    1 377
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Octobre 2005
    Messages : 1 377
    Par défaut
    Citation Envoyé par pvialatte Voir le message
    ++
    J'ai enfin lu totalement ton article et je vais te dire ce que j'en pense sur le bon thread ... ^^
    Échouer, c'est avoir la possibilité de recommencer de manière plus intelligente.

    Twitter Blog Mon site

    Mon article sur l'agilité

  20. #40
    Membre extrêmement actif
    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
    Par défaut
    Je vous le sortirai au prochain ALT.NET, vu qu'il y a de l'AOP

Discussions similaires

  1. Bump mapping
    Par Francky033 dans le forum DirectX
    Réponses: 7
    Dernier message: 22/11/2003, 18h35
  2. [EJB2.1 Entity] [BES] Mapping automatique et clés étrangères
    Par Bobby McGee dans le forum Java EE
    Réponses: 3
    Dernier message: 15/10/2003, 10h33
  3. Réponses: 2
    Dernier message: 11/07/2003, 18h24
  4. Problème avec memory mapping
    Par gemai dans le forum C
    Réponses: 13
    Dernier message: 04/07/2003, 09h50
  5. Editeur de MAP en delphi pour jeux directX
    Par PetitScorpion dans le forum DirectX
    Réponses: 5
    Dernier message: 09/07/2002, 18h47

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