EF Core、服务和存储库模式

EF Core, Service and Repository patterns

为了了解模式,我正在使用这些项目创建我的 Web API: 实体、存储库、服务和 API 应用程序。

APIs 中的每个控制器都对其相应的服务使用依赖注入;每个服务使用 DI 到多个存储库;存储库用于从 DbContext 获取数据,实体包含 DbContext 和 DbSets。

例如,当我调用 /teams/1 端点时:

这是管理流程的正确方法吗?

此外,假设控制器必须检索团队及其所有比赛:注入 CompetitionRepository 并从 TeamService 中使用它是否正确?类似于:

TeamService.cs

return new DTOObject {
    team = _teamRepo.GetTeam(id),
    competitions = _compRepo.GetCompsByTeam(id) <-- is a list
}

我更喜欢 return 我服务中的实体而不是 DTO。原因是有时服务调用的结果用于创建 ASP.NET MVC 视图模型,有时用于 return 作为 JSON 的 DTO。有时对这些 DTO 的要求是不同的,服务器端 ViewModels 可以看到不应该暴露给客户端的东西。你可以在你的服务层创建一个 DTO,但在大多数情况下,它只是你必须处理的另一个映射,没有那么大的价值。这就是我直接从控制器中的实体创建 DTO 或 ViewModel 的原因。

此外,存储库模式几乎没有用。如果您更改数据存储,这可能会有用,但实际上这些类型的更改伴随着对业务逻辑的许多其他更改,因此您的大部分服务层无论如何都会被重写,因此价值会丢失。