我有一个关于大学管理的 .net 解决方案(使用实体框架,使用 CodeFirst 方法)。项目的架构是这样的:
- DataAccess(DbContext 和通用存储库)
- 实体(代码第一类)
- 服务(服务类)
- Web(一个MVC项目,解释不重要)
为了使问题更容易,我将只讨论我域中的两个类(在实体层上):
- 课程
- 学生
课程可以有很多学生。解决方案的目标是将学生添加到课程中(中间有一些验证)。
课程.cs
public class Course
{
[Key]
public int IdCourse { get; protected set; }
public string Name { get; set; }
public virtual ICollection<Student> Students { get; protected set; }
public void AddStudent(Student student)
{
// Some Validation
Students.Add(student);
}
}
如您所见,该类具有将学生添加到课程的属性。情况是验证越来越多,现在非常复杂,需要对数据库进行一些查询等等......所以课程有很多责任!
所以我想,我需要一项服务来处理“添加”并进行所有验证,并将这种责任从课程课程中拿走。问题是,由于Student Collection是Course的私人成员,我无法将学生添加到 Service 类的课程中。
我认为解决问题的另一种方法是将相关实体(学生)添加到上下文(来自服务),但这会破坏我的存储库(因为我必须公开DbContext)。如果我直接使用 Service 类中的 DbContext,那么存储库就没有意义了,不是吗?
那么,我应该如何设计呢?或者我应该怎么做才能解决这个问题?任何建议也会很受欢迎!
谢谢!