域层访问持久性的东西

时间:2009-05-27 19:37:01

标签: dns persistence layer

我试图尽可能保持我的域层“纯粹”,而不会在持久性或其他基础架构问题上编织。但是,有时我的域层需要使用RDBMS或其他外部依赖项的服务,我不知道如何处理它。

例如,我的应用程序中的每个域对象都实现了一个IValidatable接口,该接口由客户端调用以获取阻止该对象被持久化的损坏规则列表。在少数情况下,上述验证例程涉及调用DAO类以检查特定记录的存在。我们没有使用ORM;相反,我们使用使用数据访问对象模式构建的持久层。我应该围绕这个数据库访问创建一个服务/包装类,让我的域对象与它协作吗?添加此级别的间接是否可以接受,或者我仍在污染我的域对象?

2 个答案:

答案 0 :(得分:2)

通常的答案是使用某种对象关系接口。您的域层显示您的域模型的界面。您有一个关系数据库,您需要在它们之间有一个层来执行object-relational mapping。你说“我们没有使用ORM”,但实际上你是:你只是直接在域层中进行映射。

进行映射的问题称为object-relational impedance mismatch问题。如果你坚持不识别一个显式的ORM层,那么是的,你应该编写类来封装使用DBMS的细节,(当然,当你这样做时,你会在那里引入ORM类。)

实际上,要避免使用某些 ORM图层是非常困难的。

答案 1 :(得分:1)

我一直认为你无法隐藏持久域对象中持久性的知识。试图这样做变得越来越不自然,并引入了奇怪的副作用。 换句话说,我认为在域层中建立持久性知识是很好的,但不一定是持久性的确切方法;应该使用DAO接口。

我应该补充一点,根据您的验证检查,您将受到竞争条件的影响。您应该准备好处理因此而可能发生的任何约束异常。