【问题标题】:ATG BCC: Link non version Repository to Product Catalog version RepositoryATG BCC:将非版本存储库链接到产品目录版本存储库
【发布时间】:2019-12-04 10:41:57
【问题描述】:

我正在寻找解决以下要求的解决方案

  • 在产品目录中,每个产品都应具有“预购库存”自定义属性,该属性在每个产品级别保存整数值。

  • 成功完全添加到购物车时,该产品将计数减一,并且只允许用户将产品添加到购物车,直到值达到零。

  • 当我们在密件抄送中看到产品时,它应该显示该产品的最新计数。

我正在考虑将此自定义属性作为产品目录的一部分,但由于产品目录是版本存储库,因此直接从代码更新值而不是从密件抄送更新并不复杂。

是否有可能或最好有单独的非版本存储库来存储“预购库存”编号并将存储库映射到产品目录并在产品目录高级选项卡中显示最新计数?

谢谢

维韦克·辛格

【问题讨论】:

    标签: atg atg-dynamo


    【解决方案1】:

    实际上,从生产实例更新版本化存储库项目是一种非常糟糕的做法,因此我认为您的建议是我能想到的唯一可能的解决方案。您需要一个非版本化的持久存储库(我们称之为 InventoryRepository),其中包含跟踪产品库存的项目描述符(我们称之为 stockLevel)。

    但是,这种方法背后存在一个陷阱。为了保证产品的库存水平是最新的,您必须在 stockLevel 项目描述符上禁用缓存。这带来了数据库将因更新而过载的风险,这可能会导致效率问题。

    在我的一个项目中,我们通过将库存实现功能移至另一个服务器实例 (util) 来解决该问题 - 由异步 DMS 调用触发(其来源是客户的操作,例如将商品放入购物篮)。因此,生产实例仅从 InventoryRepository读取库存水平,而不是更新它们。

    这是一个巨大的性能改进,但生产实例仍然非常频繁地读取非缓存值。我们观察到,如果特定设备的库存水平非常高,如果只需要布尔信息(可用或不可用),则无需检查其确切值。因此,我们引入了一个缓存的项目描述符,它为产品 ID 分配了一个布尔属性 (isHighlyAvailable)。在特定产品的库存水平没有降低到阈值(比如 100)之前,isHighlyAvailable 被设置为 true,并且生产实例依赖于它的值。一旦达到阈值,isHighlyAvailable 将被取消设置(通过异步 DMS 消息),并且从现在开始,生产实例在评估时会考虑准确的、未缓存的 stockLevel 值产品可用性。

    【讨论】:

    • 感谢您分享您的经验。它真的很有帮助。我的要求是,如果产品被标记为 preorder = true,那么业务用户可以设置一些我想存储在生产模式中的阈值库存值,以便在提交订单时,如果产品是 preorder = true,我可以降低库存水平,否则什么也没有。此外,产品目录资产编辑器应该能够查询和显示预订库存水平的当前状态。
    • @VivekSingh 所以我不知道“可预订”产品与“不可预订”产品的比例是多少。如果您的绝大多数目录包含 preorder=false 的产品,那么我认为只缓存 preorder 属性并且 preorderStock 可以不缓存是可以的。否则,您必须考虑 preorderStock 检查的性能,并且我在帖子中的建议可能会有所帮助。
    • @VivekSingh 当谈到从资产编辑器验证 preorderStock 时,我不预测这里的性能问题。如果您正确定义了从 ProductCatalog 到维护库存级别的非版本化存储库的引用,则资产编辑器产生的数据库负载与生产实例生成的数据库负载相比可以忽略不计。
    猜你喜欢
    • 1970-01-01
    • 2011-10-07
    • 1970-01-01
    • 2015-06-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多