37 votes

Où est la ligne entre DAL et ORM?

Les termes sont souvent jetés autour de façon interchangeable, et il y a clairement un chevauchement considérable, mais tout aussi souvent, il semble implicite que les gens voient quelque chose de fortement impliqué en disant qu'un système est un ORM qui n'est pas impliquée par une DAL. Qu'est-ce que cela? Quels sont les points clés qui différencient ces types de système?

Par exemple, disons que j'ai un code qui implémente la Base de données, la Table, la Colonne et la Rangée de classes, de les remplir par l'analyse automatique d'une base de données existante, permettant simplifié d'interaction et ainsi de suite. Il comprend, applique, et tire parti des relations structurelles entre les entités de base de données, tels que les clés étrangères. Tous les modèles d'entité peut être sous-classé à la table de chargement de fonctionnalités spécifiques sur eux.

Dans quelle mesure est-ce un DAL? Dans quelle mesure est-il un ORM? Pourquoi?

52voto

Steven A. Lowe Points 40596

ORM = mappage objet-relationnel

Dans un ORM, les classes / objets de l'application sont mappés sur des tables de base de données et des opérations de persistance, parfois de manière automatique.

DAL = couche d'accès aux données

Dans un DAL, les opérations de base de données sont cachées derrière une façade de code.

Un ORM est une sorte de DAL, mais tous les DAL ne sont pas des ORM.

7voto

matt b Points 73770

Je pense qu'un ORM est capable de mapper n'importe quel ensemble d'objets vers une base de données relationnelle; alors qu'un DAL est spécifique à votre application et ne pourrait probablement pas être naturellement étendu pour prendre en charge d'autres objets.

De plus, un ORM concerne spécifiquement le mappage de classes vers / à partir des entités de base de données, alors qu'un DAL peut simplement être un moyen d'accéder aux données d'une base de données, sans aucun mappage.

5voto

Ty. Points 2435

Tout orienté objet DAL de connexion à un système de stockage qui n'est pas de sauver des objets met en œuvre un ORM. La moraine d'oak ridges, on entend généralement quelque chose comme Hibernate, mais la chose la plus importante est le traitement des asymétries d'impédance.

[Étendu]

Au niveau des données, un défaut d'adaptation d'impédance se produire lorsque vous êtes à la cartographie des données d'un type (relationnel) dans les données de l'autre (OO).

Par exemple, combien de fois avez-vous vu une ligne comme ci-dessous dans votre DAL?

db.AddInParameter(dbCommand, "Name", DbType.String, name);

Côté ou de l'autre

customerId = Convert.ToInt64(dr["CustomerID"].ToString());

De nombreuses questions nous viennent quand le mappage des types de données primitifs.

Au niveau de l'objet, votre DAL devrait être de retour les structures que vous souhaitez utiliser. Être une sorte d'objet métier ou juste un tas de données brutes. Votre propre DAL et de l'ORM besoin pour gérer cela.

Au niveau de la conception, les objets que vous construisez sont le reflet de vos données stockées. Donc une différence structurelle peut se produire. Ce sont également pris en charge pour vous au sein de l'ORM solutions, mais vous seriez obligé de faire de même à l'intérieur d'un DAL. Par exemple, au sein de votre OO code, il serait bien de mettre en œuvre correcte de l'héritage, mais qui n'est pas secrète facilement en quelque chose de relationnel.

Je voulais juste faire remarquer que l'ORM est un terme inventé pour pousser les produits qui permettent d'automatiser beaucoup de ce que vous devriez déjà avoir à faire à l'intérieur de votre DAL. L'ORM solutions va rendre la vie plus facile et de fournir un grand nombre de la qualité/performance. Mais cela ne change pas le fait que l'un des principaux composants de votre DAL est la création de vos propres ORM.

3voto

Hector Sosa Jr Points 3422

ORM n'existait pas quand j'ai commencé à programmer. Lorsque les premiers ORM sont sortis, ils constituaient des outils externes utilisés pour créer le DAL. De nos jours, DAL et ORM se sont mêlés. C'est pourquoi beaucoup de développeurs utilisent les termes de manière interchangeable.

NHibernate est l'exemple le plus connu d'un ORM fonctionnant comme un DAL. Subsonic et CSLA.NET sont d’autres exemples. Ce sont tous des outils .NET. IIRC, les outils ORM ont débuté dans le monde Java. D'autres piles de technologies ont ensuite copié ce que Java a fait.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X