Reduxが好きです。シンプルで強力です。
しかし、私が実際の言葉でそれを使い始めると、一つの建築的な質問が私を怒らせます。Reduxを使用してビジネスロジックを特定する
ビジネスロジックの場所を特定するにはどうすればいいですか?私はそれを見つけるための2つの可能な場所があるので
:
- アクションクリエーター(AC)
- ストアレデューサー(SR)を
[AC] -> [Action] -> [SR]
以下は3例です。
Ex。 1と2 - 同期シナリオでACとSRでビジネス上の決定を見つける。
Ex。 3 - 非同期シナリオでACで行われたビジネス意思決定。
私のプロジェクトでは、ビジネス上の意思決定がどのようにACとSRの間に非常に急速に広がっているのか気づいたことがあります。ですから、私が何かをデバッグしたいときは、私は自分自身に質問しなければなりません。
アーキテクチャ的には、AC/SRではなく、ドメイン単位でBLを分割したいと考えています。
私のポイント:私は、ホットリロード、タイムトラベルをする純粋な減速の利点を理解する/リドゥが可能な特徴アンドゥながら、私はそのためのロジックの保守性を取引する準備ができていますかわかりません。
まだ、Reduxでは1週間しかありません。
私は何を欠席しましたか?
例1(シンク、決定が減速している):
// action-creators.js
export function increment() {
return {
type: 'INCREMENT'
}
}
export function decrement() {
return {
type: 'DECREMENT'
}
}
// counter-reducer.js
export default function counter(state = 0, action) {
switch (action.type) {
case 'INCREMENT':
return state + 1 // (!) decision of how to '(in|de)crement' is here
case 'DECREMENT':
return state - 1
default:
return state
}
}
例2(同期、意思決定アクション作成者である):
// action-creators.js
export function increment() {
return (dispatch, getState) => {
return {
type: 'CHANGE_COUNTER',
newValue: getState() + 1 // (!) decision of how to '(in|de)crement' is here
}
};
}
export function decrement() {
return (dispatch, getState) => {
return {
type: 'CHANGE_COUNTER',
newValue: getState() - 1
}
};
}
// counter-reducer.js
export default function counter(state = 0, action) {
switch (action.type) {
case 'CHANGE_COUNTER':
return action.newValue
default:
return state
}
}
例3(非同期、意思決定はアクション作成者にあります):
// action-creators.js
export function login() {
return async (dispatch, getState) => {
let isLoggedIn = await api.getLoginState();
if (!isLoggedIn) { // (!) decision of whether to make second api call or not
let {user, pass} = getState();
await api.login(user, pass)
}
dispatch({
type: 'MOVE_TO_DASHBOARD'
})
};
}
// some-reducer.js
export default function someReducer(state = 0, action) {
switch (action.type) {
case 'MOVE_TO_DASHBOARD':
return {
...state,
screen: 'dashboard'
}
default:
return state
}
}
私はこれに1つの答えはないと思いますが、私はディレクトリごとにビジネスロジックをグループ化しました。各ディレクトリには、1つのアクションファイル(Nのエクスポート)と1つのレデューサーファイル(Nのエクスポート)が含まれます。また、あなたの行動が時間とともにどのように進化するかを考えるのにも役立ちます。私は、アクションが現在または将来の副作用を含んでいる可能性があるため、アクションには設計に多くの時間が必要であることがわかりました。 –
Danはそれについて次のように言います。http:// stackoverflow。com/questions/35357629/where-to-put-model-specific-business-in-a-redux-app – JordanHendrix
@MattLo、ドメイン単位でロジックをグループ化し、 、エンティティなど)、各フォルダに2つのファイル(ACファイルとSRファイル)があります。 – Artin