Ich habe eine 3-Schicht-Architektur.Kann die Business-Schicht eines Moduls direkt auf das Repository eines anderen Moduls zugreifen?
1) C# MVC Anwendung - UI-Ebene
2) Business Layer - bestehend aus Service-Schnittstellen und deren Umsetzung und Repository-Schnittstellen
3) Data Access Layer - bestehend aus Repository Interface-Implementierung
Die Anwendung ist in verschiedene Module unterteilt. Ein Modul ist nichts anderes als eine C# -Klassenbibliothek. Jedes Modul verfügt über eine eigene Business-Schicht und Datenzugriffsebene. Es gibt eine lose Kopplung zwischen den Schichten, so dass jede Schicht nur über die Schnittstelle auf die andere zugreift. nur, um Ihnen ein Beispiel, hier ist, wie die Anwendung besteht gestapelt
// 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 {
}
Ist es OK für den User-Dienst, um direkt den Auftrag Repository zugreifen oder sollte es die Abhängigkeit von der Bestellservice haben?
Es empfiehlt sich, den Dienst anstelle des Repositorys zu verwenden, da die Dienste vor dem Ausführen eines Datenbankvorgangs eine Geschäftslogik ausführen müssen. Aber Sie müssen hier vorsichtig sein, dass beide Dienste nicht voneinander abhängig sein sollten, sonst landen Sie in einem Deadlock. –