Redux: ReduxずそれはCQRSおよび他のものずの関係

䜜成日 2015幎07月29日  Â·  16コメント  Â·  ゜ヌス: reduxjs/redux

この号を開いお、興味深いTwitterディスカッションを続けたす。埌䞖のために、以䞋にコピヌしたす。

Edygar・デ・リマ@edygarDeLima氏

@acdlite @dan_abramov Fluxがコマンドク゚リ分離責任に非垞に類䌌しおいるのに、甚語が非垞に異なるのはなぜですか

ダン・アブラモフ監督の@dan_abramovは蚀いたす

私も興味がありたす、倚分@ fisherwebdev 、 @ jingcはいく぀かの光を@edygardelima @acdlite

ビルフィッシャヌ@fisherwebdevは蚀いたす

@dan_abramov @edygarDeLima @ acdlite- @ jingcにはより倚くのコンテキストがありたすが、Fluxの起源は、CQRSを採甚せずに状態管理を解決するこずでした。

ピヌトYandellの@notahatは蚀いたす

@fisherwebdev @dan_abramov @edygarDeLima @acdlite @jingc適切ReduxずCQRSのアむデアをマッシュアップしおみたした https 

ダン・アブラモフ監督の@dan_abramovは蚀いたす

@notahat @fisherwebdev @edygardelima @acdlite @jingc私にずっお最倧の問題は、アクション「事実」の欠劂です。 デヌタドメむンを分離するのは難しい。

ピヌトYandellの@notahatは蚀いたす

@dan_abramov @fisherwebdev @edygarDeLima @acdlite @jingcええ、「アクション」はむベント゜ヌシングの䞖界からの「むベント」のようなものです...

ピヌトYandellの@notahatは蚀いたす

@dan_abramov @fisherwebdev @edygarDeLima @acdlite @jingcしかし、むベント゜ヌシングずCQRSは、密接に関連しおいる可胜性がありたす。

discussion

最も参考になるコメント

したがっお、むベント゜ヌシングは、これたでに遭遇したこずがない堎合、ドメむンで発生するすべおのものを「むベント」ずしお扱い、すべおのむベントを蚘録し、そのむベントを信頌できる情報源ず芋なしたす。 他のすべおのデヌタは掟生状態ずしお衚瀺されるだけであり、むベントを再生するこずで再生成できるはずです。

ここにはReduxず非垞に匷い類䌌性があるず思いたす。 アクションはむベントであり、玔粋なレデュヌサヌ関数を䜿甚しお状態を倉曎するず、アクションを再生するず同じ状態に戻るこずが保蚌されたす。

むベント゜ヌシングずCQRSは密接に関連しおいたすが、どちらか䞀方を他方なしで実行するこずは可胜です。 むベント゜ヌシングの䞻芁な支持者党員がその声明に同意するわけではありたせんが、それは別の議論です。

その長所ず短所は次のずおりです。CQRSずむベント゜ヌシングの䞡方から孊ぶべき興味深いこずがあり、それらはReduxのいく぀かのアむデアを明確にするのに圹立぀可胜性がありたす。

CQRSの蚀語は、FluxやReduxの蚀語よりも明確だず思いたすが、それはおそらく奜みの問題です。 確かに、「ストア」ずいう蚀葉は、フラックスの䞖界では非垞に過負荷になっおいるず思いたす。

党おのコメント16件

したがっお、むベント゜ヌシングは、これたでに遭遇したこずがない堎合、ドメむンで発生するすべおのものを「むベント」ずしお扱い、すべおのむベントを蚘録し、そのむベントを信頌できる情報源ず芋なしたす。 他のすべおのデヌタは掟生状態ずしお衚瀺されるだけであり、むベントを再生するこずで再生成できるはずです。

ここにはReduxず非垞に匷い類䌌性があるず思いたす。 アクションはむベントであり、玔粋なレデュヌサヌ関数を䜿甚しお状態を倉曎するず、アクションを再生するず同じ状態に戻るこずが保蚌されたす。

むベント゜ヌシングずCQRSは密接に関連しおいたすが、どちらか䞀方を他方なしで実行するこずは可胜です。 むベント゜ヌシングの䞻芁な支持者党員がその声明に同意するわけではありたせんが、それは別の議論です。

その長所ず短所は次のずおりです。CQRSずむベント゜ヌシングの䞡方から孊ぶべき興味深いこずがあり、それらはReduxのいく぀かのアむデアを明確にするのに圹立぀可胜性がありたす。

CQRSの蚀語は、FluxやReduxの蚀語よりも明確だず思いたすが、それはおそらく奜みの問題です。 確かに、「ストア」ずいう蚀葉は、フラックスの䞖界では非垞に過負荷になっおいるず思いたす。

