【问题标题】:When should I create new Controller class in Asp.net MVC (Design Question)?我应该什么时候在 Asp.net MVC 中创建新的 Controller 类(设计问题)?
【发布时间】:2010-01-17 03:31:58
【问题描述】:
在我问这个问题之前,这里是我对MVC模式控制器的理解。
- 控制器是应用层(在 DDD 中)
- 它控制应用程序流。
- 保持纤薄
- 它控制工作单元(也称为事务)
我的问题是“我应该什么时候创建新的 Controller 类?”。我以NerdDinner 中的 DinnerController 为例。
- 是晚餐模块的控制器吗? (是模块吗?IMO,模块太小了)
- 如果是,我应该为每个模块创建控制器吗?控制器会变胖吗?
- 如果不是,我应该什么时候创建新控制器?
我个人更喜欢为每个用例创建控制器类。例如 CreateDinnerControllerlr、EditDinnerController、ListDinnerController、SearchDinnerController 等。但是 IMO 也有一些缺点,例如
- 有时,它违反了 DRY 原则(它可能需要在两个地方创建相同的 ViewModel,例如 Create 和 Edit 可能有 DinnerViewModel)
- 需要明确定义路由? (我仍然更喜欢 /Dinner/Create、/Dinner/Edit/1 这样的路线)
提前致谢。
【问题讨论】:
标签:
asp.net-mvc
design-patterns
【解决方案1】:
通常的做法是创建一个与每个视图关联的控制器。当应用程序使用 Restful URL 设计时,这通常映射到索引、新建、编辑和删除操作。然后,您可以映射一个方法来处理每个操作。
http://example.com/examples/1/edit - maps to edit method on ExamplesController
http://example.com/examples/1/new - maps to new method on ExamplesController
http://example.com/examples - maps to index method on ExamplesController
http://example.com/examples/1/delete - maps to delete method on ExamplesController
http://example.com/users/1/edit - maps to edit method on UsersController
http://example.com/users/1/new - maps to new method on UsersController
http://example.com/users - maps to index method on UsersController
http://example.com/users/1/delete - maps to delete method on UsersController
【解决方案2】:
在使用 ASP.net MVC 和 rails 之后,我认为 Controller 应该创建每个 Resource(在 REST 样式的应用程序中)。