【发布时间】:2020-05-29 08:18:43
【问题描述】:
我正在研究领域驱动设计(是的,我参加那个聚会已经很晚了),到目前为止,我已经意识到领域模型应该是宇宙的中心。数据持久性只是一个实际的细节。
但是,如果这是真的,那么我很难确定与持久性部分(例如存储库)的通信应该在哪里。
例如,如果我希望能够为学生添加新成绩,我应该像这样从学生域模型内部调用存储库吗?
interface IGradeRepository
{
void SaveGrade(int courseId, string grade);
// ...other methods
}
class Student
{
IGradeRepository _gradeRepository;
List<Grade> _grades = new List<Grade>();
public Student(IGradeRepository gradeRepository)
{
_gradeRepository = gradeRepository;
}
int StudentId { get; set; }
void AddGrade(int courseId, string grade)
{
var grade = new Grade(this.StudentId, courseId, grade);
_grades.Add(grade);
// Do I put the call to the data persistance here?
_gradeRepository.SaveGrade(grade);
}
}
如您所见,我最好的选择是从域模型内部访问存储库。但是,我不确定这是否是解决方法。这似乎是许多教程中遗漏的内容之一。
总结一下:在进行领域驱动设计时,我从哪里访问数据层?
更新
正如一些人所评论的,从我的示例中不清楚我将如何访问学生课程。我可能会从视图模型或通过某种用例服务来做到这一点。
视图模型示例:
class StudentGradesViewModel
{
// (...) all sort of VM-stuff
private Student _student;
private Course _selectedCourse;
public void AddGrade(string grade)
{
_student.AddGrade(_course.CourseId, grade);
}
}
【问题讨论】:
标签: c# domain-driven-design ddd-repositories