最好是有巨大的控制器或多个控制器,在MVC?(Better to have huge Control

2019-07-31 01:13发布

我们在ASP.NET MVC建立一个相当大的人力资源应用程序,到目前为止,我们的控制器变得相当大。 例如,我们有一个员工控制器,以及全体员工的意见都包含(个人信息,员工扣减,家属等)。 这些视图可能有多个动作或子视图(如CRUD)。 每个动作比较小,但控制器可能有几十种功能。

是否有分割控制器的最佳做法? 相反,具有数十种意见的员工控制器,它会更好,也有每个亚型(即EmployeePersonalInfoController,EmployeeDeductionController,EmployeeDependentController)一个控制器?

最后,它甚至关系呢?

更新澄清

我最初关心的是CRUD操作。 例如,让我们考虑创建和删除...

当前操作在EmployeeController:

  CreateEmployee()
  DeleteEmployee()
  CreateEmployeeDeduction()
  DeleteEmployeeDeduction()
  CreateDependent()
  DeleteDependent()
  etc.

如果控制器被分裂了:

  EmployeeController
    Create()
    Delete()
  EmployeeDeductionController
    Create()
    Delete()
  EmployeeDependentController
    Create()
    Delete()
  EmployeeBenefitController
    Create()
    Delete()
  etc.

在第一个场景中,我们〜100的屏幕得到分成8-10大控制器。 在第二个,我想大概有50〜控制器。

Answer 1:

在我的愚见,如果你保持代码在控制器下来,然后它其实并不重要。

大部分代码是在业务层发生的地方吧? 如果是这样的话,那么所有你真的在做你的控制器将数据返回到该视图。 因为它应该是。

真的不知道,如果我分离该控制器为亚型的粉丝。 虽然你应该保持关注点分离,我认为亚型会有点过分。

你可以看看这个帖子,看看是否有帮助。 同样的观点不同路径

这可能是比使用您建议一种亚型的方法更好的解决方案。



Answer 2:

部分类允许你在多个文件传播类。 这样,你可以将控制器为独立的文件的相关组领域,但他们都会依然是同一控制器的一部分。 例如

EmployeeDeductionController.cs

public partial class EmployeeController
{
    public ActionResult Deduct()
    {
    }
    // etc
}

EmployeeBenefitController.cs

public partial class EmployeeController
{
    public ActionResult GiveBenefit()
    {
    }
    // etc
}


Answer 3:

我不希望有50个控制器。 现在,我在我的应用程序有16个那种感觉OK。 如果你有50个控制器你也有意见50个顶层文件夹。 这将是很难找到你需要的工作的视图和控制器。 正如其他人所提到的行为通常是短,它不是不好有几个人在你的控制器。

我想有1个控制器通过系统的一部分。 我定义采取我的数据库架构和周围绘制属于一起的表行的系统的一部分。



Answer 4:

为什么不将它们分组?

有一个结构类似,

employee/payroll/
    employee/payroll/giveraise
    employee/payroll/manage401k

employee/general/
    employee/general/address
    employee/general/emergencycontact

现在你可以有一个工资控制器处理工资单相关的操作和处理雇员的定期细节一般控制器。



Answer 5:

我们一直在使用另一种方法是有一个ControllerBase保持横切关注点在一个共同的地方CRUD操作。 该控制器声明常用的操作,包括特定实体的东西扩展点。 我们有太多的重复代码没有这样的事情。

然后,你继承该控制器和每个实体创建一个。 是的,有很多的控制器,但有这么多的屏幕,我不认为这将成为主要的问题。

大多数的行动接受一个复杂的模型,我们用模型粘合剂然后播放从控制器除去杂波。 你可以看到有关好的帖子在这里 。

然后,使用领域,如@Odd建议是一个好主意,至少是因为当你有很多他们的是一个烂摊子分离的意见。

希望ASP.NET MVC V2将带给我们不同的组件领域和封装意见(实际上是可以做的,现在延长的VirtualPathProvider类)。



Answer 6:

控制器是为了成为下一个上下文行动容器。 IE客户控制器将有行动有关控制客户。 这是特别适合于CRUD。 我会去与这个原因较少的更大的控制器。 这就是说,它是真的取决于你的应用程序架构师,以选择最适合你的代码,只是因为它是更常见的做这件事并不意味着你得的方式。

如果你有大量的代码,我建议你看看ASP.NET MVC的区域。 你可以找到优秀的帖子关于它在这里,在斯科特谷的博客和史蒂夫·桑德森的博客在这里 。 如果你有这么多的控​​制器,它可能是适合你的。

刚吃过后重新阅读您的文章一想,我怀疑你的例子不来接近你在你的代码有并发症的水平。 也许它可以帮助你张贴在你不能确定它是否是一个好主意,分裂控制器是更具体的情况(少眉头,因为CRUD是相当直截了当)。



Answer 7:

我会组织控制器大致围绕用例和他们的逻辑分组。 例如,如果您有多个行政/人力资源类的用例,其很可能是可用的人一组有限的,那些捆绑在一个控制器。 其它控制器可以围绕特定的域模型对象组织 - 如自助服务休假管理,薪资查询等,有没有硬性规定,你必须创建没有把太多的责任到一个单一的控制器对的公共重用之间的平衡内部结构。

也请记住,尽可能你不应该在你的控制器的核心业务逻辑。 他们真的实现前端的行为而真正的系统规则应该在你的域模型和业务层。 只要你把事情大致内正确的层和合理分离,你不能去太远错你如何把你的控制器中的各个操作。



文章来源: Better to have huge Controllers, or many controllers, in MVC?