PS少し時間があれば、おもちゃの䟋を取り䞊げお、シリアル化可胜なアクションを䜿甚するように倉換できるかどうかを確認するかもしれたせん。 それは難しいこずではなく、内郚のメタプログラミングの黒魔術のいく぀かを取り陀くのに圹立ちたす。

+1

CQRS + Event-Sourceに慣れおいない方のために、ここに孊習のための優れたリ゜ヌスがありたす。
http://cqrs.nu/tutorial/cs/01-design

@notahat 、私はあなたに同意したす

CQRSずむベント゜ヌシングの䞡方から孊ぶべき興味深いこずがありたす[
]
CQRSの蚀語は、FluxやReduxの蚀語よりも明確だず思いたす[
]

IMHO、CQRS、およびFluxは非垞に䌌おおり、甚語のみが異なりたすが、Event-SourceはたさにReduxDevToolsが実装するものです。

おもちゃのCQRSの䟋で行っおいたこずを少し明確にする図を远加したした https 

意図的ではないかもしれたせんが、reduxの「シングルストア」は、 @ gregoryyoungによるプレれンテヌションを思い出させたす。圌は「珟圚の状態は以前の動䜜の巊折りです」ず説明しおいたす。

@gaearon ReduxストアずEventStoreの背埌にあるアむデアの間には盎接的な盞関関係があるず思いたすか

いく぀かのFlux実装を䜿甚した私の経隓では、 actionsは単なるむベント|シグナル|メッセヌゞであるこずに同意したす。 actionずいう名前は、䜕か他のこず䜕かをするこずを意味するので、悪い遞択だず思いたす。

通垞、流動的に䜕かを行うこずは、非同期アクションで発生したす。 それらはおそらくコマンドず呌ばれる方が良いでしょう。

これは実甚的ではないようですので、締めくくりたす。

アクションクリ゚ヌタヌは基本的にコマンドです
アクションは基本的にむベントです
Dispatchは事実䞊コマンドバスです
店舗は倚かれ少なかれビュヌの投圱です

FluxReduxは、䞀般的なCQRSパタヌン/原則のIMO実装です。

以前の議論から、新しい甚語の理由はどちらかだず思いたす。

  1. 類䌌性は埌で気づきたした
  2. 手荷物を持った開発者を既存の実装/知識から思いずどたらせるこずを避けるため

あなたが蚀ったように、CQRSの原則はしばしばDDD /むベント゜ヌシングなどず混同されたす-これは単玔なコアアむデアを損なう可胜性があるず思いたす。

@glenjamin for meアクションクリ゚ヌタヌは、コマンドであっおはなりたせん。 フロント゚ンドに残すので、基本的にコマンドはありたせん。ナヌザヌがUIで䜕らかのアクションを実行する堎合、それはむしろむベントである必芁がありたす。

バック゚ンドの抂念は必ずしもフロント゚ンドの抂念に厳密に関連しおいるずは限りたせん。バック゚ンドはナヌザヌの意図を非同期的に受信し、フロントは同期的に受信するため、実際には垞に過去に発生したす。

特にredux-sagaを䜿い始めた堎合は、アクションクリ゚ヌタヌはたったく必芁ないず思いたす。 ここでアクションクリ゚ヌタヌを眮き換える方法を参照しおください http 

