Tag: 数据访问层

DAO和DAL有什么区别?

在学校学习Java之后,我对DAO模式( 数据访问对象 )非常熟悉。 但是在工作中我使用.NET。 在.NET中经常谈论DAL( 数据访问层 )。 对我来说他们的目的似乎很相似。 所以问题是DAO和DAL基本上是一样的东西? 术语“DAL”是否只是用来与数据访问对象混合的?

我应该从我的DAL中返回IEnumerable <T>或IQueryable <T>吗?

我知道这可能是意见,但我正在寻找最佳实践。 据我所知, IQueryable<T>实现IEnumerable<T> ,所以在我的DAL中,我目前有方法签名,如下所示: IEnumerable<Product> GetProducts(); IEnumerable<Product> GetProductsByCategory(int cateogoryId); Product GetProduct(int productId); 我应该在这里使用IQueryable<T>吗? 这两种方法的优缺点是什么? 请注意,我正在计划使用存储库模式,所以我将有一个这样的类: public class ProductRepository { DBDataContext db = new DBDataContext(<!– connection string –>); public IEnumerable<Product> GetProductsNew(int daysOld) { return db.GetProducts() .Where(p => p.AddedDateTime > DateTime.Now.AddDays(-daysOld )); } } 我应该将IEnumerable<T>更改为IQueryable<T>吗? 这些或那个有什么优点/缺点?

如何编写数据库调用的unit testing

我接近一个新项目的开始,并且第一次尝试将unit testing包括在我的一个项目中(gasp!)。 我在devise一些unit testing时遇到了麻烦。 我有几个方法已经很容易testing(传入两个值,并检查预期的输出)。 我有其他部分的代码正在做更复杂的事情,如针对数据库运行查询,我不知道如何testing它们。 public DataTable ExecuteQuery(SqlConnection ActiveConnection, string Query, SqlParameterCollection Parameters) { DataTable resultSet = new DataTable(); SqlCommand queryCommand = new SqlCommand(); try { queryCommand.Connection = ActiveConnection; queryCommand.CommandText = Query; if (Parameters != null) { foreach (SqlParameter param in Parameters) { queryCommand.Parameters.Add(param); } } SqlDataAdapter queryDA = new SqlDataAdapter(queryCommand); queryDA.Fill(resultSet); } catch […]

什么是提高NHibernate性能的最佳方法?

我有一个应用程序使用NHibernate作为它的ORM,有时它会遇到性能问题,由于如何访问它的数据。 可以做什么样的事情来提高NHibernate的性能? (请将每个答案限制为一个build议)

存储库模式与DAL

它们是一样的吗? 刚刚完成观看罗布·康纳利的店面教程 ,他们似乎是类似的技术。 我的意思是,当我实现一个DAL对象,我有GetStuff,添加/删除等方法,我总是先写接口,以便我可以稍后切换数据库。 我混淆的东西?

在Django中分离业务逻辑和数据访问

我正在Django写一个项目,我看到80%的代码在models.py文件models.py 。 这段代码令人困惑,在一段时间之后,我停止了解真正发生的事情。 这是困扰我的东西: 我发现我的模型级别(它应该只负责数据库中的数据)的工作也在发送电子邮件,在其他服务上发送API等。 另外,我觉得在视图中放置业务逻辑是不可接受的,因为这样很难控制。 例如,在我的应用程序中,至less有三种方法来创buildUser新实例,但从技术上讲,它应该一致地创build它们。 当我的模型的方法和属性变得不确定时,以及当它们产生副作用时,我并不总是注意到。 这是一个简单的例子。 起初, User模型是这样的: class User(db.Models): def get_present_name(self): return self.name or 'Anonymous' def activate(self): self.status = 'activated' self.save() 随着时间的推移,它变成这样: class User(db.Models): def get_present_name(self): # property became non-deterministic in terms of database # data is taken from another service by api return remote_api.request_user_name(self.uid) or 'Anonymous' def activate(self): # method […]

我应该将Entity(Persistent)对象转换为DTO对象吗?

我的项目分层如下: – DAL (Entity) – > BLL (DTO) – > ApplicationComponent (ViewModel) 。 应用程序的多个组件( ApplicationComponent )将访问BLL 。 组件包括Windows服务,Web服务,Web API和MVC控制器。 我将NHibernate Entity对象转换为DTO对象,同时将它们从DAL传递到BLL 。 在将此状态传递给ApplicationComponent , BLL再次将其转换为ViewModel 。 这有助于我将问题与每个层中的数据处理方式分开。 我不赞成返回NHibernate Entity对象来查看以下原因: – 数据暴露给我想要隐藏的UI (或只在需要时才暴露),如密码,用户types,权限等。 在引用/连接上,当访问属性时, NHibernate执行额外的查询,从而使得使用延迟加载无效。 向用户( Entity )暴露的不必要的数据会造成混淆和缺陷。 持久性实现泄漏到BLL / UI 。 Entity不是为UIdevise的。 它不能在所有情况下提供UI 。 我们在DTO属性上使用属性来进行用户inputvalidation,这与Entity看起来很奇怪。 我正面临以下问题: 最明显的问题是具有相同function的冗余对象。 我必须在每个图层中编写映射器方法来转换对象。 这可以通过使用AutoMapper或类似的东西最小化; 但是并没有完全解决问题。 问题: – 这是一个过度分离,应该避免(至less最小化)? 如果这种方法是正确的,我没有看到任何简单的方法来完全绕过我上面提到的两个问题。 请build议。 […]

DAO和Repository模式有什么区别?

数据访问对象(DAO)和存储库模式有什么区别? 我正在开发一个使用Enterprise Java Bean(EJB3),Hibernate ORM作为基础结构的应用程序,以及作为devise技术的领域驱动devise(DDD)和testing驱动开发(TDD)。