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

标签 c# design-patterns asp.net-mvc-3

假设我的数据库中订单状态和订单之间存在一对多关系。我创建新订单的 View 需要有一个订单状态下拉列表。

我有单独的订单和订单状态存储库,以及处理订单和订单状态的单独服务。像这样的东西:

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(){...}
}

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

public class OrderController : Controller
{
 private readonly IOrderService orderService;

从数据库中获取订单状态列表的最佳方法是什么?

1) 在 OrderService 中包含对两个存储库的引用,并包含一个将返回订单状态的方法。

public class OrderService : IOrderService
{
    private readonly IRepository<Order> _OrderRepository; 
    private readonly IRepository<OrderStatus> _OrderStatusRepository;  ...

2) 让 Controller 知道这两个服务并使用 GetOrderStatus 方法获取 OrderStatuses 列表:

  public class OrderController : Controller
{
 private readonly IOrderService orderService;
 private readonly IOrderService orderStatusService; ...

3) 使用 OrderService 中的 OrderStatusService 获取订单状态列表,类似于:

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

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

最佳答案

就我个人而言,我会选择您的选项 #1 - 将您现有的两项服务合二为一。请记住,您的服务层应该充当 facade。在较低级别的服务上,例如您的存储库。为这种情况提供两个独立的服务达不到目的。

关于c# - ASP.NET MVC3 服务层 - 每个服务有多个存储库?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6304787/

相关文章:

c# - 工作单元类如何知道在提交时调用哪个存储库?

asp.net-mvc-3 - 在所有 View 中共享布局内的下拉列表的方法是什么?

c# - mvc3 Razor 中的复选框列表示例,

c# - Nuget 错误 : Failed to add reference to System.Net.Http

c# - 刷新 Windows 窗体应用程序

c# - C#中获取属性setter的方法名

asp.net-mvc - 为 FileResult 设置 ETag - MVC 3

c# - 即使分配了 null,sql 也不会返回值

java - Joshua Bloch 构建器模式 - 关注线程安全时的好主意?

c++ - 如何设计好的平台抽象层?