Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 具有可互换持久层的应用程序_Java_Design Patterns_Persistence_Data Access Layer_Domain Object - Fatal编程技术网

Java 具有可互换持久层的应用程序

Java 具有可互换持久层的应用程序,java,design-patterns,persistence,data-access-layer,domain-object,Java,Design Patterns,Persistence,Data Access Layer,Domain Object,在我看到的95%的示例中,人们正在向域对象添加@Entity或@Document注释 我想创建一个可以轻松更改持久层的应用程序。 应该可以将设置从SQL DB切换到e.x.MongoDB等 我想让我的域对象完全独立于持久层 我曾经想过这样的事情: 其中,项是域对象 public interface ItemsRepository { List<Item> getItems(); } 公共接口项存储{ 列出getItems(); } 每个ItemsRepository实

在我看到的95%的示例中,人们正在向域对象添加
@Entity
@Document
注释

我想创建一个可以轻松更改持久层的应用程序。 应该可以将设置从
SQL DB
切换到e.x.
MongoDB

我想让我的域对象完全独立于持久层

我曾经想过这样的事情:

其中,
是域对象

public interface ItemsRepository {

    List<Item> getItems();
}
公共接口项存储{
列出getItems();
}
每个
ItemsRepository
实现都有自己的专用持久层对象。对于SQL,我们假设它是
ItemEntity
class,对于Mongo
ItemDocument
class。并且每个持久化对象都有从域对象到域对象的转换

public interface ItemsRepository {

    List<Item> getItems();
}

这样的做法可以接受吗?如果不是,什么是最好的行业模式来解决这个问题?

< P>我会认为这是一个很好的应用。我这样说并不是为了反驳对这个问题的其他评论,而是为了强调,从多个角度来看,这种设计似乎是站得住脚的。我是的,我认为这是完全可以接受的。

Spring数据为您提供了这一点。“这样的方法可以接受吗?”-是的。这是,属于。更正:这是,而不是接口隔离原则。本质上,持久性是一个独立的关注点,因此应该分离出来(完全包括特定持久性层的数据类)。@BoristheSpider但是为了使用
Spring data JPA
Spring data MongoDb
,您仍然需要这些专用的实体/文档。