我需要帮助的设计问题。最好用一个例子来描述。 使用以下域模型: - 学生 - 报名 - 课程
学生和课程之间存在多对多的关系,通过注册表实现,即注册具有StudentID(FK)和CourseID(FK)。 Student和Course类都有一个Navigation属性,即另一个的ICollection。
我正在使用View模型,并希望使用简单的CRUD功能来添加,编辑,删除学生和课程。 View模型与其关联的Domain模型非常相似。
显示学生的详细信息很简单,但是在显示学生的课程详细信息时,以下哪种设计是最佳方法?
在学生视图模型中,声明注册域模型的ICollection? 然后在视图中可以访问注册详细信息。 我觉得这样就解开了View模型试图实现的目标,那就是从域模型中获得一个抽象层。使用此设计,可以通过学生视图模型从视图访问注册域模型。
为Enrollment类创建一个View模型。 这与它的域模型相同。从视图模型中保存域模型的值不执行任何其他操作。必须通过AutoMapper进行映射。不知道如何制作这个选项,感觉效率低下。
答案 0 :(得分:2)
首先,Enrollment
不应该是域模型。 Enrollment
只是一个数据库表,用于指定从Student
到Course
的多对多关系。
我的建议是在List
域模型中创建Course
Student
个,并使用NHibernate或Fluent NHibernate来映射{{1}然后,从映射创建多对多关系,您只需从Student
实例中检索Course
。
此外,在使用映射而不是在代码中编写一些SQL语句时,可以更自由地使用级联操作。