存储库->服务->控制器的正确设计?

问题描述 投票:0回答:1

我想知道我是否在应用程序中使用了正确的体系结构。

在我的API中调用端点后,我目前正在经历以下流程:Api.EmployeeController.Update(Api.EmployeeUpdateDto)=>Services.EmployeeService.Update(Service.EmployeeUpdateDto)=>Data.EmployeeRepository.Update(Entities.Employee)=> Data.EfDbContext.Employees.Update(Entities.Employee)

[进一步说明,我的API端点采用Api.EmployeeUpdateDto,在控制器内,它已映射到Services.EmployeeUpdateDto并传递给Services.EmployeeService.Update()。在Services.EmployeeService.Update()中,它通过ID检索实际的数据库实体并更新其值,然后将其传递给EmployeeRepository.Update(),后者依次调用基础EF数据库上下文。

由于某种原因,我的肠胃告诉我它太复杂了,我错过了什么吗?

.net architecture domain-driven-design repository-pattern
1个回答
0
投票

是的,您正在使事情复杂化,但这有点微妙。诀窍是,存储库和服务层之间的层应该传入EmployeeUpdateDTO,并且对实体一无所知。该实体应包含在您的存储库层内。

我不太清楚为什么要有一个EmployeeUpdateDTO而不是一个EmployeeDTO,我只是将它简化为EmployeeDTO,这时您有了一个实际的域对象。

这确实意味着您的服务层确实很薄,对于直接的CRUD操作来说这很正常。除非您执行诸如用更新日期之类的逻辑来装饰EmployeeDTO的事情,否则这几乎就是样板传递。

Api.EmployeeController.Update(Api.EmployeeUpdateDto)=> Services.EmployeeService.Update(Service.EmployeeDto)=> Data.EmployeeRepository.Update(Service.EmployeeDto)=> Data.EfDbContext.Employees.Update(Entities.Employee)

© www.soinside.com 2019 - 2024. All rights reserved.