2 votes

Linq to SQL & Castle IoC Container sanity check please

Je viens de commencer à utiliser Linq to SQL et le conteneur IoC Windsor Castle pour une nouvelle application web et, bien que les choses semblent fonctionner correctement dans les tests préliminaires, j'aurais vraiment besoin d'un contrôle de santé.

Je rencontrais des problèmes lorsque j'essayais d'extraire des objets de la base de données à l'aide de Linq dans différentes parties de l'application, puis de les mettre à jour dans la base de données. Comme ils provenaient de contextes de données différents, je ne pouvais pas enregistrer les modifications.

J'ai donc créé un datacontext unique utilisé dans l'ensemble de l'application - avec un peu de chance, sur la base d'une requête web. - Est-ce une façon raisonnable de résoudre le problème ?

Il se présente comme suit :

public class DataContextAccessor : IDataContextAccessor
{
    private readonly DataContext dataContext;
    public DataContextAccessor(string connString)
    {
        dataContext = new DataContext(connString);
    }
    public DataContext DataContext { get { return dataContext; } }
}

J'ai utilisé Castle pour instiller cette idée comme suit :

  <component id="DataContextAccessor" service="DomainModel.Repositories.IDataContextAccessor, DomainModel"
                      type="DomainModel.Repositories.DataContextAccessor, DomainModel" lifestyle="PerWebRequest">
  </component>

Ainsi, lorsque je veux accéder à la base de données dans une classe, il me suffit de déclarer IDataContext datacontext dans mon constructeur.

  • Cela créera-t-il (comme je l'espère) un contexte de données unique pour chaque requête web - et ne me posera-t-il pas de problèmes de course lorsque de nombreuses requêtes arrivent en même temps ?

1voto

Suici Doga Points 141

Le problème que je vois ici est que votre interface IDataContextAccessor expose la propriété DataContext comme ceci :

public interface IDataContextAccessor{
  DataContext DataContext{get;}
}

Le problème est que vous avez étroitement couplé votre interface au DataContext créé par linq, ce qui signifie que le mocking et les tests unitaires seront presque impossibles.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X