将Domain对象放在ASP.NET MVC App中的最佳位置?

时间:2008-12-16 18:43:58

标签: asp.net asp.net-mvc

我刚刚在ASP.NET MVC中开始我的第一个项目。在我的webforms体验中,我通常会有一个专门用于我的域层的单独项目。在这里,我将拥有我的Domain特定对象以及我的NHibernate映射文件和一些业务逻辑。我在网上看到的大多数示例都将这些类与业务逻辑一起放入MVC应用程序的Models文件夹中,然后从控制器调用它。根据我的经验,如果需要,这似乎会使得将逻辑移动到不同的平台变得更加困难。具体来说,我正在考虑如果环境决定将其移动到webforms应用程序的可能性。这可能是一个天真的问题,但是将域数据放在自己的项目中还是在Models文件夹中更好?

3 个答案:

答案 0 :(得分:5)

如果您计划在MVC应用程序之外重用模型,则单独的类库仍然是可接受的设置。我这样做,但保留Models文件夹并将我的视图的模型放入其中。

如果您将DAL放在Webforms项目的App_Code中,那么我会把它放在MVC项目的Models中。否则,继续像你一样使用单独的项目。

答案 1 :(得分:1)

我以类似的方式布局我的解决方案 - businessLogic,dataaccess,域对象都驻留在一个项目中。视图(Web,Web服务,Windows窗体,WPF ......)都进入了各自独立的项目。

这样,UI特定代码不会过滤到应用程序的较低层。在大多数Web项目中,我不得不破解一个窗口表单,将新数据注入数据库或管理某些类型的应用程序,这些应用程序在网络介质中不可用。

如果我在业务级别烘焙HttpCaching,我将无法在视图之间切换。

答案 2 :(得分:1)

我使用类似的方法。我也在使用MVC,我喜欢在一个单独的项目中使用POCO域模型。对于我现在正在构建的应用程序,我有以下项目:

  • Cms.Data
  • Cms.Services
  • Cms.Domain
  • Cms.Web

Cms.Data是一个数据访问项目,它将LinqToSql或Entity Framework模型转换为Cms.Domain中的POCO模型,反之亦然。 Cms.Services是一个服务项目,其业务逻辑将POCO从/向数据层发送/发送。最后,Cms.Web是MVC项目,它使用来自控制器和POCO的服务作为模型。

我喜欢接受评论家:)