我正要开始一个新的宠物项目,我一直想知道在将实体添加到父级的一对多集合时应该如何进行验证。我将使用两个示例类来总结关于 aStudent
和 a 的内容Teacher
。这里的限制是,在任何给定时间,aStudent
只能由一个(并且只有一个)教授,而这个Teacher
人又可以教授一个或多个Student
s)。
public class Student
{
public bool IsEnrolled { get; set; }
public virtual Teacher IsCurrentlyBeingTaughtBy { get; set; }
}
public class Teacher
{
public virtual ICollection<Student> IsCurrentlyTeaching { get; set; }
}
当学生上课时,我需要将他们分配到Teacher
'sIsCurrentlyTeaching
集合中,但我首先需要确保他们已注册。我的问题是在哪里最好地验证这个基本规则?目前我脑海中的选项是:
1.使用存储库模式
因为我将应用单元测试,所以我倾向于这种方法,因为我可以将我的数据访问逻辑包装到一个可模拟的对象中,并且这里只有一个责任,所以我只需要在我的存储库中验证一次. 但是 - 验证是存储库的责任,还是我应该只处理存储库中实体的 CRUD?
2.在控制器动作中验证这一点
我应该在这里提一下,我建议这是一个 MVC3 项目,所以我应该在控制器的操作中执行此验证,然后Student
再将Teacher
. 但是 - 我是否正在走上一条我真的不应该走的胖控制器路径?
3. 对Teacher
实体执行此验证
切断中间人(即存储库)我是否应该Student
通过 POCO 上的方法添加,Teacher
例如AddStudent(Student student)
在尝试添加尚未注册的学生时抛出自定义异常?
可能还有更多可用的选项,但这是我目前试图在这三个之间进行选择的选项,而且我从考虑这个问题中获得了一些狭隘的视野。显然,以上所有内容都可以进行适当的单元测试,但考虑长期(并适应增长)我应该走哪条路?