一个模块的业务层可以直接访问另一个模块的存储库吗?

时间:2017-04-08 13:52:58

标签: c# asp.net-mvc repository business-logic-layer

我有3层架构。

1)C#MVC应用程序 - UI层

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 {
}

用户服务可以直接访问订单存储库,还是仅依赖订单服务?

1 个答案:

答案 0 :(得分:2)

您正在访问IOrderRepository中的UserService。您的问题是这是否是正确的方法,或者只能访问IUserRepository并致电OrderService而不是IOrderRepository

IMO,任何服务都可以根据需要调用任何存储库。服务和存储库之间没有1 <-> 1关系。

存储库为您提供数据访问权限。如果在多个服务中需要此类访问,则多个服务可以使用相同的存储库。这看起来非常干净且可以解释。