Quelle est la différence entre une couche de service et un référentiel? J'ai travaillé avec beaucoup d'applications de démonstration ASP.NET MVC et la plupart d'entre elles ont juste des dépôts. Et certains ont un mélange des deux. Quand utilisez-vous seulement les dépôts et quand utilisez-vous les services/ou les deux? La même chose est vraie pour les applications Web ASP.NET.Service ASP.NET et couches de référentiel
Répondre
Référentiels agissent comme passerelles vers votre stockage de données (base de données SQL, fichier xml, etc.) tandis que les services mettent généralement en œuvre de manière Les règles de gestion de données sur vos données avant d'envoyer les données à enregistrer dans la base de données via un référentiel.
considèrent cet exemple:
class UserRepository : IUserRepository
{
public void Create(User userToCreate)
{
//update tracking and save to repository
_userToCreate.DateCreated = DateTime.Now;
_dataContext.AddNew(userToCreate);
}
}
class UserService : IUserService
{
private IUserRepository _repository;
public UserService(IUserRepository repository)
{
_repository = repository;
}
public void Create(User createdByUser, User userToCreate)
{
//implement some business rules
if(!createdByUser.HasRights(UserRights.CanCreateNewUser))
throw new Exception("This user '"+createdByUser.Name+"' does not have the rights to create a new user");
//update rules auditing
_userToCreate.CreatedByUserId = createdByUser.Id;
//save entity to repository
_repository.Create(userToCreate);
}
}
Ensuite, dans votre action de contrôleur, vous utiliserez le service directement où toutes vos règles métier peuvent être appliquées. De cette façon, vous pouvez tester vos contrôleurs, règles métier (services) et persistance (référentiels) séparément/indépendamment en utilisant des mock.
public ActionResult CreateUser(User newUser)
{
if(ModelState.IsValid)
{
_userService.Create(this.CurrentUser, newUser);
if(newUser.Id > 0)
return RedirectToAction("UserCreated");
}
return View(newUser);
}
Un référentiel gère généralement uniquement l'accès aux données. Une couche de service utilisera un référentiel et appliquera toute logique métier supplémentaire. Considérez le référentiel comme une couche réutilisable qui pourrait être utilisée par tout ce qui veut accéder à vos données. Différentes applications peuvent avoir différentes règles métier (qui irait dans la couche de service), mais peuvent tous utiliser la même couche dépôt implmentation
Où placeriez-vous vos dépôts et services? Quelle est la structure de votre projet? J'ai MyProject.BusinessObjects et MyProject.DataObjects. J'ai actuellement mes dépôts dans MyProject.BusinessObjects. –
J'aime mettre mon modèle de domaine (framework framework edmx par exemple) et les classes de repository dans un projet séparé MyProject.Data. Habituellement, mes services se trouvent dans le projet MVC Web App, dans un dossier/Services (mais je ne considérerais pas forcément cela comme une meilleure pratique - juste une préférence personnelle) – kenwarner
@qntmfred: La logique métier doit être dans le même projet que MyProject .Data, sinon vous finirez par dupliquer la logique métier sur les applications Web qui s'appuient sur le projet MyProject.Data. – Alkaline
Tout comme un recueil de qntmfred réponse s'il vous plaît jeter un oeil sur les ressources suivantes:
- 1. Responsabilités des couches de service et de référentiel
- 2. référentiel de service
- 3. Redimensionnement des couches et de ses sous-couches - CoreAnimation
- 4. WPF et couches
- 5. ASP.Net Entity Framework et LINQ référentiel
- 6. ASP.NET scinder l'appartenance et utiliser le modèle de référentiel
- 7. Implémenter le service de référentiel en java
- 8. Ah devient tellement confus avec les couches de service
- 9. .NET et couches de base de données
- 10. Conception: ORM et couches application
- 11. Windsor Castle IoC: Comment Initialiser Service et couche référentiel
- 12. CGImageRef et dessin des couches
- 13. Service Web ASP.NET et adhésion
- 14. css couches de commande et d'organisation
- 15. Architecture en couches et méthodes statiques
- 16. Conseils Avec référentiel/service Design Pattern couche
- 17. architecture en couches Question
- 18. Quel est le modèle de l'architecture en couches dans asp.net?
- 19. Comment trier ce modèle de référentiel et l'architecture de site Web ASP.Net?
- 20. Fluid NHibernate et le modèle de référentiel
- 21. Référentiel, objets d'entité et objets de domaine
- 22. Validations de couches persistantes
- 23. Comment utiliser l'injection de dépendance et le modèle de référentiel avec les services Web ASP.NET?
- 24. UIImageViews - couches
- 25. Différence entre le service de fenêtre, l'application de service WCF et l'application de service Web ASP.NET?
- 26. Unité de travail et modèle de référentiel
- 27. Partage de mon référentiel (modèle de référentiel) avec d'autres projets (.NET)?
- 28. Modèle de référentiel et accès aux données
- 29. Quelle est la responsabilité de mon référentiel/service?
- 30. Modèle de référentiel et cadre d'entité
La couche de service aura-t-elle toujours un nom de méthode correspondant dans le référentiel? –
Pas nécessairement. Considérez le référentiel comme un ensemble de requêtes. Par exemple, la couche du référentiel peut avoir ** IQueryable GetUsers ** mais la couche de service peut avoir plusieurs méthodes qui utilisent uniquement cette même requête. par exemple. ** IList GetUsers (int companyId, int pageNo) **, ** utilisateur FindUser (int companyId, nom de chaîne) **, ** bool HasUsers (companyId) ** etc –
Tawani
J'aime la notion que la couche de service serait gérer la logique métier en la retirant ainsi des méthodes/contrôleurs d'actions. Merci pour les suggestions Tawani. – beaudetious