Quelle est votre manière préférée d'interagir avec les bases de données à partir de votre langage de programmation ?[fermé]

StackOverflow https://stackoverflow.com/questions/8087

  •  08-06-2019
  •  | 
  •  

Question

Il existe de nombreuses façons de se connecter et d'interagir avec la couche de base de données.En Java, par exemple, les usages courants sont JDBC appels de SQL brut, mappeurs relationnels d'objets, JDBCTemplate (Printemps), procédures stockées, etc.

Dans votre langue, quelle option préférez-vous et pourquoi ?Quand envisageriez-vous les autres ?

Était-ce utile?

La solution

ORM à chaque fois, moins je dois penser aux bases de données, mieux c'est.

Autres conseils

J’aime beaucoup la manière de faire les choses à 3 + 1.Un niveau pour l'interface utilisateur, un pour la logique métier et pour les données persistantes.Le dernier que tu dis ?Objets et interfaces de domaine.Cela permet de charger un ou deux des niveaux principaux plus le "niveau" de domaine, et le code devrait fonctionner.

Il s'appuie fortement sur injection de dépendance et Inversion de contrôle des principes.Le niveau données/persistance ne fait que deux choses.Il crée, lit, met à jour et supprime des données et les mappe au format d'objet de domaine.

Le niveau d’interface utilisateur fait exactement le contraire.Il affiche et reçoit les données d'une manière à laquelle l'utilisateur peut s'identifier, et mappe ces sorties/entrées vers et depuis le format d'objet de domaine.

Le niveau de logique métier a juste besoin de savoir une chose.Logique métier.Il ne se soucie pas de l'origine des données ni de l'endroit où le niveau de données les place.Il sait qu’il doit signaler un compte qui vient d’être découvert, mais comment le faire physiquement ne fait pas vraiment partie de son travail.

Les objets de domaine eux-mêmes n'ont aucune logique, ce ne sont que des conteneurs permettant de transmettre des données entre les niveaux.Cela signifie que vous pouvez charger les objets et les interfaces du domaine sans avoir à penser aux dépendances.

En fin de compte, j'ai l'impression d'avoir une base de code assez claire avec des niveaux clairement séparés.Et avec des interfaces strictes et de bonnes classes de base, la majeure partie du codage consiste simplement à indiquer au logiciel quoi faire lorsque X se produit.Exactement comme c'est censé être.

</rant>

Modifier:Oh ouais.Cela est vrai à la fois pour LINQ, Subsonique, et d'autres ORM.

Ruby sur Rails' Enregistrement actif essuie le sol avec tout ce que j'ai vu jusqu'à présent. LINQ on dirait que cela pourrait être mieux dans certains cas, mais ActiveRecord est tellement flexible.

LINQ est la voie à suivre pour moi à partir de maintenant

Je préfère construire une couche de modèle d'objet métier (objets et collections d'objets).

Je crée la possibilité d'interagir avec la base de données dans chaque objet/collection (pour SQL Server, j'utilise Système.Data.SqlClient).J'ai utilisé ce modèle pour SQL Server, MySQL et Oracle.

Ensuite, j'interagis avec les objets de mon code d'application.

En résumant ma base de données en objets, mon code d'application est cohérent quelle que soit la base de données principale.

ORM est en effet fantastique.

J'utilise SQL Alchemy lorsque je travaille avec Python - cela fonctionne avec à peu près tous les SGBD que j'ai rencontrés.

Pour les applications légères basées sur les données sur MacOS X, j'utilise Core Data, qui dispose d'un excellent outil de modélisation de données accessible via Xcode.

Ces deux éléments montrent qu’ORM bien fait est excellent.J'ai eu moins de succès et de plaisir avec EJB.

Je ne suis pas encore entré dans le monde LINQ, mais j'aime vraiment les classes DataTable/TableAdapter que Visual Studio a créées au moyen d'un ensemble de données XSD.Au moyen de quelques glisser-clics après avoir créé mon schéma de base de données, j'ai maintenant un objet DataSet/DataTable fortement typé et j'ai des méthodes d'adaptateur qui utilisent des requêtes paramétrées sur mes procédures stockées pour toutes mes instructions CRUD.Il créera même des adaptateurs de table de requêtes pour certaines de ces procédures qui ne sont pas directement liées à une table.

