gpt4 book ai didi

domain-driven-design - 关于服务和存储库的领域驱动设计问题

转载 作者:行者123 更新时间:2023-12-04 08:22:06 25 4
gpt4 key购买 nike

我有两个实体用户和类(class)。一个用户可以选修几门类(class),这使得关系成为一对多。但是许多学生可以选修一门类(class),因此它形成了多对多的关系。

现在,我需要为用户注册一门类(class)。我的用户实体有:

 public void AddCourse(Course course)
{
if (CoursesAlreadyAdded(course))
{
AddBrokenRule(new BrokenRule() { PropertyName = course.ClassCode, Message = String.Format("Course with classCode = {0} already added", course.ClassCode) });
return;
}

UserCourses.Add(new UserCourse() { UserId = this.UserId, CourseId = course.CourseId, Course= course, User = this});
}

类是通过 Linq to SQL 生成的。 Linq to sql 无法执行多对多关系,所以我必须自己处理。

现在,问题是我如何将信息发送到数据库。 UserRepository.Save(user) 是否应该负责保存类(class)。

这意味着 User 是 Course 实体的聚合根,但实际上并非如此,因为我可以通过多种不同方式访问 Course 并且我不依赖于 User 对象为我提供 Course。

即使我有一个 CourseRegistrationService(我有),我也必须调用一个存储库来保存更改。哪个存储库负责保存有关用户和类(class)关系的更改。也许是一个 UserCourseRepository!!

此外,仅通过将列表放在用户对象下会使用户成为聚合根,或者这是不正确的。如果是这样,那么您将如何使用自动生成列表和一对多关系的 OR MAPPERS 设计应用程序。

最佳答案

在 DDD 术语中,您应该考虑聚合和聚合根。用户是否“拥有”该类(class)?可能不是。

相反,这样想可能会给您带来更好的设计:

用户有很多注册。注册与 1 门类(class)相关联。

现在您没有多对多。您拥有用户实体“拥有”的一流对象。

Registration 将是一个值对象(具有 UserID、CourseID,可能还有 DateAdded)。

关于使用方法添加到集合的两边,这也是我在 NHibernate 中所做的事情。

关于domain-driven-design - 关于服务和存储库的领域驱动设计问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2142536/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com