Unité de travail - Quelle est la meilleure approche pour le stockage temporaire d'objets sur une batterie de serveurs Web?

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

  •  19-09-2019
  •  | 
  •  

Question

J'ai besoin de concevoir et de mettre en œuvre quelque chose de semblable à ce qui appelle Martin Fowler le modèle « unité de travail ». Je l'ai entendu d'autres se réfèrent à lui comme un modèle « Shopping Cart », mais je ne suis pas convaincu les besoins sont les mêmes.

Le problème spécifique est que les utilisateurs (et notre équipe d'assurance-chômage) veulent être en mesure de créer et assigner des objets enfants (avec des contraintes d'intégrité référentielle dans la base de données) avant que l'objet parent est créé. J'ai rencontré un autre de nos designers aujourd'hui et nous sommes arrivés avec deux approches alternatives.

a) Tout d'abord, créez un objet parent factice dans la base de données, puis créer des enfants fictifs et missions fictives. Nous pourrions utiliser des clés négatives (nos clés normales sont toutes positives) de faire la distinction entre les moutons et les chèvres dans la base de données. Ensuite, lorsque l'utilisateur soumet toute transaction que nous devons mettre à jour les données et obtenir les vraies clés ajoutés et alignés.

Je vois plusieurs inconvénients à celui-ci.

  • Il provoque des perturbations aux indices.
  • Nous avons encore besoin de trouver quelque chose pour satisfaire aux contraintes uniques sur les colonnes qui les ont.
  • Nous devons modifier beaucoup de SQL et le code existant qui génère SQL pour ajouter encore un autre attribut à un grand nombre de clauses WHERE.
  • Modifier les clés primaires Oracle peut être fait, mais son défi.

b) Créer des tables transitoires pour les objets et les affectations qui doivent être en mesure de participer à ces opérations de cession temporaire. Lorsque l'utilisateur clique sur Envoyer, nous générons les entrées réelles et purger l'ancienne.

Je pense que cela est plus propre que la première alternative, mais comporte encore des niveaux accrus d'activité de base de données.

Les deux méthodes exigent que d'avoir un moyen d'expirer les données transitoires si la session est perdue avant que l'utilisateur exécute soumettre ou annuler les demandes.

Quelqu'un at-il résolu ce problème d'une manière différente?

Merci d'avance pour votre aide.

Était-ce utile?

La solution

Je ne comprends pas pourquoi ces objets doivent être créés dans la base de données avant que la transaction est validée, donc vous pourriez vouloir clarifier avec votre équipe de l'interface utilisateur avant de procéder à une solution. Vous pouvez constater que tout ce qu'ils veulent faire est de lire l'information enregistrée précédemment par l'utilisateur sur une autre page.

Donc, en supposant que les objets ne doivent pas être stockés dans la base de données avant que le plan de commettre, je vous donne C:

objets métier initialisé Stockez dans la session. Vous pouvez alors créer tous les enfants que vous voulez, et seulement toucher la base de données (et mettre en place des références) quand doit être engagé la transaction. Si les données de session va être grande (individuellement ou collectivement), stocker les informations de session dans la base de données (vous pouvez déjà faire cela).

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