2009-07-30 5 views
14

Si une page Web a besoin de certaines données, pourquoi ne pas demander à SQLDataSource d'appeler une procédure stockée? Pourquoi utiliser un ObjectDataSource pour appeler un objet métier qui appelle ensuite la procédure stockée? Je comprends que d'autres applications (disons les applications de bureau) construites sur le framework .net peuvent accéder aux objets métier, mais que se passe-t-il si l'application sera toujours uniquement une application web?SqlDataSource vs ObjectDataSource

Pour être plus clair:

Quand doit-on utiliser un SqlDataSource ou ObjectDataSource?

Comment motiver le choix?

Répondre

22

Avoir juste un SQLDataSource est parfaitement valide, que ce soit juste une démo, un prototype, ou un hack rapide. C'est rapide, c'est facile, ça fonctionne et vous donne les résultats dont vous avez besoin. Cependant, lorsqu'une application est conçue et construite pour le long terme, et anticipe que les choses (exigences, souhaits du client, éventuellement le schéma de la base de données) peuvent changer, il peut être beaucoup plus logique d'introduire un véritable " Couche métier: modélisez vos objets métier en tant qu'objets, puis fournissez un mappage de la base de données sous-jacente vers ces objets métier.

Comme le dit le dicton - vous pouvez résoudre à peu près n'importe quoi dans l'informatique par une couche supplémentaire d'indirection (ou d'abstraction) - mêmes prises ici.

SÛRE: vous pouvez aller directement à la base de données, et bien sûr, au premier abord et pour la première itération, c'est probablement (ou probablement) le moyen le plus rapide. Mais à long terme, quand une application est conçue pour durer, c'est généralement un moyen rapide, le coût de l'entretien, le coût de la maintenance, le coût et les efforts nécessaires pour changer selon vos besoins et ceux de vos clients. va grandir et assez rapidement, cette solution quick'n'dirty ne semble plus si belle, en termes d'effort. Donc, pour résumer mon point: oui, initialement, l'utilisation d'une source de données SQL directe pourrait être plus rapide et plus facile - alors utilisez-la quand c'est le point important: faire les choses pour une démonstration rapide, une preuve de ... application de style de concept. Mais à long terme, lorsque vous regardez la durée de vie d'une application, il est généralement intéressant d'investir un peu plus (conception et codage) pour ajouter cette couche d'abstraction afin que vos pages Web ne dépendent pas directement des détails de la base de données en dessous.

Marc

+0

Bien que je sois d'accord avec tous vos points et que votre réponse soit bien écrite, vos pages ne doivent plus dépendre des détails de votre base de données, mais de vos objets de gestion. Quel avantage cela apporte-t-il? –

+4

L'avantage est le suivant: si votre base de données change, mais que vos objets métier restent les mêmes, l'interface utilisateur fonctionne toujours. Si vous utilisez SqlDataSource directement, et comme beaucoup le font, utilisez un 'SELECT * FROM ....' votre code tombera probablement le deuxième un autre champ est ajouté à une table de base de données. Ce ne sera pas le cas si vous avez une couche de gestion intermédiaire. –

+1

En outre, en regroupant vos données dans des objets métier, il est beaucoup plus facile de travailler avec eux. Vous avez par exemple un objet "Client", pour lequel vous pouvez lire et écrire des propriétés telles que "CustomerID", "Nom" etc. - vous n'avez pas à gérer les intricasies des lignes et des champs de base de données et effectuer toutes les conversions Les données. –

2

Si vous avez une couche de gestion que vous utilisez dans vos projets, ObjectDataSource est le choix naturel. Cela correspond bien à de nombreux ORM, et beaucoup d'entre eux offrent des avantages supplémentaires (validation, annulation, etc.). Il vous permet également d'accéder à l'une des autres méthodes & méthodes que vous avez sur vos objets métier - pas seulement les champs SQL directs. Cela peut être très utile lors de la liaison, car il vous permet de simplement lier des propriétés dans le balisage au lieu d'avoir à écrire beaucoup de code derrière.

Si vous utilisez cette route, le fait de mélanger SQLDataSource et ObjectDataSource peut entraîner une confusion chez le développeur suivant pour récupérer votre projet. Dans ce cas, je m'en tiens à ObjectDataSource pour la cohérence du code.

Si vous n'avez pas de couche de gestion et que vous utilisez directement SQL, utilisez SQLDataSource. Ma préférence personnelle est que tout votre code SQL doit être dans une couche d'entreprise ou de données, et parce que je n'utilise presque jamais SQLDataSource.

1

si vous pouvez applay votre code de la couche d'affaires dans la procédure stockée le son mieux utiliser SQLDataSource

0

En théorie ObjectDataSource est mieux. Mais tout dépend de la qualité de l'écriture et de la documentation du modèle objet. Nous avons externalisé une entreprise qui utilisait un générateur de code personnalisé (qu'ils ne nous fourniraient pas) pour produire toutes les couches. Il s'est avéré être un cauchemar pour faire de petits changements, comme ajouter une propriété ou changer un type de champ. Je suis en train de mettre au rebut pratiquement tout ce qu'ils ont fait et en utilisant simplement les procédures stockées qu'ils ont écrites.

Mon objectif à long terme est de réécrire l'application à partir de zéro en utilisant un outil de modélisation commercial & générateur de code. Si vous allez utiliser objectdatasource, je vous recommande fortement de trouver un bon outil de modélisation qui inclut un générateur de code flexible.

Questions connexes