最佳实践:在 MVC 控制器中使用多个存储库是不是可以接受?

Posted

技术标签:

【中文标题】最佳实践:在 MVC 控制器中使用多个存储库是不是可以接受?【英文标题】:BestPractices: Is it acceptable to use more than one repository in a MVC-Controller?最佳实践:在 MVC 控制器中使用多个存储库是否可以接受? 【发布时间】:2011-01-20 17:28:26 【问题描述】:

我在员工和团队之间有一个多对多的关联。 Foreach 实体我有一个存储库。

现在我使用 ASP.NET MVC 并创建了一个 EmployeeController。我还创建了一个视图来编辑员工。对于这个视图,我需要一个包含所有团队的 DropDownList。问题是我的 EmployeeController 只有 EmployeeRepository。那么我怎样才能获得所有团队呢? 我现在的解决方案是使用两个存储库。

但这是一个好的解决方案吗?

我能否改为创建 TeamController 并编写一个返回所有团队的方法(我该怎么做)?

【问题讨论】:

【参考方案1】:

还可以,但是一旦觉得Controller变得太杂乱了,可以refactor its dependencies to an Aggregate Service。

【讨论】:

【参考方案2】:

想变得聪明吗?不要在控制器内部使用存储库。而是使用域服务。当您认为一个控制器集成了许多服务的工作时,这听起来并没有那么糟糕,不是吗?

【讨论】:

【参考方案3】:

通常您会为聚合根创建一个存储库。存储库将具有返回为控制器填充的实体的方法。

如果实体在您的域模型中完全不相关,您可能需要创建一个服务来包装两个独立的存储库以获取您需要的数据。

【讨论】:

谁是多对多关联中的聚合根 :)?在我的域模型中,我有一个双向的多对多关联。我问自己,当我创建一个单向关系时,我会有什么好处。雇员会比聚合根。团队与员工只有一种关系,所以我认为这可以。 同意,当遇到同样的问题时,我使用域服务来打包存储库。 我的建议是1:看看在域规则方面是否存在逻辑上的聚合根。如果没有,2:使用域服务。其他人用 + 票推荐了服务,所以这个被否决是有问题的。 没有评论的投票很糟糕> 【参考方案4】:

是的,控制器引用两个存储库是完全可以接受的。

事实上,我的控制器经常使用多个存储库。

【讨论】:

以上是关于最佳实践:在 MVC 控制器中使用多个存储库是不是可以接受?的主要内容,如果未能解决你的问题,请参考以下文章

源代码管理最佳实践 - 定期从存储库更新工作副本

存储库模式的最佳实践?

Spring MVC 领域对象处理最佳实践

如何将消息插入取决于会话值的视图。 ASP.NET MVC。最佳实践

在 ASP.NET MVC 中使用 Tempdata - 最佳实践

MVC 验证 - 使用服务层保持 DRY - 最佳实践是啥?