新しいものはすべお忘れ去られおいる

画像
メアリヌ・゚ノァンス・ピクチャヌ・ラむブラリヌ/アラミヌ-゚リス、R。1994。海の怪物。 ロバヌト・ヘむル株匏䌚瀟

JavaScriptの䞖界のトレンドの玉座にある䞀連のフレヌムワヌクずラむブラリは、もはやニュヌスではありたせん。 他の分野の開発者もこの点で私たちをからかいたす。

そのため、䜜業の過皋で、qooxdoo、jQuery、Ext JS、Backbone.js、Knockout.js、Ember.js、Angular、Reactなど、さたざたなラむブラリずフレヌムワヌクを飛び越える必芁がありたした。

このフレヌムワヌクたたはそのフレヌムワヌクの遞択は、必ずしも任意ではありたせん;アりト゜ヌスおよび人員配眮モデルは、私の仕事に特定の制限を課したす。 同じ地域の人が私を理解しおくれるず思いたす。

私が最埌に決めたのは、FacebookのReactです。 私はそれを隠したせん。同僚は、私がこのラむブラリヌに切り替えるこずに非垞に消極的であったこずを確認したす。移行は快適ゟヌンを離れるこずを意味したす。 特に、FluxずReduxの人の建築スタむルの「新しい」再考、「新しい」甚語-アクション、ストア、ディスパッチャヌなど、倚くの新しい蚀葉が怖かったです。

同意しお、以前のすべおの「ハンマヌず釘」では、蟞曞は通垞、 Model-View- * Controller || Presenter || Adapter || ViewModel || Whateverのようなものになりたした。

この蟞曞の私の理解は、この写真のように芋えたした。

画像

これは、かなり人気のあるUdacity MOOCプラットフォヌムの「JavaScript Design Patterns」コヌスの写真です

私はこの写真が奜きでした。 そのため、倚数のクロヌンずMVCのさたざたな解釈が存圚する䞖界を簡単に認識できたした。

ビュヌがありたす-これはhtml、css、およびそれらすべおです。 モデルがありたす-これはJSONデヌタであり、それを取埗した堎所です。 そしお、クラヌケン/タコ/ダスデ/ムノゎルカ-デヌタずビュヌを組み合わせた䞀皮の神話䞊の生き物です。

MVOはすべおの質問に察する答えです。

画像

そしお突然Facebookがやっお来お、MVCが悪いず蚀っお 、それず混同し、䟝存関係のこのネットワヌクから抜け出すこずができたせん

画像

そしお、圌は銀の匟䞞があるず蚀いたす- フラックスず単方向デヌタフロヌ 

画像

それから他の誰かが来お、Fluxは耇雑だず蚀いたす、Reduxはあなたが必芁なものです。
Facebookであるため、これらの人たちは倚くのこずを知っおいるので、あなたは信じる傟向がありたす。

珟圚、すべおがこのアヌキテクチャスタむルずラむブラリによっお決定されおいたす。 フロント゚ンドが必芁ですか わかりたした、React、Redux、およびサンク、サガ、ストヌリヌブック、themr、flow、およびhatの圢でさらにいく぀かの荷物を取りたす。

いいえ、Reactは玠晎らしいラむブラリだずは思いたせん。 Virtual DOMテクノロゞヌにずおも満足しおいたす。これは非垞に重芁なタスクを本圓に解決したす。 リアクティブプログラミングパラダむムにリンクするこずも、私を幞せにしたす。 しかし、ここに「新しい」建築様匏がありたす...

私たちの業界は急速に発展しおいたす-それは良いこずです。 2017幎には、1980幎に比べお数癟倍のプログラマヌがいたす-これも良いこずです。 倚くのクヌルなツヌルは、アプリケヌションプログラマの生掻を楜にするように芋えたす-これも間違いなく良いこずです。 しかし、アプリケヌションプログラマである私たちは考えるこずを枛らし始めおいたす。 少なくずもそう思う。 プロのプログラマヌずしおの5幎間の仕事で、私は平凡で玛らわしいコヌドをたくさん曞きたした。

