ASP.NET MVC3服务层 - 每个服务有多个存储库?

wog*_*les 6 c# design-patterns asp.net-mvc-3

假设我的数据库在orderstatus和orders之间有一对多的关系.我创建新订单的观点需要有一个ordertatuses下拉列表.

我有订单和订单状态的单独存储库以及操作订单和订单状态的单独服务.就像是:

public class OrderService : IOrderService
{
    private readonly IRepository<Order> _orderRepository; 
    public OrderService(IRepository<Order> orderRepository) {_orderRepository = orderRepository }
    public IEnumerable<Orders> GetAllOrders(){...}
}

public class OrderStatusService : IOrderStatusService
{
    private readonly IRepository<OrderStatus> _OrderStatusRepository; 
    public OrderStatusService(IRepository<OrderStatus> orderStatusRepository)  {_orderStatusRepository = orderStatusRepository }
    public IEnumerable<OrderStatus> GetAllOrderStatuses(){...}
}
Run Code Online (Sandbox Code Playgroud)

我的订单控制器有一个对OrderService的引用,有点像这样:

public class OrderController : Controller
{
 private readonly IOrderService orderService;
Run Code Online (Sandbox Code Playgroud)

从db获取orderstatuses列表的最佳方法是什么?

1)在OrderService中包含对两个存储库的引用,并包含一个将返回orderstatuses的方法.

public class OrderService : IOrderService
{
    private readonly IRepository<Order> _OrderRepository; 
    private readonly IRepository<OrderStatus> _OrderStatusRepository;  ...
Run Code Online (Sandbox Code Playgroud)

2)让控制器知道这两种服务,并使用GetOrderStatus方法获取OrderStatuses列表:

  public class OrderController : Controller
{
 private readonly IOrderService orderService;
 private readonly IOrderService orderStatusService; ...
Run Code Online (Sandbox Code Playgroud)

3)使用OrderService中的OrderStatusService获取订单状态列表,例如:

    public class OrderService : IOrderService
{
    private readonly IRepository<Order> _orderRepository; 
    private readonly IOrderService _orderService; ...
    public IEnumerable<OrderStatus> GetOrderStatuses()
    { return _orderService.GetOrderStatuses; } ...
Run Code Online (Sandbox Code Playgroud)

4)我想不出的另一种很酷的方式:)

Dan*_*anP 13

就个人而言,我会选择#1 - 将您现有的两项服务合二为一.请记住,您的服务层应该充当您的存储库等低级服务的外观.为这种方式提供两种单独的服务会使目的失败.