8
votes

Qu'est-ce qui est si génial à propos de Orm?

Donc, je passe une tête contre le moment du mur et que vous espérez que quelqu'un peut venir aider à retirer le mur ou à arrêter ma tête de bouger !!

Au cours des 3/4 dernières semaines, j'ai enquêté sur la priorité d'Ormes pour un nouveau projet. L'ORM doit mapper dans une base de données existante, grande et vieillissante SQL.

Alors j'ai essayé subsonique. J'ai vraiment aimé V2 et V3 après que Modding fonctionne bien avec VB et Named Schemas dans SQL fonctionnait correctement. Cependant, son manque de flexibilité d'avoir des propriétés d'entité séparées Les noms de colonne VS m'avaient tiré mes cheveux (désolé rob).

J'ai essayé le cadre d'entité, mais j'ai trouvé comme d'autres que cela manque dans certaines zones.

Alors je mords la balle et essayé NHibernate, mais après une semaine, ce qui l'aime travailler comment j'ai aimé (avec l'aide de CodeMith pour générer des classes / HBM pour moi) Je suis frustré avec le temps nécessaire au démarrage (construire un Objet de configuration), malgré un certain nombre de tours pour réduire cette période.

Je suis essentiellement après la construction d'une classe DAL que je peux partager entre les applications et les sites Web. Suis-je aboyer le mauvais arbre? Pour un projet hérité avec 100 tables, devrais-je retourner à Ado.net et utiliser DTO? Aarrhh!

Désolé pour le style de critère de la question. Je n'ai pas beaucoup de cheveux à gauche et j'aimerais garder ce que j'ai !!

Merci d'avance, ed

ps. Je devrais ajouter que je connais très bien SQL et je n'ai pas peur de me salir les mains pour écrire des requêtes rapides. Si quelque chose que je n'ai pas besoin d'être caché de SQL


4 commentaires

Quel type d'application avez-vous pour que le temps de démarrage de NHibernate est un problème? IMO, cela ne devrait vous déranger que si vous accédez directement à la DB du bureau, pas en cas de service de niveau central.


Vous pouvez simplifier cela un peu un peu en demandant simplement «Comment puis-je accélérer une heure de démarrage d'une application Nibernate?».


Andre - Je cherche à utiliser NHibernate depuis le bureau! Dans le cadre d'une bibliothèque de classe qui sera référencée par un certain nombre d'applications d'assistance. Certaines de ces petites applications prennent des secondes à courir, pas de problème à l'aide d'une approche ADO.NET traditionnelle mais douloureuse avec NHibernate


Michael - J'ai essayé à la fois des suggestions - placer tous les mappages dans un fichier HBM et la sérialisation binaire du HBM. Les deux apportent des améliorations, mais il reste encore un décalage notable.


4 Réponses :


1
votes

Dans mon expérience, la plupart des orateurs finissent par devenir beaucoup plus complexes que SQL. Qui défait tout le but de les utiliser.

Une solution que je suis enthousiaste à propos de Linq2SQL. Il excelle comme une couche mince sur les procédures ou les vues stockées. C'est vraiment facile à utiliser et n'essaie pas de cacher SQL.


4 commentaires

Je peux sympathiser avec la question de la complexité; La plupart des outils Orm sont dits complexes pour configurer. Je dirais qu'ils résolvent une gamme de problèmes significativement complexe pour justifier leur complexité et que la valeur gagnée dans l'utilisation des emporte-t-elle à la peine d'apprendre à les utiliser.


Andomar: Ormes, en général, expose des objets, pas SQL. C'est tout le point. Pourquoi utilisez-vous une ormission si vous ne pouvez pas cartographier des tables relationnelles sur des objets? Peut-être que Ado.net est plus adapté à vos besoins.


Andomar: Avez-vous regardé @ plinqo? J'ai cartographié la même base de données avec elle et codesmith et fini avec moins d'erreurs et de temps d'exécution beaucoup plus rapide - pas de retard de démarrage hors de la boîte.


..mais avec quelques belles bits d'ormes supplémentaires que vous ne recevez pas avec Linq2SQL simple



8
votes

orm vous laissez:

  1. Pour cartographier les lignes de table aux objets, qui sont les morceaux de programmation orientés pour objet.
  2. naviguer automatiquement à travers les relations d'objet
  3. Pour ajouter facilement, éditer et supprimer des lignes de table
  4. Pour interroger la base de données de manière plus intuitive, car vous n'avez pas à penser à des jointures (celle-ci dépendra de la méthode ORM et de la requête)
  5. gérer de manière transparente le cache L1 et L2.

    Tout ce qui précède devrait être manipulé à la main si vous n'utilisez pas d'ormes.

    PS: J'accepte de Dmitry quant à l'heure de démarrage de NHibernate (voir les commentaires de la question). En outre, avez-vous essayé fluent NHibernate ? Nibernate fluide est impressionnant facile. Je ne pouvais pas croire mes yeux quand j'ai commencé à mapper une base de données. C'est encore plus facile que les ormes propriétaires comme Devexpress XPO.


1 commentaires

+1 pour recommander fluentenibernate. Utilisez-le actuellement sur un projet et c'est vraiment "impressionnant facile".



2
votes

Le plus grand avantage d'un outil ORM est qu'il vous aidera à calmer votre application correctement. La plupart des projets utilisent aujourd'hui une couche de données pour se connecter à la base de données. Vous commencez à partir de l'outil Orm pour produire des classes correspondant à vos objets de base de données. Ensuite, vous définissez une interface à l'aide de ces méthodes. Tout code de persistance utilise les méthodes de cette interface. De cette façon, la couche logique des entreprises n'est couplée que sur cette interface de couche supérieure et doit ne rien savoir sur la base de données. En fait, il ne devrait y avoir aucune dépendance sur Ado.net ni même NHibernate.

Un autre avantage des outils ORM est que vous désélectionnez votre application à partir du serveur de base de données. Vous pouvez changer le moteur DB et utiliser toujours le même code. En outre, il n'y a pas que la complexité de la SQL que l'ormes se cache de vous. Il peut également vous aider avec les transactions logiques et la mise en commun de la connexion.

Je dirais que pour de nouveaux projets, un outil ORM est une nécessité. Pour des projets hérités, ce n'est pas tant de bienfaits, à moins bien sûr que vous n'ayez le temps / l'argent pour commencer à partir de zéro.


3 commentaires

+1 pour l'accent sur le découplage. Cela seul est la raison pour laquelle je préconise fortement les outils Orm et utilise le motif de référentiel.


Les outils ORM n'aident pas à découpler. La logique de présentation peut toujours utiliser Ado.net ou SQL via des mécanismes ORM pour parler à la base de données. LINQTOSQL veut être votre couche d'entreprise et rend suffisamment délicat de séparer la logique des entreprises et des données. Dans la plupart des cas, les ormes ne peuvent masquer aucun SQL à partir de vous autre que le crud très basique et la recherche par type / ID Type de requêtes. Les ormes peuvent être utiles pour les projets hérités et n'ont pas toujours de sens pour les nouveaux projets.


Oum Outils Do aide avec découplage. Comme je l'ai écrit, ce n'est pas la seule chose que vous devez faire, car vous avez toujours besoin de définir des méthodes d'interface, ce qui masquera les dépendances sur les bibliothèques ORM. Ces méthodes peuvent utiliser cependant des classes telles que «client» ou «ordre» créées avec l'outil Orm et la carte dans la base de données.