如何在ASP.NET MVC中组织控制器

时间:2013-03-05 08:11:23

标签: asp.net-mvc

我有一个关于如何在ASP.NET MVC中组织控制器的问题。 例如,假设您有一个用于Contacts的数据库表和一个用于Activities的数据库表。 活动表具有ContactId的外键,因此您必须向现有联系人添加活动。

现在在ASP.NET MVC中。 Contact控制器是否也应该处理活动动作? 或者我应该创建一个ActivityController并在此处添加,编辑,删除?

这个过程可能会有所不同,但有没有最佳做法?

2 个答案:

答案 0 :(得分:2)

这完全取决于你如何构建屏幕。

我不知道您是如何构建屏幕的,但我说我有一个编辑联系页面,该页面的一部分显示了活动列表,然后允许您添加/编辑/删除活动。我会使用Ajax来处理它,然后创建一个Activity WebApi控制器(如果你使用的是MVC4)来处理Ajax调用。

如果您正在使用MVC3,那么我会将方法添加到Contact控制器。

编辑:

为了支持@Husein,他比我更好地展示了他的案例 - 肯定是关于你想如何处理对象图。我上面的描述假设您不是孤立地处理活动 - 它们仅作为Contact对象的一部分处理。

答案 1 :(得分:1)

这取决于活动和联系人是否可以彼此分离,还是必须将它们视为一个。您通常希望遵循单一责任原则。基本上,您的控制器应该有一个任务,每个操作应该执行一个特定的操作。例如,您可能有ContactsController。控制器有一个责任,即在这种情况下操纵一种类型的对象,即联系人。作为此操作的一部分,您将通过让每个人执行某些CRUD操作来完成此操作。

另一方面,每个Activities都有Contact。您打算如何处理活动以及您打算如何对待它们完全取决于您。是否有必要列出每个联系人的每个注册活动?如果是,则将其实现为具有自己的CRUD操作的ActivitiesController。此控制器中的某些操作将接收联系人ID,以帮助分配联系活动等。

如果上一个问题的答案是否定的,并且您不需要将活动视为一个单独的过程,那么请参阅以某种方式将其整合到联系人中,但说实话,我仍然会继续将两者分开。如果需求发生变化并且您意识到活动必须是一个单独的过程,请考虑未来。如果你紧密地集成了两个模型,你将很难将它们分开(好吧,可能不是那么难,但它会是颈部疼痛)。如果你现在将它们分开,从长远来看它将更容易维护它们。除此之外,将两者分开将有助于您创建更轻量级的控制器。