1

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

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

该过程可能会有所不同,但是否有任何最佳实践?

4

2 回答 2

2

这实际上取决于您如何构建屏幕。

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

如果您使用的是 MVC3,那么我会将这些方法添加到 Contact 控制器中。

编辑:

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

于 2013-03-05T08:18:05.000 回答
1

这实际上取决于活动和联系人是否可以相互分离,或者是否必须将它们视为一个。您通常希望遵循单一职责原则。基本上,你的控制器应该有一个职责,每个动作都应该做一个特定的操作。例如,您可能有ContactsController. 控制器有一项职责,即操作一种类型的对象,在本例中为联系人。作为此操作的一部分,您将拥有通过让每个操作执行某些 CRUD 操作来适应此操作的操作。

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

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

于 2013-03-05T08:28:15.023 回答