【发布时间】:2013-01-03 16:20:08
【问题描述】:
我正要开始一个新的宠物项目,我一直想知道在将实体添加到父级的一对多集合时应该如何进行验证。我将使用两个示例类来总结关于Student 和Teacher 的内容。这里的限制是,在任何给定时间,Student 只能由一个(并且只有一个)Teacher 教授,而后者又可以教授一个或多个 Students)。
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 的IsCurrentlyTeaching 集合,但我首先需要确保他们已注册。我的问题是在哪里最好地验证这个基本规则?目前我脑海中的选项是:
1.使用存储库模式
由于我将应用单元测试,我倾向于使用这种方法,因为我可以将我的数据访问逻辑包装到一个可模拟的对象中,并且这里只有一个责任,所以我只需要在我的存储库一次。但是 - 验证是存储库的责任,还是我应该只处理存储库中实体的 CRUD?
2。在控制器操作中验证这一点
我应该在这里提一下,我建议这是一个 MVC3 项目,因此在将 Student 添加到存储库之前(以及随后的 Teacher's他们目前正在教的学生名单)。但是 - 我是不是走上了一条我真的不应该走的fat controller 路径?
3.对 Teacher 实体执行此验证
我是否应该通过Teacher POCO 上的方法(例如AddStudent(Student student))添加Student 并在尝试添加尚未添加的学生时抛出自定义异常,从而切断中间人(即存储库)被录取了吗?
可能还有更多可用的选项,但这是我目前正在尝试在这三个之间进行选择的选项,我从考虑这个问题中获得了一些狭隘的视野。显然,以上所有内容都可以进行适当的单元测试,但从长远考虑(并适应增长)我应该走哪条路?
【问题讨论】:
标签: c# asp.net-mvc-3 entity-framework repository-pattern