【问题标题】:.NET MVC Controller with multiple Repositories and Services?具有多个存储库和服务的 .NET MVC 控制器?
【发布时间】:2011-11-13 06:53:32
【问题描述】:

查看我的控制器(我正在使用依赖注入来管理依赖项):

public RoleController(IRoleRepository roleRepository, ISiteRepository siteRepository, IUserRepository userRepository, IDbContext dbContext)
{
    _roleRepository = roleRepository;
    _siteRepository = siteRepository;
    _userRepository = userRepository;
    _dbContext = dbContext;
}

拥有一个具有许多依赖项的类是代码异味吗?对吧?

但是,在我的示例中,我需要在 Role 中关联 UsersSites,然后我需要这些依赖项来执行此关联。

邮件列表中的一些人告诉我,依赖项过多表明可能有问题。但我认为没有其他办法。我分开了我的职责,在那种情况下我不知道如何处理?有什么问题吗?

更新:

我需要存储库和 DbContext,因为 DbContext 是我的 UnitOfWork,存储库不保存。

此示例是一个简单的 CRUD,具有一些其他功能,例如带有 GRID 的视图中的关联。

更新 2:

我正在使用我的 UI 层是 MVC 的架构。

【问题讨论】:

标签: c# .net asp.net-mvc dependency-injection domain-driven-design


【解决方案1】:

我不认为这是一件坏事,因为您使用良好的 DI 框架管理依赖项(即不使用 poor man's DI)。这样,您明确地说控制器将需要所有这些东西,因为它会。 (请注意,在您的应用程序的许多其他部分,这可能不是一个有效的参数 - 控制器在您控制和指导程序流的方式上是特殊的,所以有一个自然的解释为什么它需要查看很多应用程序的一部分...)

但是,如果您真的想在这种特定情况下限制依赖项的数量,创建一个 MembershipService 可能是有意义的,它可以完成与 UsersSitesRoles 相关的所有工作。这将依赖于这三个存储库,而您的控制器将仅依赖于成员服务。


响应您的更新:您可以将工作单元(即 db 上下文)注册为“每个 Web 请求”单例 - 这在 Castle Windsor 和许多其他 DI 框架中是可能的。然后,您可以让您的存储库依赖它并进行所有更改,并让控制器依赖它进行保存,它们都将获得由 DI 框架传递给它们的相同实例。

【讨论】:

  • 查看更新,问题是 MVC 是我的 UI 层。我收到的论点是:控制器负责响应用户的请求,原则上不应与您的域相关。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-10-25
  • 2011-11-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-06-21
相关资源
最近更新 更多