对于研究,我编写了一个songWebservice
,一个与Jersey一起使用的REST服务,部署在Tomcat中。该数据库是一个本地json文件。 dataService
有一个接口ISongDB
,用于依赖注入和抽象绑定器。一切都很好。
现在(下一个任务)将改进songWebService
并将本地json替换为外部数据库。
为了避免复制接口,导入无用的实现或将它们全部放在一个项目中,我将接口移动到一个独立的项目中,我在pom.xml中引用它。所以现在我有两个项目如下:
-songWebServiceInterface
-src.main...songWebService
- web
- ISongWebService [ Song getSong(id); int postSong(song) ]
- AbstractSongWebService impl ISongWebService [ protected ISongDB;]
- database
- ISongDB [ Song getSong(id); int postSong(song) ]
- Abstract impl ISongDB [ protected abstract void init() ]
- pojo ???
-songWebServiceFileDB
-src.main...songWebService
- web
- SongWebService extends AbstractSongWebService
- database
- FileSongDB extends AbstractSongDB
- pojo ???
我的问题是pojos(Song
)。
首先在interface-project中我使用了一个接口ISong
,其中包含所有属性的getter和setter。在fileDB项目中,我放了Song
的ISong
实现。在对象映射之前感觉很好。我无法在ISong
中转换json或xml并将其作为Song
通过网络传递或接收json或xml并将其作为ISong
传递到我的文件中。
我真的认为这可行,但我没有找到如何映射界面的提示。当然,我将Song
绑定到ISong
,但缺少其他东西。请给我一个模式和/或一个例子。
解决方法是在接口项目中直接放置Song
而不使用接口。它工作,但它真的很丑 - 现在我需要在接口项目中定义与数据库相关的和映射/编组相关的注释,真正不是我想要的(也许我想在不同的实现中使用不同的数据库结构) )。我想过在实现中使用反射“按代码”添加注释,但我认为这不是它应该采用的方式。
我确信这有一个共同的模式,但我迷路了。
在哪里以及如何实现具有目标的pojos:
您无法将JSON转换为接口 - 您需要创建一个类,即您需要两端的类。
使用数据对象的接口确实没有意义。将数据/模型类放在接口工件中而不是使用它们的接口 - 您不太可能需要两个不同的模型类实现。
至于不想在界面工件中存储相关的注释,你是对的,感觉就像糟糕的设计。我的方法是现在涉及两种不同的模型:
我会让它们成为两组不同的类,在接口工件中共享REST API模型,并将存储模型/ DTO保存在数据库工件中。