控制器动作命名MVC中的一致性

时间:2016-07-27 08:00:30

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

我对C#ASP.NET-MVC中的动作命名一致性感到困惑,假设我有一个带有以下层的简单应用程序:

Controller - > Service layer - > Data Access layer

数据访问层包含一个带有数据库表的1:1类。假设我有5个表UserUserAddressesOrderOrderDetailsProduct

我想将这些分组为两组:

CustomerController包含与UserUserAddresses相关的任何内容 TransactionController包含与OrderOrderDetailsProduct

相关的所有内容

我的问题通常是控制器中的动作命名方法类似于

Index  
Create  
Edit  
Delete  
etc  

所以在我的情况下,如何在CreateEdit需要单独的DeleteUserUserAddreses页面的同时保留这些命名模式}。

任何帮助将不胜感激

为糟糕的英语道歉

2 个答案:

答案 0 :(得分:2)

创建两个区域

第一个区域 - 客户
  - ControllerUser(索引,创建,编辑,删除)
  - ControllerUserAddreses(索引,创建,编辑,删除)

第二区 - 交易
 -ControllerOrder(索引,创建,编辑,删除)
 -ControllerOrderDetails(索引,创建,编辑,删除)
 -ControllerProduct(索引,创建,编辑,删除)

如果您想要索引,创建,编辑,删除等,此设计可能对您有所帮助

答案 1 :(得分:1)

您通过拥有CustomerControllerTransactionController两个不同的控制器来正确地遵循模式。

每个控制器都拥有自己的CRUD操作和视图,因此您不必担心以不同的方式命名它们。

所以你通常会得到这样的结论:

CustomerController:
            Create(UserModel theUser)
            Edit(int id, UserModel theUser)
            Delete(int id)


TransactionController:
            Create(OrderModel theOrder)
            Edit(int id, OrderModel theOrder)
            Delete(int id)

OrderDetails可以是Order的属性,因此如果每个实体以这种方式相关,则您不一定需要有一个操作方法。这同样适用于您的用户:

class UserModel
{
     public List<UserAddress> UserAddresses {get; set; }
}