微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何将数据库调用和 REST 调用合并为一个聚合?

如何解决如何将数据库调用和 REST 调用合并为一个聚合?

我目前正在开发一个 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 举报,一经查实,本站将立刻删除。