使用ngrx的应用程序的最佳结构是什么?

Tuo*_* Le 16 ngrx angular

结构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
Run Code Online (Sandbox Code Playgroud)

要么

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
Run Code Online (Sandbox Code Playgroud)

Ore*_*rhi 14

我在应用程序中的几个SMART组件中使用reducer,actions或其他应用程序时,我发现了第一个适合相当小的应用程序的结构.

虽然它促进了关注点的分离,但我发现在各个目录之间跳转相当繁琐.

通常,使用,即,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
Run Code Online (Sandbox Code Playgroud)

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

import { reducer as UserReducer } from '../store/user'; 
// or
import { UserReducer } from '../store/user' 
Run Code Online (Sandbox Code Playgroud)

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