gpt4 book ai didi

java - 接口(interface)中的 Pojo

转载 作者:行者123 更新时间:2023-11-30 07:46:08 24 4
gpt4 key购买 nike

为了学习,我编写了一个 songWebservice,这是一个使用 Jersey 的 REST 服务,部署在 Tomcat 中。数据库是本地 json 文件。 dataService 有一个接口(interface) ISongDB 并与依赖注入(inject)和抽象绑定(bind)一起使用。一切都很好。

现在(下一个任务)songWebService 将得到改进,本地 json 将替换为外部数据库。

为了避免复制接口(interface)、导入无用的实现或将它们全部放在一个项目中,我将接口(interface)移到了一个独立的项目中,我在 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 中我使用了一个接口(interface) ISong,所有属性都有 getter 和 setter。在 fileDB-project 中,我放置了 ISongSong 实现。在对象映射之前感觉很好。我无法在 ISong 中转换 json 或 xml 并将其作为 Song 通过网络传递或接收 json 或 xml 并将其作为 ISong 传递 在我的文件中。

我真的认为这可行,但我没有发现如何映射接口(interface)的提示。当然,我将 Song 绑定(bind)到 ISong,但缺少其他内容。请向我提供模式和/或示例。

一个解决方案是将 Song 直接放在接口(interface)项目中而不需要接口(interface)。它有效,但它真的很难看 - 现在我需要在接口(interface)项目中定义与数据库相关和映射/编码相关的注释,这真的不是我想要的(也许我想在不同的实现中使用不同的数据库结构).我考虑过使用反射在实现中“通过代码”添加注释,但我认为这不是应该的方式。

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

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

  • 在接口(interface)中使用它们来定义方法
  • 在实现中使用注释和自定义逻辑自定义它们?

最佳答案

您不能将 JSON 转换为接口(interface) - 您需要创建一个类,即两端都需要该类。

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

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

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

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

关于java - 接口(interface)中的 Pojo,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50962488/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com