一个模块的业务层可以直接访问另一个模块的仓库吗?
Can business layer of one module directly access repository of another module?
我有一个 3 层架构。
1) C# MVC 应用程序 - UI 层
2) 业务层 - 由服务接口及其实现和存储库接口组成
3) 数据访问层——由 Repository 接口实现组成
应用程序分为不同的模块。模块不过是一个 C# class 库。每个模块都有自己的业务层和数据访问层。层与层之间存在松散耦合,因此每一层仅通过接口访问另一层。举个例子,下面是应用程序的堆叠方式
// 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 {
}
用户服务是否可以直接访问订单存储库,还是应该仅依赖于订单服务?
您正在 UserService
中访问 IOrderRepository
。你的问题是这是否是正确的方法,或者它应该只访问 IUserRepository
并调用 OrderService
而不是 IOrderRepository
.
IMO,任何服务都可以根据需要调用任何存储库。 Service 和 Repository 之间没有 1 <-> 1
关系。
存储库为您提供访问数据的途径。如果在多个服务中需要这样的访问,那么多个服务可以使用同一个存储库。这看起来非常干净且易于解释。
我有一个 3 层架构。
1) C# MVC 应用程序 - UI 层
2) 业务层 - 由服务接口及其实现和存储库接口组成
3) 数据访问层——由 Repository 接口实现组成
应用程序分为不同的模块。模块不过是一个 C# class 库。每个模块都有自己的业务层和数据访问层。层与层之间存在松散耦合,因此每一层仅通过接口访问另一层。举个例子,下面是应用程序的堆叠方式
// 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 {
}
用户服务是否可以直接访问订单存储库,还是应该仅依赖于订单服务?
您正在 UserService
中访问 IOrderRepository
。你的问题是这是否是正确的方法,或者它应该只访问 IUserRepository
并调用 OrderService
而不是 IOrderRepository
.
IMO,任何服务都可以根据需要调用任何存储库。 Service 和 Repository 之间没有 1 <-> 1
关系。
存储库为您提供访问数据的途径。如果在多个服务中需要这样的访问,那么多个服务可以使用同一个存储库。这看起来非常干净且易于解释。