Dns 对持久性内容的域层访问

Dns 对持久性内容的域层访问,dns,persistence,layer,Dns,Persistence,Layer,我试图保持我的域层尽可能的“纯粹”,而不涉及持久性或其他基础设施问题。然而,有时我的域层需要使用RDBMS或其他外部依赖项的服务,我不知道如何处理它 例如,我的应用程序中的每个域对象都实现了一个IValidatable接口,客户端可以调用该接口来获取阻止对象持久化的破坏规则列表。在少数情况下,上述验证例程涉及调用DAO类以检查特定记录的存在。我们没有使用ORM;相反,我们使用使用数据访问对象模式构建的持久层。我是否应该围绕这个数据库访问创建一个服务/包装器类,并让我的域对象与之协作?添加这种级别

我试图保持我的域层尽可能的“纯粹”,而不涉及持久性或其他基础设施问题。然而,有时我的域层需要使用RDBMS或其他外部依赖项的服务,我不知道如何处理它


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

通常的答案是使用某种类型的对象关系接口。域层表示域模型的接口。在后台有一个关系数据库,在它们之间需要一个层来执行。你说“我们没有使用ORM”,但事实上你是:你只是直接在域层进行映射

制作映射的问题称为问题。如果您坚持不标识显式ORM层,那么是的,您应该编写类来封装使用DBMS的细节(当然,当您这样做时,您将在那里引入ORM类)


实际上,很难避免使用ORM层。

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


我应该补充一点,根据您的验证检查,您需要遵守比赛条件。您应该准备好处理由此可能发生的任何约束异常。

特定记录与域对象的关系如何?