数据库优先和领域

时间:2013-12-28 20:46:56

标签: c# asp.net asp.net-mvc asp.net-mvc-4

我目前正在处理一个包含30多个表格的数据库,其中包括用户,学生,教师,学校,报名,课程,日历,活动,CollegeTeams,MusicBand等。我想按区域工作为了更好地组织应用程序,但我的问题是:我应该将实体保留在相应的区域模型上还是主应用程序模型文件夹中?如果在相应的Area Model文件夹中分发实体,如果使用ViewModel方法,我如何能够将数据传递给视图?例如。如果在学生区内为对大学音乐乐队感兴趣的学生创建注册视图?

4 个答案:

答案 0 :(得分:1)

在文件夹之间分发类不会使其他文件夹中的类无法访问。

恰恰相反,您甚至可以为模型类或域实体创建一个完整的单独文件夹甚至是单独的项目,并且仍然可以在同一项目中的任何位置或引用包含您的类的项目的任何项目中使用它们

答案 1 :(得分:1)

在任何复杂的应用程序中,我的解决方案通常至少有3个项目。一个用于我放置EDMX的数据,一个用于Web,其中区域用相关的视图,控制器和ViewModel定义,以及EDMX模型(POCO)所在的Common项目。

似乎您正在跨越实体模型和View模型的定义。这些应该是您的应用程序中两个完全独立的概念。 EDMX定义了从DB到实体模型的映射。在Web应用程序中,应该有一些机制将实体模型映射到View模型/从View模型映射。此ViewModel映射应在使用它们的特定区域中完成。

我不知道这是否正是您所寻找的,但我希望它有所帮助。

答案 2 :(得分:1)

最佳实践之一是将所有域模型外部化为一个不同的洞项目(一个新的C#类库)。为了增强代码维护,您还可以在解决方案中创建另一个类库,它将是您的数据访问层。 DAL项目将引用域模型项目,以实现针对模型的每个类的数据访问操作(这些操作基本上是CRUD操作:创建读取更新和删除)。 DAL项目可以拆分为存储库(域模型中每个类的存储库:http://msdn.microsoft.com/en-us/library/ff649690.aspx)如果您的要求比针对您的域模型的CRUD操作更进一步,您可以创建另一个应用程序中的图层:向服务层问好:D基本上,服务层是客户端要求的转录。服务可以使用存储库(在DAL项目中定义)以实现定义的要求。实现服务层后,您可以从控制器中调用它进入Web项目(或者,如果您没有选择在应用程序体系结构中添加服务层,则可以引用DAL项目)。 因此,使用这种方法,您将使用干净且更好的应用程序架构。如果要使用它,请不要忘记包含对每个项目的引用。 希望这会有所帮助。

答案 3 :(得分:0)

如果您可以在不同的类库项目中安排具有上下文(模块)智能文件夹的实体,例如“YourDomain.Models”不在区域中,那将是一件好事。

并介绍类似DTO的内容,它将粘合您的Web和实际模型以实现松耦合架构。

希望有所帮助。