【发布时间】:2022-01-19 17:43:34
【问题描述】:
我正在使用 Dapper for .NET Core 构建 Web API,并尝试遵守清洁架构原则。该 API 由外部 Angular 前端使用。
我有使用 Dapper 从数据库中检索数据的存储库,然后这些数据通过服务被映射到 DTO 以显示给用户。
我的理解是,实体应该是数据库对象的精确表示,没有额外的属性,如果我需要一些额外的属性来显示用户(或如果我也希望隐藏用户的某些属性)。
假设我有一个 DTO:
public class StudentDTO
{
public Guid Id { get; set; }
public string Name { get; set; }
public List<Assignment> Assignments { get; set;}
}
及其对应的实体:
public class Student
{
public Guid Id { get; set; }
public string Name { get; set; }
}
使用这个模型,如果我想让一个学生完成所有作业,我需要调用两个存储库,并在服务中执行类似的操作:
public StudentDTO GetById(Guid id)
{
var student = this.studentRepository.GetById(id);
var assignments = this.assignmentRepository.GetByStudentId(id);
return SomeMapperClass.Map(student, assignments);
}
但这似乎效率低下且没有必要。我的问题是,当我在存储库中获取学生实体时,我是否应该使用 JOIN 来检索作业?或者这会违反实体的本应是什么?
抱歉,我确实意识到这是一个相当简单的问题,但我真的很想知道哪种方法是最好的方法,或者它们是否都有自己的用例
【问题讨论】:
标签: asp.net-core design-patterns architecture entity repository-pattern