У меня трехслойная архитектура.
1) Приложение С# MVC — уровень пользовательского интерфейса
2) Бизнес-уровень, состоящий из сервисных интерфейсов и интерфейсов его реализации и репозитория.
3) Уровень доступа к данным — состоит из реализации интерфейса репозитория.
Приложение разделено на разные модули. Модуль — это не что иное, как библиотека классов C#. Каждый модуль имеет собственный бизнес-уровень и уровень доступа к данным. Между уровнями существует слабая связь, поэтому каждый уровень получает доступ к другому только через интерфейс. В качестве примера, вот как устроено приложение.
// 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 {
}
Можно ли службе User напрямую обращаться к репозиторию Order или она должна зависеть только от службы Order?