只需了解模式,我将通过以下项目创建Web API: 实体,存储库,服务和API应用程序。
API中的每个控制器都将依赖项注入用于其相应的服务;每个服务使用DI到多个存储库;存储库用于从DbContext获取数据,实体包含DbContext和DbSet。
举例来说,当我调用/ teams / 1端点时:
GetTeam(id)
中的_teamService.GetTeam(id);
函数_teamRepository.GetTeam(id);
Context.Team.First(...)
进行LINQ调用,以将服务返回给团队实体模型; 这是管理流程的正确方法吗?
此外,假设控制器必须检索团队及其所有比赛:注入CompetitionRepository并从TeamService中使用它是否正确?像这样:
TeamService.cs
return new DTOObject {
team = _teamRepo.GetTeam(id),
competitions = _compRepo.GetCompsByTeam(id) <-- is a list
}
答案 0 :(得分:1)
我更喜欢从我的服务而不是DTO中返回实体。原因是有时使用服务调用的结果来创建ASP.NET MVC视图模型,有时使用DTO作为JSON返回。有时,这些DTO的要求不同,服务器端ViewModel可以看到不应暴露给客户端的内容。您可以在服务层中创建DTO,但在大多数情况下,这只是另一个映射,您需要付出的代价并不大。这就是为什么我直接从控制器中的实体创建DTO或ViewModel的原因。
此外,存储库模式几乎没有用。如果您更改数据存储,这可能会很有用,但实际上,这些类型的更改会伴随业务逻辑的许多其他更改,因此无论如何都重写了大多数服务层,从而丢失了价值。