我有两个实体用户和课程。用户可以参加几门课程,使得这种关系成为一对多关系。但是,许多学生可以选择一门课程,因此它可以为许多人提供很多关系。服务和存储库的域驱动设计问题
现在,我需要为用户注册一门课程。我的用户实体有:
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(用户)负责保存课程。
这种方式意味着用户是课程实体的聚合根,但实际上它并不是我可以访问课程的许多不同方式,而且我不依赖于用户对象来提供课程。
即使我有CourseRegistrationService(我有),我必须调用一个存储库来坚持更改。哪个存储库负责持久化关于用户和课程关系的更改。也许UserCourseRepository!
此外,仅通过在用户对象下放置一个列表使用户成为聚合根或者是不正确的。如果是这样,那么你将如何使用OR MAPPERS来设计应用程序,它会自动生成List和一对多关系。
听起来好像数据模型已经设置好了,但在我看来,通过将连接表作为注册模型来避免多对多关系,您可以节省一些头痛。 – 2010-01-26 20:56:45
@Thom,不知道你的意思!你能详细说明一下吗? – azamsharp 2010-01-26 21:03:38
基本上接受的答案是什么。 – 2010-01-28 16:25:51