我的模特应该住哪儿? Web层或数据层? (MVC + NHibernate)

时间:2009-02-13 17:09:41

标签: asp.net-mvc nhibernate design-patterns n-tier-architecture

我正在使用MVC,Ninject和NHibernate设置一个n层应用程序(我第一次使用这些技术)。为清楚起见,层是“数据”层,“服务”层和“Web”层(都是单独的项目)。

使用MVC,您的模型位于“Models”文件夹中。似乎有必要将我的模型放在这里以创建强类型视图并且通常与MVC的哲学保持一致。

但是,对于NHibernate,我还需要在“数据”层中使用我的模型,以便可以进行映射,并且NHibernate可以实例化实际对象以返回到服务层。

在项目中复制类并不是很干,并且将它们抽象到自己的库中似乎不能很好地与MVC一起使用(在实践中也不是哲学)。

有什么想法?如何构建O / RM对象与MVC模型?

5 个答案:

答案 0 :(得分:6)

我将Entity Framework模型/类保留在数据层中,并将MVC项目的Models文件夹用于表示模型和模型绑定器。

答案 1 :(得分:6)

数据模型是它自己的事情。 MVC中的模型是不同的。它是您要显示的模型,可能是也可能不是您的数据模型。你的数据模型可能会超越层次 以标准注册表格为例。数据模型可以包括用户名,密码和登录历史记录类的数组,指示它是活动的标志以及许多其他东西。 MVC中的模型可能只关心用户名和密码,并且用户输入密码两次。您的数据模型真的需要两个密码字段吗?不。但MVC中的模型确实如此。因此,两个不同的生物。

答案 2 :(得分:4)

由于NHibernate,我将所有模型保留在数据层中。请查看S#arp Architecture,了解保持演示文稿清洁的绝佳方法。模型不必实际位于您的Web项目中,以便您的视图可以进行强类型化。

答案 3 :(得分:1)

你对DRY原则是正确的。我将我的LINQ-to-SQL对象与我的业务对象分开,并且我有一些重复,它不会让我感觉良好,但似乎没有一个简单的解决方法...

我很难做出这个决定,但我在构建MVC店面时看了Rob Conery的博客,最后我决定采用这种方式(ORM对象和业务对象)

答案 4 :(得分:0)

  

使用MVC,你有你的模型   在“Models”文件夹中。它似乎   把我的模型放到这里是必要的   创建强类型视图和   一般遵循的哲学   MVC。

任何模型都不是你想要的。如果有必要,我仍然会使用演示模型,但我不反对在你的视图中使用你的nhibernate实体。

使用NHibernate,您实际上并不需要数据层,因为Session本身就是数据层。

服务层似乎是一个有效的想法,但前提是您计划为该层设置多个客户端。

否则,我只有一个项目并使用命名空间来分隔我的图层。它构建得更快,更易于部署。