界面中的Pojos

问题描述 投票:1回答:1

对于研究,我编写了一个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项目中,我放了SongISong实现。在对象映射之前感觉很好。我无法在ISong中转换json或xml并将其作为Song通过网络传递或接收json或xml并将其作为ISong传递到我的文件中。

我真的认为这可行,但我没有找到如何映射界面的提示。当然,我将Song绑定到ISong,但缺少其他东西。请给我一个模式和/或一个例子。

解决方法是在接口项目中直接放置Song而不使用接口。它工作,但它真的很丑 - 现在我需要在接口项目中定义与数据库相关的和映射/编组相关的注释,真正不是我想要的(也许我想在不同的实现中使用不同的数据库结构) )。我想过在实现中使用反射“按代码”添加注释,但我认为这不是它应该采用的方式。

我确信这有一个共同的模式,但我迷路了。

在哪里以及如何实现具有目标的pojos:

  • 在界面中使用它们来定义方法
  • 在实现中使用注释和自定义逻辑自定义它们?
java json xml dependency-injection jersey
1个回答
2
投票

您无法将JSON转换为接口 - 您需要创建一个类,即您需要两端的类。

使用数据对象的接口确实没有意义。将数据/模型类放在接口工件中而不是使用它们的接口 - 您不太可能需要两个不同的模型类实现。

至于不想在界面工件中存储相关的注释,你是对的,感觉就像糟糕的设计。我的方法是现在涉及两种不同的模型:

  • 用于JSON通信的模型
  • 数据存储模型

我会让它们成为两组不同的类,在接口工件中共享REST API模型,并将存储模型/ DTO保存在数据库工件中。

© www.soinside.com 2019 - 2024. All rights reserved.