J'ai travaillé avec NHibernate, Linq à SQL et Cadre d'entité depuis un certain temps. Et bien que je voie les avantages à utiliser un orj pour maintenir l'effort de développement se déplaçant rapidement, le code simple, et le Object rationnelle Impédation Mismatch au minimum, je trouve toujours très difficile de convaincre un DBA SQL Die des forces de l'ORM. De mon point de vue, un orj peut être utilisé pendant au moins 90 à 95% de tous vos accès de données, laissant ces choses vraiment velues à effectuer dans des procédures ou des fonctions, le cas échéant. Je ne suis en aucun cas le gars qui dit que nous devons tout faire dans l'ormes! P>
Question: strong> Quels sont certains des meilleurs arguments pour convaincre une vieille école DBA que l'utilisation d'un ormes n'est pas la pire idée absolue jamais conçue par un programmeur! P>
4 Réponses :
Expliquez-leur que la création d'une procédure stockée pour chaque action prise par une application est restimible à plusieurs niveaux. P>
SQL dynamique a tous ces problèmes et plus. P>
Un gars que j'ai travaillé avec dit "Nous devrions utiliser des procédures stockées pour isoler les applications dépendantes du changement". Ensuite, il a changé ce que la procédure stockée est revenue à l'une de mes applications et la cassa! Hein?
Si vous utilisez un projet de base de données tel que ceux de VS2008, cela compila en réalité la base de données et vous avertira de toutes les erreurs dues aux changements de schéma (par exemple, accédez à des colonnes modifiées, etc.), votre point 1 est invalide. De même, le point 2 est invalide en supposant que quelqu'un est responsable de la base de données et ne laissera pas la merde. Et 3 est annulée par un déploiement automatisé approprié. Donc, je n'aime pas vraiment aucun de ces arguments.
À moins que votre équipe n'utilise une DB autre que SQL Server, auquel cas l'utilisation d'un projet DB dans VS2008 n'est pas une option pour vous. Ensuite, ces points ont parfaitement logique.
N ° 1, il existe des outils pour suivre les dépendances dans les changements de schéma pour la plupart des grands RDBMS, ces outils vérifient non seulement des Sprates, mais également des UDF et des déclencheurs. # 2, beaucoup d'entre nous ont probablement vu d'innombrables fonctions .NET / PHP / Java (et.) Fonctions "Créées pour faire la même chose ou si elles alternaient légèrement une [fonction / classe / structure existante ...] se passe avoir des ramifications graves. " Évidemment, le principe s'applique à toute situation de programmation i> et non seulement de bases de données. # 3, non ce n'est pas difficile. C'est ce que sont les tests automatisés.
Ne l'explique pas. Prouve le.
Si vous voulez le convaincre, vous devez d'abord comprendre quel est son problème avec l'utilisation d'un orj. Vous donner une liste de prestations génériques est peu susceptible d'aider s'il ne répond pas aux problèmes qu'il a. P>
Cependant, ma première estimation quant à sa question serait qu'elle l'empêche de faire n'importe quelle optimisation car vous accédez directement aux tables, il n'a pas de couche d'abstraction derrière laquelle travailler, donc si une table a besoin de modifier ou (de ) Normaliser alors il ne peut pas le faire sans casser votre application. p>
Si vous vous demandez pourquoi un DBA se sentirait comme ça, et comment y répondre, alors c'est à peu près la même chose que celui-ci à venir à vous et en disant qu'il veut que vous fassiez tous les champs privés de vos cours publics, Et que vous ne pouvez pas changer d'entre eux sans le demander d'abord. Imaginez ce qu'il faudrait pour lui de vous convaincre que c'est une bonne idée, puis utilisez le même argument sur lui. P>
J'aime ton point de vue. Cependant, la chose que je n'ai jamais comprise, c'est pourquoi les DBA et les programmeurs ne sont pas "sur la même équipe". Pourquoi la plupart des endroits où je travaille a-t-il que DBA et que les développeurs se soient cédés les uns des autres lorsque leurs fonctions sont trop nombreuses. Dans le cas où vous prenez une optimisation - la voie standard autour de cela est de tout (99%?), Identifier les besoins d'optimisation et portez la requête à un procédé indispensable. Mais dans la plupart des cas, je trouve des ormes générant un excellent SQL!
Nous travaillons tous ensemble JC n'ont pas de friction du tout. Mais vous devez comprendre la différence de rôles. Les DBA sont responsables de la conservation des bases de données fonctionnant, sauvegardées et effectuées correctement. Si les opérations de DB sont lentes car la structure de la table est fausse et a besoin de modifier, puis qui obtient le blâme quand il ne peut pas être corrigé? Le dba. Mais il ne peut rien faire à ce sujet parce que les gens accèdent directement aux tables. C'est une raison pour laquelle beaucoup d'entre eux sont plutôt contre l'accès à la table directe.
Les procédures utilisées pour être plus efficaces en raison de mécanismes de mise en cache prévisibles. Cependant, de nombreux DBA ont survenir les procédures, introduisant de nombreuses logiques de branchement avec des commandes, ce qui entraîne un scénarios où ils deviennent incaspérables. P>
Ensuite, les procédures ne sont utiles que si vous envisagez de couvrir la logique de données sur plusieurs plates-formes; Un site Web et une application cliente distincte, par exemple. Si vous ne faites qu'une application Web, les procédures introduisent un niveau d'abstraction inutile et plus de choses à jongler. Devoir ajuster une table, puis une procédure, alors un modèle de données nécessite beaucoup de travail lors du réglage d'un modèle unique via l'orèse suffirait. P>
Enfin, procédures Coupez votre code sur votre base de données très étroitement. Si vous souhaitez migrer vers une base de données différente, vous devez migrer toutes les procédures, dont certaines devront peut-être être fortement réécrites. Ce type de migration est nettement plus facile avec une ormission puisque vous pouvez tirer le backend et installer un nouveau sans l'application frontale en sachant la différence. P>
@Soviut pendant que je suis totalement d'accord avec la logique que vous présentez ... Je dois admettre que dans tous les endroits où je n'ai jamais été échangé mon serveur SQL pour un serveur Oracle ... ou MySQL. J'ai entendu cet argument pour ormer autant de fois mais n'avez jamais été quelque part qui le justifiait! +1 Tout comment!
Je suis d'accord que cela n'arrive pas souvent. Cependant, les backends rapides sont fondamentalement libres lorsque vous utilisez un orj qui les supporte. Je suppose que mon point était vraiment que les procédures sont étroitement couple et ormes découplent.
Je suppose que ma première question à "convaincant d'un DA DA DIRE DBA d'utiliser un orm em>" serait le suivant: Le DBA est-il également un programmeur qui fonctionne également en dehors de la DB afin qu'il / elle " utiliser un orm "? Sinon, pourquoi le DBA pourrait-il renoncer à une partie importante de leur travail à quelqu'un d'autre et à réduire considérablement leur utilité globale à l'entreprise? Ils ne le feraient pas. P>
Dans tous les cas, la meilleure façon de convaincre tout ingénieur de tout est avec des données empiriques. Configurez un prototype avec quelques parties de la demande réelle portée vers Orm dans le but de votre démonstration et prouve réellement vos points. P>
Sur un autre point, je pense que vous n'obtenez pas le dilemme d'impédance relationnelle de l'objet si vous essayez d'utiliser cela comme argument pour utiliser un objet En utilisant Sprates, le DBA est libre d'apporter des modifications au schéma sous-jacent, tant que la SPROC retourne toujours les mêmes colonnes avec les mêmes types. Ainsi, avec cette abstraction que les Sprates ajoutent, les problèmes de cartographie de schéma direct deviennent nuls. Cela ne signifie toutefois pas que vous devez abandonner votre EF bien-aimé puisque EF peut maintenant être utilisé de manière heureuse avec SproS. P>
Réponse: La DBA peut maintenir le contrôle des lectures ad-hoc en définissant des vues pouvant être utilisées par l'ORM pour ces lectures. Une fois que lesdites vues sont créées pour ces lectures, le programme DBA n'aura pas besoin d'être dérangé par le programmeur lorsqu'ils veulent différentes sortes / filtres ou pour renvoyer certaines colonnes, etc. DML peut être reléguée aux Sprates, les lectures peuvent être reléguées à des vues accessibles par l'ORM. . Je conviens que dans de nombreux cas la plupart i> de ce que l'application doit faire est de lire.