しばらくの間、私はやめるこずにしたした。 Facebookのようにさらに先に進む前に、Webアプリケヌション開発を再考する必芁がありたす。 Unidirectional DataflowがこのWebの問題を解決する理由、Facebookの前に誰もそれをしなかった理由、MVCがあらゆる方向の矢印でそれほど悪い理由を理解しおください。

そしお、私は逆の順序で始めたした。

MVC


他のトップ開発䌚瀟がこのアヌキテクチャスタむルの定矩を提䟛しおいるものを芋お始めたした。 実際、ほずんどの堎合、私たちはこれを行い、有胜な人、䜓重のある人に䌚いに行きたす。

Facebookからの解釈に慣れたした。

画像

以䞋は、Microsoftの解釈です。

画像

モデルずビュヌは反察方向に接続されおいたせんが、説明から明らかなように、モデルはビュヌからの状態芁求に応答する必芁がありたす。

぀たり 䞀般的に、解釈はFacebookの解釈ず同じです。

私たちはアップルに行きたす、これらの人は2぀の完党なスキヌマを持っおいたす䌝統的なバヌゞョンずCocoa APIのバヌゞョン

画像

画像

うヌん、面癜い。 最初のオプションはわかりにくいようです。 ここでは、以前の解釈のように、モデルは䞡方向の衚珟ず接続されおいたす。 ただし、コントロヌラヌずの通信は䞀方向ではありたせん。 ナヌザヌのアクションは、ビュヌを介しおコントロヌラヌに送られたす。

2番目のバヌゞョンでは、モデルず衚珟は盎接関連しなくなりたした。 むンタラクションはコントロヌラヌを通過し、タコの絵のように芋えたす。

そしおここにGoogleがありたす

画像

たあ、あなたはすべお同じクラヌケンを理解しおいたす。

画像

以䞋は、Martin Fowlerのブログからの抂略図ですずころで、圌はGUIアヌキテクチャに関する非垞に興味深いシリヌズの蚘事があり、MVCの解釈に぀いお詳しく説明しおいたす。

画像

以䞋は、Javaなどの近隣䞖界からのMVCの解釈です。 JSPを盎接知っおいたす。 暗い過去、いわば。

画像

ただ混乱しおいたせんか シリヌズのXファむルの様子を芚えおいたすか 真実は近くのどこかにありたす。

1぀のこずは明らかです。すべおのオプションは䌌おおり、それらはすべおほが同じですが、Model-View-Controllerの解釈には定説がありたせん。 なぜそう どうやら、元の文蚀がそれほど厳密ではなかったためです。 それずも倚分それは

倚くの堎合、技術を非垞に衚面的に刀断したす。 私たちは、元の情報源を開き、私たち自身の意芋を圢成する代わりに、信仰に関する他の人々の解釈を受け入れたす。

MVCの䞻な゜ヌスは䜕ですか

1970-80幎代


ボブおじさんが圌のセミナヌで尋ねたのず同じ質問で蚘事を始める䟡倀があるず思いたす。

これが誰か知っおいたすか

画像

これは、この建築スタむルを最初に説明したMVCのたさに創始者であるオスロ倧孊の教授であるTrygve Reenskaugです。 これは、1978幎にれロックスPARCのLearning Research Groupを蚪れたずきに起こり、珟代タブレットの類䌌物であるDynabookプロゞェクトの基瀎ずしお、この抂念の基瀎が築かれたした。

圌は次の匕甚でクレゞットされおいたす

MVCは、倧芏暡でわかりにくいデヌタセットを制埡するずいうナヌザヌの問題に察する䞻な解決策ずしお考えられおいたした。 最も難しかったのは、さたざたなアヌキテクチャコンポヌネントの名前です。 泚Wikipedia

どういうわけか、この声明はFacebookの写真に反しおいたす。

クリ゚むタヌ自身がこの建築スタむルをどのように描いおいるのかず思っおいたした。 そしお、その時代の興味深いスキヌムがいく぀かありたす

画像

画像

画像

面癜い写真ですね。 私がそれらに぀いお䞀番気に入っおいるのは、ナヌザヌの倖芳です。 これは、クラむアント゜フトりェアのアヌキテクチャを蚘述するスキヌムにずっお重芁であるように思えたす。

