2009-08-06 3 views

Répondre

2

Non, IMO. En particulier, je suis tout à fait le plus pur, donc je ne pense pas que mon interface utilisateur devrait avoir quoi que ce soit à voir avec l'accès aux données. C'est le travail d'une classe de dépôt. Une classe de référentiel ne devrait pas non plus avoir de lien avec la requête http. Donc par la séparation des préoccupations, la seule réponse logique ici est "non".


Re étant cher (commentaires); il fait gains coût plus vous l'utilisez:

  • le tracker objet/identité va lentement accumuler chaque enregistrement unique, vous allez chercher
  • le tracker changement a plus de travail pour surveiller
  • vous obtenez beaucoup plus risque de périmètres obsolètes (l'obtention de données incorrectes est un coût définitif)

Et en lui permettant de vivre au-delà de la DAL, vous devez également vous soucier de l'enfilage (ceci est particulièrement vrai pour le web demandes, où vous pouvez obtenir al l trie des combinaisons intéressantes de demandes pour la même session).

LINQ-to-SQL n'offre pas beaucoup de cache; il a limité support pour court-circuiter les recherches d'identité au gestionnaire d'identité (donc si vous demandez Single(x=>x.Id == 12345), et il a vu l'enregistrement 12345, il ne frappera pas la base de données). Cependant, la plupart du temps, il va frapper la base de données. Et en ce qui concerne la base de données, l'un des coûts les plus importants est le coût des nouvelles connexions; ce qui est très efficacement atténué (pour les applications Web) par le regroupement de connexions sur SqlConnection.

+0

Alors, où voulez-vous le stocker? ouvrir/fermer par appel? – mrblah

+0

Je le ferais, oui. Si vous avez quelques opérations étroitement couplées à la couche de données, alors vous pourriez le partager ... –

+0

n'est-ce pas un objet coûteux comme l'objet de session dans nhibernate? – mrblah

Questions connexes