Java 具有可互换持久层的应用程序
在我看到的95%的示例中,人们正在向域对象添加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实
@Entity
或@Document
注释
我想创建一个可以轻松更改持久层的应用程序。
应该可以将设置从SQL DB
切换到e.x.MongoDB
等
我想让我的域对象完全独立于持久层
我曾经想过这样的事情:
其中,项
是域对象
public interface ItemsRepository {
List<Item> getItems();
}
公共接口项存储{
列出getItems();
}
每个ItemsRepository
实现都有自己的专用持久层对象。对于SQL,我们假设它是ItemEntity
class,对于MongoItemDocument
class。并且每个持久化对象都有从域对象到域对象的转换
public interface ItemsRepository {
List<Item> getItems();
}
这样的做法可以接受吗?如果不是,什么是最好的行业模式来解决这个问题? < P>我会认为这是一个很好的应用。我这样说并不是为了反驳对这个问题的其他评论,而是为了强调,从多个角度来看,这种设计似乎是站得住脚的。我是的,我认为这是完全可以接受的。Spring数据为您提供了这一点。“这样的方法可以接受吗?”-是的。这是,属于。更正:这是,而不是接口隔离原则。本质上,持久性是一个独立的关注点,因此应该分离出来(完全包括特定持久性层的数据类)。@BoristheSpider但是为了使用
Spring data JPA
或Spring data MongoDb
,您仍然需要这些专用的实体/文档。