1

Je suis en train de lire "Pro ASP.NET MVC Framework" de Sanderson. Je suis un peu confus avec l'implémentation du découplage. Il utilise LinqToSql dans l'exemple de code et le modèle de référentiel pour interagir avec la base de données.développement à couplage lâche

[Table(Name = "Products")] 
public class Product 
{ 
[Column(IsPrimaryKey = true, IsDbGenerated = true, AutoSync=AutoSync.OnInsert)] 
public int ProductID { get; set; } 
[Column] 
public string Name { get; set; } 
[Column] 
public string Description { get; set; } 
[Column] 
public decimal Price { get; set; } 
[Column] 
public string Category { get; set; } 
} 

public class SqlProductsRepository : IProductsRepository 
{ 
private Table<Product> productsTable; 
public SqlProductsRepository(string connectionString) 
{ 
    productsTable = (new DataContext(connectionString)).GetTable<Product>(); 
} 
public IQueryable<Product> Products 
{ 
    get { return productsTable; } 
} 
} 

SqlProductsRepository est ici dataLayer car il interagit avec la base de données. 1. Cependant, il est situé dans le projet DomainModel. Peut-être que c'est juste pour la démo? Alors où est la logique de domaine ici?

2. Je ne peux pas voir le découplage complet lorsque la propriété Products renvoie IQueryable. Est-il supposé que si nous changeons un composant, il doit contenir la classe Product? Il me semble qu'il est nécessaire d'avoir un autre projet avec des abstractions: Interfaces de référentiel telles que les interfaces IProductRepository et MappingClasses telles que IProduct. Le composant DataLayer doit implémenter ces abastractions. Est-ce vrai?

Peut-être qu'il est difficile de l'expliquer rapidement, mais comment cela fonctionne habituellement dans les projets en direct?

Répondre

2
  1. à mon humble avis, cela doit avoir été à des fins de démonstration car il n'a pas de sens (dans les environnements réels du monde) pour séparer votre architecture en couches et garder ces différentes couches en une seule dll. Je viens de trouver une raison valable. Que faire si vous souhaitez que plusieurs applications utilisent votre couche de gestion sans accès immédiat à la couche de données. Vous devriez examiner attentivement les modificateurs d'accès à votre datalayer, mais ce serait possible. Si vous devez exposer des objets IQueryable à partir de votre datalayer, c'est une discussion qui se poursuit depuis l'invention du modèle de référentiel. Et il y a beaucoup de ressources à trouver à ce sujet.

Pour énumérer quelques:

+0

Hmm, désolé, votre réponse pour le premier point n'est pas claire. La question est de savoir si SqlProductsRepository doit être situé dans DAL ou DomainModel. Merci de répondre. – Danil

+0

Eh bien, le modèle de dépôt est pour la plupart juste une façon standard d'implémenter votre DAL. Donc, votre SqlProductsRepository appartient à la DAL. Je pensais que c'était clair à l'avance. – Peter

Questions connexes