Quelle est la différence entre la couche D'Abstraction de base de données et la couche D'accès aux données?
Je suis en fait coincé dans une structure à 3 niveaux. J'ai surfé sur internet et trouvé deux terminologies "couche D'Abstraction de base de données" et "couche D'accès aux données".
Quelles sont les différences entre les deux?
3 réponses
Ma compréhension est qu'une couche d'accès aux données n'abstrait pas réellement la base de données, mais facilite plutôt les opérations de base de données et la construction de requêtes.
Par exemple, les couches d'accès aux données ont généralement des API très similaires à la syntaxe SQL qui nécessitent toujours la connaissance de la structure de la base de données pour écrire:
$Users->select('name,email,datejoined')->where('rank > 0')->limit(10);
Les couches d'abstraction de données sont généralement des ORM complets (mappeurs objet-relationnels) qui empêchent théoriquement la nécessité de comprendre toute base de données sous-jacente structure ou avoir une connaissance de SQL. La syntaxe pourrait être quelque chose comme ceci:
Factory::find('Users', 10)->filter('rank > 0');
Et tous les objets peuvent être entièrement remplis avec tous les champs, éventuellement joints avec des objets parents ou enfants si vous le Définissez de cette façon.
Cependant, cette abstraction a un prix. Personnellement, je trouve que la doctrine ou propel D'ORM est inutile et inefficace. Dans la plupart des cas, une simple couche d'accès aux données fera l'affaire, avec SQL manuel pour tout ce qui nécessite une attention particulière, au lieu d'avoir à détruire les performances de votre application pour un peu de sucre syntaxique. Ce domaine est un débat assez houleux, donc je ne vais pas y aller plus.
Si vous vouliez dire data base couche d'abstraction, alors ce serait quelque chose comme PDO, de sorte que votre code puisse être utilisé pour un plus grand nombre de fournisseurs de bases de données. PDO fonctionne avec MySQL, PostgreSQL et mysqli entre autres, je crois.
Couche D'accès aux données = Créer, Lire, mettre à jour, Supprimer (CRUD) des opérations spécifiques à votre domaine d'application
Data Abstraction Layer = effectue des opérations de base de données génériques telles que des connexions, des commandes, des paramètres vous isolant des bibliothèques de données spécifiques au fournisseur et fournissant une api de haut niveau pour accéder aux données, que vous utilisiez MySQL, Microsoft SQL Server, Oracle, DB2, etc...
Du Wiki:
Une couche d'accès aux données (DAL) dans un logiciel informatique, est une couche programme informatique qui fournit un accès simplifié aux données stockées dans stockage persistant de quelque sorte, comme une entité-relationnelle la base de données.
Par exemple, le DAL peut renvoyer une référence à un objet (en termes de programmation orientée objet) avec ses attributs à la place d'une ligne de champs à partir d'une table de base de données. Cela permet le client (ou Utilisateur) des modules à créer avec un niveau d'abstraction plus élevé. Ce type de modèle pourrait être mis en œuvre en créant une classe d'accès aux données méthodes qui référencent directement un ensemble correspondant de base de données stockée procédure. Une autre implémentation pourrait potentiellement récupérer ou écrire enregistre vers ou depuis un système de fichiers. Le DAL cache cette complexité du magasin de données sous-jacent du monde extérieur.
Par exemple, au lieu d'utiliser des commandes telles que insert, supprimer, et mise à jour pour accéder à une table spécifique dans une base de données, une classe et quelques des procédures stockées pourraient être créées dans la base de données. Procédure serait appelé à partir d'une méthode à l'intérieur de la classe, qui retournerait un objet contenant les valeurs. Ou, Insérer, Supprimer et les commandes de mise à jour peuvent être exécutées dans des fonctions simples comme registeruser ou loginuser stockés dans la couche d'accès aux données.
En bref, votre CRUD de base fonctionnalités / logiques sur les objets métier à pousser / tirer de Persistance / couche de stockage tombe ici. Pour la plupart des cas, vous voudrez peut-être juste cela. mappage ORM, interfaces des objets métier du modèle etc tombent ici.
Couche D'Abstraction De Base De Données
Une couche d'abstraction de base de données est une interface de programmation d'application qui unifie la communication entre une application informatique et bases de données telles que SQL Server, DB2, MySQL, PostgreSQL, Oracle ou SQLite. Traditionnellement, tous les fournisseurs de bases de données fournissent leur propre interface adaptée à leurs produits ce qui laisse à la programmeur d'application pour implémenter le code pour toutes les interfaces de base de données il ou elle souhaite soutenir. Les couches d'abstraction de base de données réduisent la quantité de travail en fournissant une API cohérente au développeur et masquer les spécificités de la base de données derrière cette interface autant que possible. Il existe de nombreuses couches d'abstraction avec différentes interfaces de nombreux langages de programmation.
Fondamentalement, c'est une couche supplémentaire d'abstraction de sorte que vous CRUD contre les interfaces indépendantes des fournisseurs et vous inquiétez moins des détails d'implémentation de divers fournisseurs de bases de données. Vous n'en aurez besoin que si vous souhaitez prendre en charge plus d'une base de données. ORMs, micro ORMs, wrappers, classes de pilotes génériques, quel que soit le nom, etc qui traite de l'établissement de la connexion, de la gestion des paramètres, de l'exécution, etc. C'est juste une couche supplémentaire juste avant la couche Persistance / stockage. Dans la terminologie de niveau 3, ces deux couches tombent sous un car elles ne sont pas logiquement séparées.
Pour résumer, DAL est sur les données, DbAL est sur la base de données. Dal définit les opérations, DBAL fonctionne. DAL se trouve derrière DbAL qui est juste derrière DB réelle. DAL appels DbAL. DAL est une bonne chose pour séparer les logiques métier (dans le modèle) des logiques CRUD, alors que DbAL est rarement nécessaire (mais j'aime ça). DAL est plus haut niveau conception mapping, DbAL est plus bas niveau d'architecture et de mise en œuvre. Sépare les responsabilités. Les ORM sont des structures massives qui font les deux pour vous. Je ne sais pas comment vous les séparez lors de l'utilisation des ORM. Vous n'avez pas besoin depuis ORMs gérer tout cela pour vous. Idéalement, j'aurais de toute façon DAL dans un projet, et DbAL dans un autre que j'appellerais simplement couche de persistance car il ne sert à rien de séparer Db et opérations dessus.