gpt4 book ai didi

angular - 具有多个相关实体的ngrx `forFeature`

转载 作者:行者123 更新时间:2023-12-03 23:55:12 24 4
gpt4 key购买 nike

我们正在尝试采用 forFeature我们的应用程序的模式。然而,多个特征是相关的。

我们有一个同时显示多个实体关系的应用程序。

例如考虑我们有以下实体

  • 产品
  • 供应商
  • 国家
  • 货币
  • 港口

  • 在哪里作为模型
    ìnterface Product {
    countryId: string;
    currencyId: string;
    supplierId: string;
    }

    interface Supplier {
    name: string;
    harbourId: string;
    countryId: string;
    }

    然后在 product-detail我们显示的页面 currency & country产品的名称以及名称和 countrysupplier .

    考虑到我们还有一个 supplier-details page我们在其中显示上述供应商信息及其最近 10 种产品。

    目前处理所有这些的方式是使用这样的存储结构:
     - entities
    ---- product
    ---- supplier
    ---- currency
    ---- country
    ---- harbour
    - ui
    ---- other stuff ui related

    这是通过根中的单个存储完成的。

    然而,应用程序文件夹结构是这样划分的:
     - features
    --- product
    ------ product.actions / product.reducer / product.effects / product.selector
    --- supplier
    ------ supplier.actions / supplier.reducer / supplier.effects / supplier.selector
    --- store
    ------ reducers ( here we are importing all reducers to combine those)
    ------ harbour.actions / harbour.reducer / harbour.effects / harbour.selector
    ------ country.actions / country.reducer / country.effects / country.selector
    ------ currency.actions / currency.reducer / currency.effects / currency.selector

    如您所见,文件夹结构有点杂乱无章,因为我还不确定在哪里放置 harbour , country & currency因为其中一些是一般实体。

    但是我正在查看 forFeaturengrx我想知道如果我们碰巧使用它以及功能是否可以一起使用,所有这些将如何组合在一起。
  • 这些实体中的每一个都是forFeature吗? ?
  • 或者所有这些东西都应该放在一个地方并有一个entity功能让我的商店看起来和现在一样?
  • 最佳答案

    forFeature旨在用于需要以惰性方式注册的 reducer ,例如 forChild相比 forRoot .

    我认为这方面的经验法则是:

    如果只有特定的延迟加载模块需要 reducer,那么它应该是 forFeature对于该模块,因此只有在加载该模块后才会注册。

    一旦 reducer 需要在模块之间共享(无论是否延迟加载),那么它就需要在您的应用程序中处于更高的抽象级别,并且应该转到 forRoot。版本(全局可访问的“启动时”)

    总而言之:

  • 你的实体结构对我来说似乎很好。
  • 我会将港口/国家/货币与您对文件结构的其他方式类似。
  • 仅使用 forFeature 中的状态切片如果仅该功能模块需要它,并且该模块是 lazy loaded .
  • 关于angular - 具有多个相关实体的ngrx `forFeature`,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49501018/

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