2番目の興味深い点は、初期のサヌキットでのコントロヌラヌずプレれンテヌションの統合領域です。 TrygweはこれをEditorずしお定矩し、埌でToolずしお定矩したす。

この抂念に関する圌の最初のメモでは、モデル、ビュヌ、コントロヌラヌ、゚ディタヌずいう4぀の甚語が定矩されたした。 ゚ディタヌは、プレれンテヌションず、マりスやキヌボヌドなどの入力デバむスずの間のむンタヌフェむスずしお、プレれンテヌションがオンデマンドで䜜成する䞀時的なコンポヌネントです。

TrygveがXerox PARCを離れた埌、Jim Altoffず他の人々はSmalltalk-80クラスラむブラリのMVCの最初のバヌゞョンを実装および実装したした。 教授はこの仕事に関䞎しおいたせんでした。

ゞム・アルトフ教授によるず、「コントロヌラヌ」ずいう甚語の解釈は倚少異なりたす。

元のMVCの重芁な偎面は、そのコントロヌラヌがその埓属ビュヌの䜜成ず調敎を担圓するこずでした。

埌の泚で、ビュヌはそれ自䜓に関連するナヌザヌ入力を受け入れお凊理したす。 コントロヌラヌは、コントロヌラヌ/ビュヌアセンブリ党䜓に関連する入力を受け取り、凊理したす。これは珟圚、 ツヌルず呌ばれおいたす。

ずころで、Martin Fowlerはこのタンデムプレれンテヌションレむダヌを呌び出したす。

Trygveは、クラむアントシステムの䞻芁なプレヌダヌぱンドナヌザヌ メンタルモデル ずドメむンデヌタ ドメむンモデル/デヌタ であるず指摘しおいたす。 たた、MVCの䞻な目暙は、ナヌザヌのメンタルモデルずコンピュヌタヌに存圚するデゞタルモデルずの間のギャップを埋めるこずです。

この抂念は、SmallTalkの時代であり、Webアプリケヌションの抂念がそのように存圚しなかったずいう事実にもかかわらず、今日に関連しおいたす。 ナヌザヌずデヌタの盞互䜜甚は、プログラムの本質です。 これらのオブゞェクトの間には、盞互に通信するためのレむダヌがありたす。

画像

プログラムず人の盞互䜜甚の基瀎は、垞に入力および出力デヌタストリヌムです。 䞀般化されたスキヌムは次のようになりたす。

画像

したがっお、コントロヌラヌをデヌタ゚ントリポむントずしお解釈し、ビュヌを出口ポむントずしお解釈したす。 ゚ントリポむントずは、呚蟺機噚ずプレれンテヌションコントロヌルの組み合わせです。 同時に、ビュヌずコントロヌラヌは暗黙的に接続されたすが、盎接通信したせん。 プレれンテヌション。ナヌザヌアクションに関するメッセヌゞをコントロヌラヌに送信する矩務を委任したかのように。

入力ストリヌムはサブゞェクトモデルの状態を倉曎できたすが、モデルはデヌタ出力ポむントを䜿甚しおナヌザヌにその倉曎を通知する必芁がありたす。

画像

Trygveの回路の1぀では、コントロヌラヌずプレれンテヌションの接続は1察倚です。 なんで 圓時は、ナヌザヌむンタヌフェむス䞊のボタンや矢印がビュヌだったからだず思いたす。 それ以降、䜕か倉曎はありたしたか 私はそうは思いたせん。

クラヌケンの解釈では、ビュヌはペヌゞ党䜓を意味するず理解されるこずがよくありたす。 実際、それは垞にコンポヌネントのツリヌです。 各コンポヌネントは、衚珟ずしお機胜する可胜性がありたす。

画像


ナヌザヌむンタラクションレむダヌず倚察倚モデルの関係。 これは珟圚のプログラムに圓おはたりたす。1぀のペヌゞにさたざたなサブゞェクトモデルのデヌタず特性を衚瀺できたす。䞀方、モデルはデヌタ構造にできたす

画像

MVCの䞀般化された説明を定匏化しおみたしょう。


いく぀かの盎接的な単方向デヌタフロヌが出おきたす

画像

りィキペディアからの画像

画像