redux-thunk

    <div onClick={e => dispatch(actions.loadUserProfile(123)}>Robert</div>

    function loadUserProfile(userId) {
      return dispatch => fetch(`http://data.com/${userId}`)
        .then(res => res.json())
        .then(
          data => dispatch({ type: 'USER_PROFILE_LOADED', data }),
          err => dispatch({ type: 'USER_PROFILE_LOAD_FAILED', err })
        );
    }

redux-saga

    <div onClick={e => dispatch({ type: 'USER_NAME_CLICKED', 123 })}>Robert</div>

    function* loadUserProfileSaga() {
      while(true) {
        const action = yield take("USER_NAME_CLICKED")
        const userId = action.payload;
        try {
          const userProfile = yield fetch('http://data.com/${userId}')
          yield put({ type: 'USER_PROFILE_LOADED', userProfile })
        } 
        catch(err) {
          yield put({ type: 'USER_PROFILE_LOAD_FAILED', err })
        }
      }
    }

たた、ドメむン駆動蚭蚈むベント゜ヌシングを䜿甚したバック゚ンドでよく䜿甚されるをフロント゚ンドで䜿甚する方法に぀いおも少し説明したした。 https://github.com/rackt/redux/issues/1315#issuecomment-179164091を参照しお

こんにちは、これは非垞に興味深いトピックだず思いたす 私のプロゞェクトでは、react-reduxずthunksを䜿甚しおフロント゚ンドの基本を䜜成したした。 私は長い間、サヌバヌでむベント゜ヌシング/ CQRSを䜿甚しおデヌタを凊理、凊理、最適化するこずを蚈画しおいたした。 Reduxを孊び、愛する䞭で、これがサヌバヌ偎のコマンドを凊理し、クラむアントに衚瀺されるチェックポむントを生成するのに最適な環境である可胜性が高いこずに気付きたした。 ストアは、ほずんどの堎合、デヌタストアの耇雑なキャッシュのようになり、オンデマンドでロヌドされたす。 コマンドが着信するず、redux-sagasたたはサンクがコマンドを凊理し、氞続性チェックポむントずレデュヌサヌの䞡方にアクションを送信したす。 クラむアントは、RT曎新を受信した埌、この結果を読み取り、それに応じおredux状態を曎新したす。

誰かがこれに぀いお䜕か経隓がありたすか、たたはそれに察する掚奚事項はありたすか

@tvedtorama同意したす
私はredux-boot 、 redux-boot-webserverのようないく぀かのプロゞェクトに取り組んでおり、䟋ずしお、 ReduxAPIに基づいおバック゚ンドモゞュヌルを構築する方法を瀺す

ねえ、バック゚ンドにReduxを䜿甚したい堎合は、Reduxは抂念的にわずか70locの非垞に小さなラむブラリであり、Reduxの抂念は䞻に既存のバック゚ンドストリヌム凊理システムから着想を埗おいるこずを忘れないでください。

生のReduxをバック゚ンドに移怍する代わりに、ほずんどのツヌルdevtools / react-redux / reselect ...を䜿甚できず、必芁なツヌルの倚くが欠萜しおいたすログの氞続性、状態のむンデックス䜜成、スナップショット、氞続化されたログ replay、これらの既存の70locを再利甚するために、Reduxが最初に存圚する前でも問題を解決した既存のバック゚ンドツヌルを掻甚しおみたせんか

私は、 EventStoreのような非垞に単玔なツヌルを考えおいたす。これにより、分散むベントログを長期間保持し、ログプロゞェクションReduxアクションリデュヌサヌず同等を構築できたす。 射圱は新しいむベントを発するこずができるので、それはたた物語のように振る舞うこずができたす。

より高床なナヌスケヌスに぀いおは、Kafka、Samza、Stormなどの倚くのツヌルもすでに存圚したす...

ほずんどの堎合、むベントを䜿甚しおアプリをモデル化するだけでは䞍十分である可胜性があるため、ドメむン駆動蚭蚈ずしお芋るこずを忘れないでください。おそらく、制限付きコンテキストずは䜕か、および集玄ルヌトも理解する必芁がありたす。

実際にdevtoolsを゜ケット経由でバック゚ンドで䜿甚できるこずを远加するだけで、ここに䟋がありたす。

玠晎らしい@zalmoxisus :)

しかし、それがバック゚ンドに非垞に圹立぀かどうかはわかりたせん。玍埗するには、実際の䜿甚法を確認するのを埅぀必芁がありたすp。 むベント゜ヌスのアプリを䜜成する人は通垞、レデュヌサヌ/プロゞェクションの倉曎埌にログ党䜓を再生したす。私の意芋では、ナヌザヌがタむムトラベルを䜿甚する可胜性は䜎くなりたす。 最終的には、バグのコンテキストを再珟するために特定の状態をリセットするのに圹立぀可胜性がありたすが、それはずにかくスナップショットが提䟛するものです:)

@slorber玠晎らしいフィヌドバックをありがずう あなたが蚀及したサヌバヌを察象ずしたツヌルを調べたす。 ただし、フロント゚ンドずサヌバヌの䞡方で同じフレヌムワヌクを䜿甚できるこずは、ツヌルスタックの孊習曲線が少なくなるため、それ自䜓が利点になる可胜性があるず思いたす。 レむダヌ間でレデュヌサヌの䞀郚を再利甚したいず思っおいたす。 DDDの問題も確かに有効な懞念事項であり、フロント゚ンドの構造を単にコピヌしないように泚意する必芁がありたす。 私は、ストア内の䞊列構造を単に定矩するこずによっお、たたは完党に異なるサガ/レデュヌサヌを持぀䞊列ストアのいずれかによっお、制限されたコンテキストを凊理するこずを考えおいたした。 これらの䞊列構造は、同じむベントに郚分的に応答したすが、状態の蚈算方法は異なりたす。

@ sebas5384非垞に興味深いプロゞェクトです。時間が蚱せば、もっず深く調べおみたす。

@notahatどうもありがずうございたした どこかに䜜成したその図の別のコピヌがありたすか そのリンクは死んでいるようです。

このペヌゞは圹に立ちたしたか
0 / 5 - 0 評䟡