我目前正在开发一个 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);
}