ORM有或没有DAL包装器

时间:2010-09-20 16:33:57

标签: orm layer

在我看到的所有示例中,ORM倾向于直接使用或在某种DAL存储库后面使用(可能是为了将来可以将它们换掉)。

我不喜欢直接使用ORM,因为它很难换掉,但我同样没有失去它提供的完整域名更改跟踪的粉丝!

过去我会为我的域中的每个对象编写一个数据映射器类(Fowler),但我已经通过经验了解到这个CRUD编码大约耗费了我1/3的时间。

我意识到改变我的数据访问策略是不太可能的(我以前从未这样做过)但我真的担心通过直接使用ORM我会锁定自己使用它直到时间结束。

我一直在考虑在一个通用的ORM容器中包装ORM(还没有关于ORM本身的决定),并将其传递给每个域对象的finder类。但是,我完全不确定通用的ORM包装器类是什么样的!

有人在这里有任何现实生活建议吗?请不要觉得糖衣你的答案是不必要的!!

2 个答案:

答案 0 :(得分:0)

存储库有许多功能:

  1. 它允许使用模拟实现进行单元测试
  2. 它允许您隐藏来自使用者的ORM的完整实现,并实现安全功能
  3. 它为业务逻辑提供了一个抽象层(尽管有些人为此使用了单独的服务层),并且
  4. 如果需要,它允许您更改ORM实现。
  5. 另一个将ORM归类的容器感觉就像是对我过度工程化。正如您所指出的那样,您不太可能改变您的底层实现,但如果您这样做,您的存储库似乎是合理的地方。

答案 1 :(得分:0)

在这些问题上指向一个比我更聪明的人的方向,Ayende在他的博客文章The false myth of encapsulating data access in the DAL中强调的具有通用ORM包装器的问题之一是不同的ORM本质上太不同了有效地封装,有不同的交易处理方法等。

最重要的是,无论如何切换ORM真的没什么意义 - 在变更的情况下封装DAL的主要原因之一是应对交换数据库,但是大多数现代ORM能够与许多不同的ORM一起工作数据库无论如何。