2009-01-20 8 views
2

J'ai remarqué dans la plupart des applications Web qu'à chaque fois qu'une transaction est impliquée dans un train de pages, la gestion des transactions se produit dans la couche de base de données. Dans une application Web où de nombreux utilisateurs peuvent exécuter de telles transactions, le traitement de toutes les transactions peut être critique. Je suis d'accord sur le fait que la couche base de données est très efficace pour ce faire et fournit un certain nombre de fonctionnalités pour le faire efficacement.Gestion des transactions dans les applications Web

Ma question est de savoir si une application web est construite sur une base de données qui ne supporte pas la gestion des transactions, y a-t-il un moyen de gérer ces transactions dans les autres couches?

Répondre

2

Une base de données qui ne gère pas les transactions? Mieux vaut avoir une nouvelle base de données.

Je ne suis pas d'accord - les transactions sont et non traitées dans la couche de persistance. Je pense qu'ils appartiennent correctement à la couche de service, car les méthodes de service correspondent à des unités de travail et à des cas d'utilisation. Un seul appel de service peut impliquer plus d'une base de données et d'un objet de modèle, de sorte que tous doivent être une seule unité de travail ACID. Ce n'est pas possible si la couche de persistance gère les transactions.

Un design comme celui-ci peut gérer des transactions même si la base de données ne les supporte pas. Le service peut mettre en œuvre des appels de compensation en cas d'annulation. Cela n'est pas possible si vous insérez cette logique dans le niveau de persistance. À mon avis, vous devez avoir une interface de service distincte entre le Web et les niveaux de persistance. Le niveau Web traite uniquement les requêtes HTTP, le routage vers les services et la formulation des réponses à renvoyer. Les services font le travail.

Les services peuvent être des services Web, si vous choisissez de les déployer de cette manière, mais il existe de nombreux choix de déploiement. Le niveau de service distinct est indépendant de ces choix.

Questions connexes