J'ai une architecture à 3 couches.La couche de gestion métier d'un module peut-elle accéder directement au référentiel d'un autre module?
1) C# MVC Application - couche d'interface utilisateur
2) Couche d'affaires - comprenant des interfaces de service et sa mise en œuvre et les interfaces du référentiel
3) Accès aux données couche - comprenant la mise en œuvre de l'interface Repository
L'application est divisée en différents modules. Un module n'est rien d'autre qu'une bibliothèque de classe C#. Chaque module a sa propre couche de gestion et sa propre couche d'accès aux données. Il y a un faible couplage entre les couches, de sorte que chaque couche accède à l'autre par l'intermédiaire de l'interface seulement. Pour vous donner un exemple, voici comment l'application est empilé
// UI layer
public class UserController: Controller
{
IUserService userService;
IOrderService orderService;
public UserController(IUserService userService, IOrderService orderService){
this.userService = userService;
this.orderService = orderService;
}
}
//Business layer - User module
public class UserService: IUserService
{
IUserRepository userRepository;
IOrderRepository orderRepository;
public UserService(IUserRepository userRepository, IOrderRepository
orderRepository){
this.userRepository = userRepository;
//Should this be here or replaced by order service ?
this.orderRepository = orderRepository;
}
}
//Business layer - Order module
public class OrderService: IOrderService
{
IOrderRepository orderRepository;
public UserService(IOrderRepository orderRepository){
this.orderRepository= orderRepository;
}
}
//Data access layer - User module
public class UserRepository: IUserRepository {
}
//Data access layer - Order module
public class OrderRepository: IOrderRepository {
}
Est-il acceptable pour le service de l'utilisateur pour accéder directement au référentiel de commande ou devrait-elle avoir une dépendance au service de la commande seulement?
Il est recommandé d'utiliser le service plutôt que le référentiel, car les services ont une logique métier à exécuter avant d'effectuer une opération de base de données. Mais vous devez faire attention ici que les deux services ne doivent pas être dépendants l'un de l'autre, sinon vous finirez dans l'impasse. –