20

结构1

reducers
   index.ts //Combine all reducers
   user.reducer.ts
   product.reducer.ts
actions
   index.ts  //Combine all actions
   user.action.ts
   product.action.ts
effects
   index.ts //Combine all effects
   user.effect.ts
   product.effect.ts
selector
   //Combine all selectors
   user.selector.ts
   product.selector.ts

或者

user
  user.reducer.ts
  user.action.ts
  user.effect.ts
  user.selector.ts
product
  product.reducer.ts
  product.action.ts
  product.effect.ts
  product.selector.ts
reducers.ts //Combine all reducers
actions.ts //Combine all actions
effects.ts //Combine all effects
selectors.ts //Combine all selectors
4

2 回答 2

17

当在应用程序的多个 SMART 组件中使用减速器、动作或其他组件时,我发现第一个结构非常适合相当小的应用程序。

尽管它促进了关注点的分离,但我发现在各个目录之间跳转相当乏味。

通常,使用 ie,user.reducer.ts将涉及使用其他文件:效果、动作等。因此,第二种方法似乎更整洁一些。

我想建议一种可能适合的第三种结构,一种遵循angular2中的“桶”方法的结构:

- store
    - user
        - index.ts
        - user.actions.ts
        - user.effects.ts
        - user.reducer.ts
        - user.reducer.spec.ts

    // the store definition file - will expose reducer, actions etc..
    // for connecting those to the app in the bootstrap phase
    - index.ts

在这种结构下,用户目录是一个桶,暴露了各种逻辑组件,只需导入用户即可单独导入,即:

import { reducer as UserReducer } from '../store/user'; 
// or
import { UserReducer } from '../store/user' 

我正在我的开源媒体播放器应用程序中尝试这些方法 - Echoes Player - http://github.com/orizens/echoes-player
正如另一条评论中提到的,这些应用于 echoes 播放器的策略和架构是在ngrx中编译的时尚指南

于 2016-07-25T06:28:22.880 回答
3

我遵循本指南以获得最佳 ngRx 实践和结构:

https://github.com/orizens/ngrx-styleguide

您提到的第二种方式是最好的,因为(引用样式指南):

在 reducer 的目录中为以下内容创建单独的文件:reducer、reducer 的规范、reducer 的操作和 reducer 的选择器。最后,使用 index.ts 作为导出每个文件内容的桶。 为什么?开发时更容易找到每个相关的类/文件

于 2017-11-02T22:24:33.290 回答