What is the best structure for app using ngrx?

ぐ巨炮叔叔 提交于 2019-12-21 07:22:33

问题


Structure 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

OR

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

回答1:


I have found the first structure to suit well for a rather small app when using reducers, actions or others in several SMART components in an app.

Although it promotes the separation of concerns, I have found it rather tedious to jump between the various directories.

Usually, working with, i.e, user.reducer.ts, would involve working with the other files: effect, actions etc. So, the 2nd approach seems a bit more tidy.

I would like to suggest a 3rd structure that may fit and one which follows the "barrel" approach in 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

With this structure, the user directory is a barrel which exposes the various logics components which can be imported separately just by importing the user, i.e:

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

I'm experimenting with these approaches in my open source media player app - Echoes Player - http://github.com/orizens/echoes-player
As mentioned in another comment, these strategies and architecture applied to echoes player are compiled in the ngrx styleguide




回答2:


I follow this guide for best ngRx practices and structure:

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

The second way you mentioned is the best because (quoting from the style guide):

DO create separated files in the reducer's directory for: reducer, reducer's spec, reducer's actions and reducer's selectors. Finally, use index.ts as a barrel for exporting each file's content. Why? it's easier when developing to locate each relevant class/file



来源:https://stackoverflow.com/questions/38497719/what-is-the-best-structure-for-app-using-ngrx

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!