gpt4 book ai didi

c# - MVC中的单一职责原则

转载 作者:太空狗 更新时间:2023-10-29 23:50:32 24 4
gpt4 key购买 nike

我有一个具有以下模式的 MVC 项目

View <-> Controller <-> Service <-> Repository/Entities <-> Database

例如,如果我的数据库中有 2 个表(客户和订单),那么我的存储库层中有 2 个类(此类与我的数据库表 1:1 映射,因为我使用的是 EF Code First):

public class Customer
{
[Key]
public int CustomerID { get; set; }
public int Name { get; set; }
//rest of columns here
}

public class Order
{
[Key]
public int OrderId { get; set; }
//rest of columns here
}

然后我有服务:

public class CustomerService : ICustomerService
{
void AddNewCustomer(Customer obj);
void GetCustomerOrders(Customer obj);
//rest of methods here
}

public class OrderService : IOrderService
{
void GetOrderById(int id);
void GetCustomerOrders(Customer obj);
//rest of methods here
}

你可能注意到我有 GetCustomerOrders .

我的问题:

  1. 在不违反单一责任原则的情况下,我应该把GetCustomerOrders放在哪里? ?在 CustomerService , OrderService ,还是两者兼而有之?

  2. 我的 Controller 中有多个服务是否违反了单一责任原则规则?例如:

     public class TransactionController : Controller
    {
    //more than 1 service inside this class
    private ICustomerService _customerService;
    private IOrderService _orderService;

    public ProjectController()
    {
    this._customerService = new CustomerService();
    this._orderService = new OrderService();
    }

    public ProjectController(CustomerService customerService, OrderService orderService)
    {
    this._customerService = customerService;
    this._orderService = orderService;
    }

    public ActionResult Index()
    {
    Return View();
    }

    public ActionResult CreateCustomer()
    {
    //rest of code here
    }

    public ActionResult CreateOrder()
    {
    //rest of code here
    }
    }
  3. 我有一堆带有臃肿 Action 方法的 Controller ,例如我的 ProductController有:

     Index
    Add
    Edit
    Delete
    Priority
    AddPriority
    EditPriority
    DeletePriority

    如果 Controller 被分割

     ProductController
    Index
    Add
    Edit
    Delete
    ProductPriorityController
    Index
    Add
    Edit
    Delete

    我看到 Microsoft 的模板项目在其 Controller 中没有超过一个 CRUD 操作(靠近底部示例)。如果我的 Controller 中有多个 CRUD 操作(最上面的例子),这是不是一个糟糕的设计?我正在考虑拆分我的 Controller,但我不希望它以后因为必须维护 50 个 Controller 而咬我的屁股。

任何帮助将不胜感激,对于糟糕的英语表示歉意。

最佳答案

  1. 我会把它放在 customerService 中,因为它取决于您传递给函数的客户
  2. 我认为 Controller 的最大服务大约是一个 Controller 中约 3/4 的服务。因此,对于您的情况,我认为这很好。
  3. Controller 不需要实现您的业务逻辑。他们只应获取数据并将其发布到正确的位置。我认为您应该创建一个管理器/服务/类来处理业务逻辑。关于您的 CRUD 操作,它应该全部在一个 Controller 中(获取/发布等)。

关于c# - MVC中的单一职责原则,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31232297/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com