a du sens pour utiliser un ou vers un mapper? P>
Je me pose cette question sur la pile sur le débordement, car c'est le meilleur endroit que je connaisse de trouver des développeurs intelligents disposés à donner leur aide et leur avis. P>
Mon raisonnement est le suivant: P>
1.) Où appartiennent le SQL? P>
a.) Dans chaque projet professionnel que j'ai travaillé, la sécurité des données a été une exigence essentielle. Les procédures stockées fournissent une passerelle naturelle pour contrôler l'accès et l'audit. P>
b.) Les problèmes avec les applications de production peuvent souvent être résolus entre les tables et les procédures stockées sans mettre de nouvelles constructions. P>
2.) Comment puis-je contrôler le SQL généré? Je fais confiance à des arbres d'analyse pour générer des SQL efficaces. J'ai un peu d'expérience optimisant SQL dans SQL-Server et Oracle, mais ne vous sentirais pas trompé si je n'avais jamais eu à le refaire. :) p>
3.) Quel est le point d'utiliser un ou-mapper si je reçois mes données de procédures stockées? p>
J'ai utilisé le motif de référentiel avec une couche d'accès à des données génériques à la maison. Si une collection devait être mise en cache, je le cache. J'ai également de l'expérience en utilisant EF sur une petite application CRUD et une expérience aidant à régler une application NHibernate qui connaissait des problèmes de performance. Donc, je suis un peu biaisé, mais prêt à apprendre. P>
Au cours des dernières années, nous avons toutes entendu parler de nombreux développeurs respectables préconisant l'utilisation de mappeurs spécifiques (l'entité-cadre, NHibernate, etc.). p>
Quelqu'un peut-il me dire pourquoi quelqu'un devrait passer à un orj pour le développement grand public sur un projet majeur? p>
Edit: http://www.codinghorror.com/blog/2006/06/Object-Relational-Mapping-is-the-vietnam-of-compience-science.html semble avoir une forte discussion sur ce sujet Mais c'est obsolète. P>
Encore une autre modification: Tout le monde semble convenir que les procédures stockées doivent être utilisées pour des applications d'entreprise lourdes, en raison de leur avantage de performance et de leur capacité à ajouter une logique de programmation plus proche des données. P>
Je constate que l'argument le plus fort en faveur de ou des mappeurs est la productivité des développeurs. P>
Je soupçonne qu'un important motivateur pour le mouvement ORM est la préférence du développeur vers la persistance restante-agnostique (ne vous inquiétez pas si les données sont en mémoire [sauf en cache] ou sur la base de données). p>
Orms semble être des épargnants de temps exceptionnels pour les applications Web locales et petites. P>
Peut-être que le meilleur conseil que je vois est à partir de client09: pour utiliser une configuration d'orèse, mais utilisez des procédures stockées pour la base de données intensive (AKA lorsque l'Orm semble être insuffisant). P>
4 Réponses :
Les procédures stockées sont excellentes pour encapsuler la logique de la base de données au même endroit. J'ai travaillé sur un projet qui utilise uniquement des procédures d'Oracle stockées et que je suis actuellement sur un qui utilise Hibernate. Nous avons constaté qu'il était très facile de développer des procédures redondantes, car nos développeurs Java n'étaient pas versés dans les dépendances de package PL / SQL. p>
En tant que DBA pour le projet, je constate que les développeurs Java préfèrent tout garder dans le code Java. Vous rencontrez dans l'Occassional, "Pourquoi ne faisais-je pas juste en boucle à travers tous les objets qui vient de rentrer?" Cela a provoqué un certain nombre de "Pourquoi l'index n'aura-t-il pas pris soin de cela?" Problèmes. P>
avec hibernate Vos entités peuvent contenir non seulement leurs propriétés de base de données liées, mais peuvent également contenir des actions prises sur eux. P>
Par exemple, nous avons une entité de tâche. On pourrait ajouter ou modifier une tâche entre autres choses. Cela peut être modélisé dans l'entité hibernate dans les requêtes nommées. P>
Je dirais donc aller avec une configuration ORM, mais utilisez des procédures pour la base de données intensive. p>
Un inconvénient de garder votre SQL en Java est que vous exécutez le risque de développeurs utilisant des requêtes non paramétrées laissant votre application ouverte à une injection SQL. P>
En réponse à: "Avec Hibernate, vos entités peuvent contenir non seulement leurs propriétés de base de données liées, mais peuvent également contenir des mesures prises sur eux." Mais je peux obtenir ceci sans ormission. En outre, la responsabilité unique doit également jouer une partie ici. Quel est le rôle de la DTO: transférer des données ou calculer les valeurs basées sur les valeurs?
Une approche différente ... Avec l'augmentation du mouvement SQL maintenant, vous voudrez peut-être essayer la base de données d'objet / document à la place de stocker vos données. De cette façon, vous éviterez essentiellement l'enfer qui est ou la cartographie. Stockez les données comme votre application les utilisez et faites-la de la transformation derrière la scène dans un processus de travail pour le déplacer dans un format plus relationnel / OLAP pour une analyse et une notification ultérieures. P>
J'étais un professionnel de nombreuses années et j'ai pensé que c'était la seule bonne façon de faire de la DB Développement, mais les 3-4 derniers projets que j'ai réalisés dans lesquels j'ai terminé dans EF4.0 W / Out SP et les améliorations apportées à Ma productivité a été vraiment impressionnante - je peux faire des choses dans quelques lignes de code maintenant qui m'auraient déjà pris une veille. p>
Je pense toujours que SP est important pour certaines choses (il y a des moments où vous pouvez améliorer considérablement les performances avec un SP bien choisi), mais pour les opérations générales de CRUD, je ne peux pas imaginer jamais en retour. p>
La réponse courte pour moi est que la productivité du développeur est la raison d'utiliser l'ormes - une fois que vous aurez sur la courbe d'apprentissage de toute façon. p>
Ce qui suit est juste mon opinion privée, donc c'est plutôt subjectif. p>
1.) Je pense que l'on doit différencier entre les applications locales et les applications d'entreprise. Pour les applications locales et certaines applications Web, l'accès direct à la DB est correct. Pour les applications d'entreprise, je pense que la meilleure gestion de l'encapsulation et des droits rend les procédures stockées le meilleur choix à la fin. P>
2.) C'est l'un des gros problèmes avec les ormes. Ils sont généralement optimisés pour des motifs de requête spécifiques et aussi longtemps que vous utilisez ceux que la SQL générée est typiquement de bonne qualité. Toutefois, pour des opérations complexes qui doivent être effectuées à proximité des données pour rester efficaces, mon sentiment est que l'utilisation de code SQL manuel est stilol la voie à suivre et, dans ce cas, le code passe dans SPS. P>
3.) Traiter avec des objets sous forme d'entités de données est également bénéfique par rapport à l'accès direct aux jeux de données "desserrés" (même si ceux-ci sont dactylographiés). La désérialisation d'un résultat défini dans un graphique d'objet est très utile, que le jeu de résultats a été renvoyé par un SP ou d'une requête SQL dynamique. P>
Si vous utilisez SQL Server, je vous invite à consulter mon open-source BSN MODULESTORE Projet, c'est un cadre pour la version de schéma de DB et l'utilisation de SPS via un concept de orement léger (sérialisation et désérialisation des objets lors de l'appel des SPS). P>
CSLA n'est pas un ou-mapper. Ceci est une idée fausse commune.
Peut-être que c'est plus courant pour vous. Stackoverflow.com/ Questions / 404083 / ...