问题描述
我目前正在开发一个 API,它需要使用我从另一个 API 接收到的数据“扩展”自己的数据(我的数据库)。 我在域层中有一个清单类/聚合,其中有一个存储库接口,该接口在基础结构层中实现。
现在我已经通过依赖注入注入了我自己数据库的实体管理器以及外部 API 的 RestClient。
public class RestInventoryRepository implements InventoryRepository {
@RestClient
@Inject
InventoryRestClient inventoryRestClient;
@Inject
EntityManager eM;
在存储库方法实现中,我首先调用其余客户端并接收其对所请求库存的表示。然后我使用对象映射器将它映射到我的库存类。之后,我尝试通过相同的库存 ID 从我的 BoxInventory 获取附加信息,然后将其附加到之前收到的库存中。
结果是一个相当大的方法,它只会随着其他添加而变得更大。我现在的问题是是否有一种好的做法来处理这样的情况?我找到了 API 组合模式,但我不确定我是否可以像混合不同的 API 一样处理混合数据库和 API。
public Optional<Inventory> findInventoryById(String inventoryId) {
JSONObject inventoryJSON = inventoryRestClient.getInventoryById(inventoryId);
if (inventoryJSON == null) {
return Optional.empty();
}
ObjectMapper objectMapper = new ObjectMapper();
objectMapper.registerModule(new JavaTimeModule());
objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNowN_PROPERTIES,false);
Inventory inventory = objectMapper.convertValue(inventoryJSON,Inventory.class);
//extracts BoxTagInventory
TypedQuery<BoxInventory> typedQuery =
eM.createquery("FROM BoxInventory WHERE INVENTORY_ID = :inventoryId",BoxInventory.class);
typedQuery.setParameter("inventoryId",inventory.inventoryId());
List<BoxInventory> resultSet = typedQuery.getResultList();
if(resultSet.isEmpty()){
return Optional.empty();
}
inventory.addBoxInventory(resultSet.get(0));
return Optional.of(inventory);
}
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)