Oh, et si vous n'avez pas encore créé les procédures stockées et que vous disposez uniquement des tables, l'assistant créera les procédures ou les instructions SQL ad hoc pour vous.

Cela est disponible depuis Visual Studio 2005 et a considérablement réduit mon temps de « structure » avec mes nouvelles applications Web et je peux me concentrer davantage sur la logique commerciale et de présentation.

Nous utilisons une approche mixte, en fonction de ce qui convient à la situation particulière de l'application :

  • Lors de la lecture d'une page contenant des informations à afficher et à mettre à jour par un utilisateur, nous utilisons Hibernate
  • Lors du traitement d'un lot de mises à jour ou du résumé de l'endroit où la plupart des données se trouvent déjà dans la base de données (par ex.traitement de fin de journée), nous utilisons PL/SQL (et essayons de penser en ensembles)
  • Lorsqu'un utilisateur effectue une recherche ou exécute un rapport de synthèse, nous utilisons ibatis sqlmaps pour créer du SQL et ramener uniquement les champs qui nous intéressent (pas toutes les colonnes et certainement pas les lignes enfants inutiles, urggh)
  • Tout ce qui doit vraiment être exécuté rapidement, nous utiliserons l'approche qui fonctionne le mieux.

C'est avec Java/Oracle.

Enregistrement actif, qui est un modèle documenté pour la première fois (je pense) dans Fowler's Modèles d'architecture d'entreprise.Je pense qu'il est implémenté dans des langages autres que Ruby, bien qu'il soit bien connu comme technologie de base dans Rails.Quoi qu'il en soit, c'est une abstraction soignée de la base de données, même si je dois avouer que je la trouve un peu maladroite et dans la zone find_by_sql.Mais c'est peut-être juste moi.

Mais (en enfilant le chapeau Grumpy Old Man maintenant) tous les ORM du monde ne remplacent pas une bonne connaissance de SQL, sans laquelle je n'aime vraiment pas voir l'accès à un SGBDR être autorisé du tout.

Nous utilisons Delphi et Oracle Data Access Components (ODAC) et ADO via Oracle.OleDBProvider.

La méthode préférée consiste à utiliser Smalltalk avec un référentiel d'objets GemStone.Pourquoi?Aucun problème ORM à gérer.Je n'envisagerais autre chose que si mon employeur me forçait ou me menaçait.

Ma méthode préférée est d'avoir une couche d'abstraction d'objet.Idéalement, c'est seulement endroit qui fonctionne avec SQL.Mais dans la pratique, les objets doivent parfois également effectuer des tâches SQL.Mais rien en dehors de l'objet.

Jusqu'à présent, j'ai écrit de telles couches moi-même parce que ce qui était disponible était trop compliqué, trop lent ou trop volumineux.

J'utilise JDBC simple car je développe une application basée sur les données et mon modèle de base de données est très complexe.Tout est décrit dans la base de données, même la structure des autres tables.En plus de cela, j'utilise beaucoup de procédures stockées.Par conséquent, ORM n'est pas une option pour moi.

J'aime Hiberner beaucoup :)

Je sais qu'il y a une courbe d'apprentissage, mais une fois que vous l'avez maîtrisé, c'est plutôt sympa.

Inutile de dire que j'ai hâte de mettre la main sur le nouveau Cadre d'entité dans .NET 3.5 SP1 (je sais que c'est déjà disponible, mais j'ai un peu la flemme de taper XML :) )

En C# j'adore LINQ vers SQL pour quelque chose de nouveau, mais j'aime vraiment utiliser .netTiers + Générateur CodeSmith pour obtenir une couche de données rapide et sale dans la base de données si j'utilise C# sur .NET 2.0.

Nous utilisons actuellement ODAC parler à la base de données Oracle et utiliser beaucoup de packages Oracle (PL/SQL).Le système à n niveaux est réalisé via RemObjects, ce qui signifie que notre client ne contient aucun code SQL et n'a besoin que de la possibilité d'envoyer des requêtes HTTP, donc aucune surcharge d'installation.

Tout cela est réalisé à l'aide de Borland Delphi et fonctionne depuis 2 ans dans un environnement de production.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top