NHibernate删除了DAL?

Nic*_*olo 4 nhibernate data-access-layer

我是否正确使用NHibernate(或任何其他ORM)消除了DAL的必要性?或不?

kry*_*our 7

我试图想到如何回答这个问题,但答案是否定的,它没有删除DAL的必要性,而不是成为DAL的一部分,你在做什么之前无疑是有访问对象调用sql代码构建代码或调用存储过程.

然后构建了一个Bill业务对象,其数据可能来自多个表,然后返回.这是一项艰苦的工作,通常只涉及维护.

NHibernate将繁重的工作从这项任务中解脱出来(并做其他事情),但你仍然可能希望"Manager"类作为数据访问层的一部分,在返回对象之前进行操作等.

因此,尽管我在解释它时做得非常糟糕,但NHibernate并没有消除对DAL的需求,只是改变了DAL的组成部分.


Kri*_*s-I 6

你需要一个DAL,问题是你在DAL做什么.在使用NHibernate的.NET项目中,我使用了这个组织

  • MyProject.Core.DomainModel:在这个项目中只有.cs和映射文件(.hbm.xml)
  • MyProject.Repo:在这个类中你使用NHibernate方法,如Get,Load,make query ....
  • MyProject.Service:从这些类中,我调用了MyProject.Repo方法
  • MuProject.UI:ASP.NET,ASP.NET MVC,Winforms .....
  • MyProject.Service.Tests:测试服务的所有单元测试

我举个例子,我想让所有活跃的员工进行排序.

在我的UI中,我调用MyProject.Service.EmployeeService.GetActive(); 在getGetActive中,我在PyProject.Repo中调用一个函数来获得活跃的员工.当我返回结果时(在服务方法中),我使用Linq进行订单并返回订购的列表.

要恢复,Repo项目,它通过NHibernate和Service访问数据库是业务.

这是我的意见,就像我这样做可能不是最好的方式,不是唯一的方式,但它是我的方式:)