しかし、これはFacebookずCoが提䟛するものず同じではないでしょうか



画像

革呜は起こらなかったこずがわかりたす。 䜕も倉わっおいたせん。 すべおは、MVCのプリズムを通過しおいたす。 この抂念の次の解釈ず抂念の眮換のみを芳察したす。

そしお、Facebookの代衚者はそのずきどのような問題に぀いお話しおいたしたか

おそらく、時間の経過ずずもに、システムの職務分離の抂念の解釈が特定のテンプレヌトの実装に削枛されおいるずいう事実から始める必芁がありたす。

Appleの図をご芧ください。 それらは特定のパタヌンでシステムのレむダヌを蚘述したすリスナヌ、戊略、構成。 この誀りは、「 ギャングオブフォヌ 」の登堎以来続いおいたす。

サヌバヌずクラむアントでのコン゜ヌル゜フトりェアの進化により、初期の定矩にその痕跡が远加されたした。

抜象化は具䜓的なものに倉わりたした。

画像

問題に関しおは、問題はただ同じであり、長い間衚明されおきたした。 Flux / Reduxでも同じです。 そしお、他のコンセプトずフレヌムワヌクのために。 最初は、玔粋な思考を持ち、シンプルなものから始めたす。 しかし、時間の経過ずずもに、コヌドの思考の玔粋さを維持しなくなるず、ひどいクラヌケンパスタモンスタヌに倉わりたす。 プロゞェクトはこのタヌルピットで立ち埀生し始めたす。

画像

画像

ReduxずFluxは、プロゞェクトのアヌキテクチャをよりクリヌンで理解しやすいものにするのに圹立ちたすか 圌らはこの玔粋な考えを維持したすか これらの矢印のボヌルにスラむドできないツヌルはありたすか

ツヌルおよび定期的な解釈ずしお、圌らには生呜暩がありたす。 しかし、珟圚のプロゞェクトでは、Reduxを埐々に削枛し始めたした。 これが䜕をもたらすのか芋おみたしょう。 この玔粋な思考を維持するこずは可胜でしょうか、それずも再び沌地になりたすか。

結論


人間ずコンピュヌタヌの盞互䜜甚の分野で根本的な倉化が起こるたで、党䜓の抂念は垞にこれに基づいおいたす。

画像

すべおがこの芳点を通過したす。 そしお、さたざたな方向のこれらの数癟の矢印の問題は、この抂念でさらに生き続けたす。

誰かが䜕ずかきれいに曞くこずができただけなのに、誰かがただ自分の沌地で立ち埀生しおいたす。
そしお、この抂念の端はこの沌の゜ヌスコヌドで消去されたす。 私は経隓から知っおいたす、圌自身が倚くのプロゞェクトをこの泥沌に倉えたからです。

あなたはおそらく質問をしたいでしょう「 たあ、クヌルな男、そしお次は䜕ですか 」
䜕も、このテキストを私の脳のダンプずしお扱いたせん。

これで、これらの甚語に没頭できたこずをうれしく思いたす。これは、Webアプリケヌションのクラむアントレむダヌの開発の「再考」です。 少なくずも私にずっおは、MVCを新しい方法で解釈し始めたした。 これらの甚語のより抜象的な解釈。

たた、自分の考えを発衚する機が熟したこずを嬉しく思いたす。 おそらく、しばらくするず私の意芋が倉わり、このテキストに戻っお笑うのは面癜いでしょう。

PS䞊蚘のすべおは、私の謙虚な䞻芳的な意芋ず私の解釈です。 そしお、あなたずはどうですか artur.basak.devingrodno@gmail.comの他の芖点を芋お喜んでいたす

蚘事の続き
->「クラヌケンの謎」-MVCなどの歎史に぀いお簡単に説明したす 。
->「クラヌケンハンティング」-フラックスは耇雑で、Reduxはロヌルバックせず、すべおをArtuxに単玔化したす

参照資料


→ MVC Wiki
→ Trygver MVC
→ フラックス
→ Apple MVC1
→ Apple MVC2
→ Google MVC
→ ボブおじさん
→ マヌティンファりラヌMVC

Source: https://habr.com/ru/post/J326046/


All Articles