2009-12-03 5 views
3
  • Dans le code de la consommation? (comme un contrôleur)
  • Dans les référentiels?
  • Dans les services?

Répondre

3

Pour commencer, c'est une question assez controversée, alors vous aurez forcément beaucoup de réponses différentes. De mon point de vue, les transactions (ACID) sont une caractéristique de certains mécanismes de stockage (notamment les bases de données relationnelles), donc je considère le concept spécifique à la technologie. Avant que quiconque proteste que ce n'est un argument théorique considère qu'il existe plusieurs cas imaginables où le magasin de données (Référentiels) ne serait pas transactionnel:

  • Beaucoup entreprise à grande échelle (comme par exemple Amazon) ne pas utiliser transactions pour des raisons de performance. Au lieu de cela, ils ont une architecture qui leur permet de faire face aux défaillances
  • services de données REST
  • Double test

Puisque les modèles de domaine doivent être découplés de mises en œuvre spécifiques, je trouve logique qu'ils ne savent rien à propos des transactions. Cependant, cela signifie également que les référentiels doivent exposer des opérations de la bonne granularité pour qu'ils puissent, eux-mêmes, gérer les transactions, s'ils le désirent, et qu'une opération soit garantie de succès ou échoue dans son intégralité. En d'autres termes, les référentiels doivent gérer les transactions (le cas échéant).


Il y a cependant des situations où cela peut exiger des Référentiels d'avoir trop de connaissances du domaine, de sorte que le modèle de conception Unit of Work fournit une bonne abstraction pour les cas où vous avez vraiment besoin d'une transaction (potentiel) pour couvrir plusieurs opérations sur plusieurs référentiels différents.

+3

+1 pour les référentiels. Je suis enclin à être d'accord avec vous que les transactions sont spécifiques à la technologie. Cependant, les unités de travail sont spécifiques à l'application, alors je me demande comment vous déconnectez la technologie de vos unités de travail. Le référentiel doit-il vraiment avoir connaissance de votre domaine d'activité? –

+1

@Robert Harvey: Merci. Unité de travail est un modèle très pertinent et je ne sais pas comment j'ai réussi à l'oublier momentanément en écrivant ma réponse ... Le référentiel doit avoir une certaine connaissance du modèle de domaine sauf si vous voulez décomposer toutes les entrées et sorties en types primitifs (pas une bonne idée IMO), mais je suis d'accord que la connaissance ne devrait pas s'étendre à la logique métier. Je vais mettre à jour ma réponse. –

+0

Il semble raisonnable que dans la plupart des cas, la logique transactionnelle devrait résider dans des dépôts. Cependant, en utilisant une unité de travail, l'OMI décalerait la responsabilité d'un cran. Où le verriez-vous mieux, niveau d'application ou service? Je ne peux pas penser à une bonne raison de se porter garant de l'un ou de l'autre sans un contexte spécifique ...? – julien

Questions connexes