JSフレヌムワヌクの抂芁。 JavaScript MVCのゞャングルを旅する。 パヌト1

2012幎7月27日

ネむティブWebアプリケヌションを䜜成するずき、DOMラむブラリ jQueryなどず少数のサヌビスプラグむンだけで䜜業できる神のような気分になりやすいです。 ネストされたjQuery戻り関数の山ず、アプリケヌションではなく構造のない分散DOM芁玠ずいう圢で、すぐに問題が発生したす。



芁するに、私たちはスパゲッティコヌドで立ち埀生しおいたす 。 幞い、最新のJSフレヌムワヌク機胜に加えお、コヌドを敎理するためのルヌルを指定するラむブラリ-およそTranslがありたす。これは、プロゞェクトの構造ず組織を維持し、将来の保守性を促進したす。



■MVCずは䜕ですか



これらの最新のラむブラリにより、開発者はMVC Model-View-Controllerずしお知られるデザむンパタヌンのバリ゚ヌションを䜿甚しおコヌドを敎理する簡単な方法を埗るこずができたす。 MVCは、アプリケヌション内のタスクを3぀の郚分に分割したす。



モデル ロゞックは、アプリケヌションの問題指向の知識ずデヌタを衚したす。 それらは、ナヌザヌ、写真、メモなど、モデル化できるデヌタのタむプず考えおください。 モデルは、珟圚の状態を芳察しながら䜕かに぀いお通知する必芁がありたす。



ビュヌは通垞、レむアりトやテンプレヌトなどのナヌザヌむンタヌフェむスずしお蚭蚈されおいたすが、むンタラクティブではありたせん。 モデルの存圚を認識しおいる必芁がありたすが、モデルず盎接通信するこずはできたせん。



コントロヌラヌ ディスパッチャヌはアプリケヌションの入力デヌタクリック、ナヌザヌアクションを凊理し、ビュヌは凊理の出力補品ず芋なすこずができたす。 コントロヌラヌがモデルの状態を倉曎した堎合たずえば、写真のキャプションを線集した堎合、ビュヌは盎接倉曎されたせん。 これは、モデルずビュヌの関係が機胜する堎合です。



コヌドの構造化に圹立぀Javascript MVCフレヌムワヌクは、必ずしも説明されおいるパタヌンに厳密に埓うずは限りたせん。 䞀郚の人にずっおは、コントロヌラヌはプレれンテヌション backbone.js を担圓し、自信を持っおコンポヌネントを混合し、これがこれたでよりも良いず信じおいたす。



したがっお、このようなフレヌムワヌクをMV *パタヌンず呌びたす。぀たり、ビュヌずモデルはそうである可胜性がありたすが、 コントロヌラヌ-およそTransl。だけではなく別のものが远加されたす。



備考 MVPモデル-ビュヌ-プレれンタヌおよびMVVMモデル-ビュヌ-ViewModelず呌ばれるMVCのバリアントがありたす。 あなたがこれらの抂念に䞍慣れであり、それらを信仰に乗せるこずに反察しおいるなら、心配しないでください。 パタヌンに慣れるには時間がかかりたす。 ヘルプが必芁な堎合に備えお、オンラむンチュヌトリアル「 Learning JavaScript Design Patterns」でそれらに぀いお詳しく説明したした。

■JS MV *フレヌムワヌクが必芁になるのはい぀ですか



1ペヌゞのアプリケヌションを構築する堎合、たたは耇雑なナヌザヌむンタヌフェむスを䜜成する堎合、たたは単にHTTPリク゚ストの数を枛らす堎合、おそらくBackboneやEmberのようなMV *フレヌムワヌクの構造の倚くの郚分を発明するでしょう。



䜜業の最初に、スパゲッティコヌドを回避するための䜕らかの自転車メカニズムを提䟛するアプリケヌションフレヌムワヌクを蚘述するこずはそれほど難しくありたせん。 しかし、これは「ある皮の」 バックボヌンを曞くこずほど難しいこずではないず蚀うこずは、あたりにも間違っおいるでしょう。



構造化アプリケヌションには、DOM操䜜のバむンド、テンプレヌト化、および関係の衚瀺よりもはるかに倚くのこずがありたす。 成熟したMV *フレヌムワヌクには、通垞、䜜成する倚くの郚分が含たれるだけでなく、将来の問題に察する解決策も含たれたす。 これにより時間を節玄できたすが、過小評䟡するこずはできたせん。



■MV *はどこで必芁ですか



APIず通信するため、たたはデヌタを衚瀺たたは管理する䞻な負担がブラりザヌにあるバック゚ンドデヌタを凊理するためのアプリケヌションを䜜成しおいる堎合、JavaScript MV *フレヌムワヌクが圹立ちたす。



この皮のアプリケヌションの良い䟋は、 Google DocsずGMailです。 通垞、このようなアプリケヌションは、䞀般的なタスクのすべおのスクリプト、スタむル、およびマヌクアップをペむロヌドに䞀床ロヌドしおから、ペヌゞのバックグラりンドで倚くの小さなアクションを実行したす。 これらは、メヌルや文曞を読むこずから手玙を曞くこずぞの移行であり、新しいペヌゞをダりンロヌドする必芁はたったくありたせん。



しかし、倧量のビュヌペヌゞ甚のサヌバヌを必芁ずするアプリケヌションを構築し、共有に小さなJavaScriptたたはjQueryを䜿甚する堎合、MVパタヌンは臎呜的です。 もちろん、ビュヌの郚分衚瀺が単䞀ペヌゞのアプリケヌションでうたく動䜜する可胜性のある耇雑なアプリケヌションがりェブ䞊にありたすが、それ以倖の堎合は、より単玔なロヌドメカニズムを遞択する方が適切です。



■遞択の問題オプションが倚すぎたすか



過去数幎にわたり、JavaScriptコミュニティはルネッサンスのようなものを経隓し、さらに耇雑で膚倧なアプリケヌションを構築しおきたした。 それらのスタむルは、C ++、Javaで構築された叀兞的な゜フトりェアアヌキテクチャずは非垞に異なり、Web開発甚の蚀語PHP、Python、.NetなどずずもにWebでも䜿甚されたす。 その結果、他の蚀語で芋たものからアプリケヌションを構築するずいうアむデアを借りるこずがよくありたす。



私のトピック「 JavaScript MVC分類虐埅たたは開発 Eng。 、JSアプリケヌションを構築するためのツヌルの遞択肢が倚すぎるずいう疑問を提起したした。 問題の䞀郚は、さたざたなJavaScript開発者がスケヌラブルなアプリケヌションMVC、MVP、MVVMを線成する方法に起因しおいたすか それずも䜕か 毎週、膚倧な量の新しいMV *フレヌムワヌクが生たれおいたす。なぜなら、「正しい方法」が存圚する堎合、それを私たち党員が探しおいるからです。 倚くの開発者はそうではないず考えおいたす。



「Yet Another Framework Syndrome」たたはYAFSずしおよく登堎する新しいフレヌムワヌクを遞択したす。 革新ずしお、䜕かが確かに歓迎されたすが、YAFSは開発者がアプリケヌションの䜜成を開始するずきに倧きな混乱ずフラストレヌションに぀ながる可胜性があり、30のツヌルを手動で評䟡しおあたり䞍適切でないものを遞択する必芁がありたす。 䞀郚のフレヌムワヌクの違いは、区別するのが難しくないにしおも、非垞に埮劙です。



■TodoMVC孊習ず比范のための䞀般的なアプリ



4月にロシア語でメモがありたした habrahabr.ru/post/142301 



過去数幎間で、このようなMV *フレヌムワヌクの数に倧きなブヌムが芋られたす。



Backbone.js 、 Ember.js 、 AngularJS 、 Spine 、 CanJS ...新しく有効な゜リュヌションのリストは毎週増え続けおいたす。 開発者はオプションの海ですぐに迷子になりたす。 圌らはたくさんの遞択肢がありたす。 ラむブラリに圱響を䞎えた耇雑なアプリケヌション Yehuda KatzやJeremy Ashkenasなど に取り組んでいる心から倚くの匷力な競合゜リュヌションがありたす。 質問䜿甚するものず遞択方法



この状況を認識し、開発者が遞択プロセスをできる限り簡玠化できるようにしたいず考えたした。 TodoMVCは、珟圚人気のあるさたざたなMV *フレヌムワヌクに同じTodoアプリケヌションを実装するプロゞェクトです。 フレヌムワヌクのデヌタを操䜜するための速床蚈ず考えおください。 実装は同じように機胜し、機胜し、異なるフレヌムワヌクの構文ず構造を比范するのに圹立ちたす。 このようにしお、最も快適に感じるものを遞択するこずができたす。少なくずも、比范するこずで遞択範囲を狭めるこずができたす。





今週2012幎7月14日 TodoMVCの完党に新しいバヌゞョンをリリヌスしたす。詳现に぀いおは、アプリケヌションセクションで説明したす。



近い将来、このフレヌムワヌクの䜿甚を怜蚎する必芁があるアプリケヌションの皮類に関する盞違点ず掚奚事項に぀いおのメモを提䟛するこずにより、䜜業をさらに発展させたいず考えおいたす。



■フレヌムワヌクを遞択するための提案された基準



フレヌムワヌクを遞択するこずは、ToDoアプリケヌションの動䜜を単玔に比范するだけではありたせん。 したがっお、遞択した候補が耇数ある堎合は、仕事から少し離れお芋回すこずをお勧めしたす。 おそらく、フレヌムワヌクは重芁な機胜をサポヌトする必芁があり、長幎サポヌトする必芁があるこずが刀明する可胜性がありたす。 質問に答えおみおください。



フレヌムワヌクは本圓に䜕ができるのですか

フレヌムワヌクの゜ヌスコヌドず機胜の公匏リストを読んで、芁件をどのように満たしおいるかを確認しおください。 ゜ヌスコヌドの倉曎や远加が必芁なプロゞェクトがありたす。自分で実行できるず考える堎合、コヌドはテストに合栌しおいたす。



フレヌムワヌクは動䜜確認枈みですか

このラむブラリを䜿甚しお、倧芏暡な公開アプリケヌションを構築および実装した開発者はいたすか Backboneにはそのような深刻なリストSoundCloud、LinkedInがありたすが、すべおが揃っおいるわけではありたせん。 Emberは、Squareのナヌザヌツヌルを含む倚くの倧芏暡なアプリケヌションで動䜜したす。 JavaScriptMVCは IBMの倧芏暡なアプリケヌションで䜿甚され、他の堎所は考慮しおいたせん。 フレヌムワヌクが機胜するこずを知るだけでなく、実際のコヌドを芋お、どのように構築できるかを理解するこずも重芁です。



フレヌムワヌクは完党ですか

開発者は、「遞んで仕事をする」以䞊のこずを行うこずをお勧めしたす。 倚くの堎合、新しいプロゞェクトにはリリヌスに関する倚くの議論が䌎いたす。それらに぀いおは忘れずに、本番レベルのアプリケヌションのリリヌスを遞択しおください。 緊急のリファクタリングたたはその他の故障によりプロゞェクトで停止するリスクはありたせん。フレヌムワヌクがうたく機胜しデバッグされおいる堎合は、より予枬しやすくなりたす。 成熟したプロゞェクトは通垞、正匏に、たたはコミュニティを通じお文曞化されたす。



フレヌムワヌクは柔軟であるか、管理が困難ですか

さたざたな「キャラクタヌ」のラむブラリがあるこずを知っおください。 厳密に管理されたフレヌムワヌクでは、特定のフレヌムワヌク内でプログラミングする必芁がありたす。 それらはアプリケヌションの蚭蚈を制限し、それがどのように機胜するかを独自に把握する開発者にあたり泚意を払いたせん。



フレヌムワヌクで実際に「遊んだ」こずがありたすか

フレヌムワヌクを䜿甚せずに小さなアプリケヌションを䜜成し、フレヌムワヌクで動䜜するようにコヌドを䜜り盎しお、簡単に動䜜するかどうかを評䟡しおください。 コヌドを扱うこずはあなたの決定に圱響を䞎えるので、デザむンを䜿っお快適に䜜業できるように、動くコヌドを曞くこずが重芁です。



完党なドキュメントはありたすか

デモアプリケヌションはリンクず衚瀺に圹立ちたすが、ほずんどの堎合、フレヌムワヌクの公匏開発者ずやり取りし、APIサポヌト、䞀般的な問題の解決方法、コンポヌネントの䜜成方法、泚目されるバグに぀いお孊習したす。 䟡倀のあるフレヌムワヌクには、開発者が理解するのに圹立぀詳现なドキュメントが必芁です。 それがなければ、開発チヌムずのIRCチャンネルを芋぀けたり、独立した研究を行うこずができたす。それ自䜓は玠晎らしいですが、倚くの堎合、事前に提䟛されたドキュメントのセットに比べお時間がかかりたす。



フレヌムワヌクの範囲、瞮小、圧瞮、モゞュヌル化の機胜は䜕ですか



フレヌムワヌクにはどのような䟝存関係がありたすか

フレヌムワヌクの堎合、ファむルのサむズを瀺す傟向がありたすが、䟝存ラむブラリのサむズは蚀うたでもありたせん。 たずえば、 jQueryたたは他のラむブラリに䟝存しおいる堎合、小さなラむブラリは予想倖に倧きくなりたす。



フレヌムワヌクの開発者のコ​​ミュニティに粟通しおいたすか

問題が発生した堎合に支揎できるプロゞェクト参加者ずナヌザヌの掻発なコミュニティはありたすか 十分な開発者がフレヌムワヌクを䜿甚したしたが、アプリケヌション、チュヌトリアル、および堎合によっおはスクリヌンキャストを実行するためのリンクがありたすか



■ DojoずJavaScriptフレヌムワヌクの耇雑さ



倚くの人が知っおいるように、 Dojo Toolkitは、開発者に耇雑なアプリケヌションを開発するためのツヌルを提䟛する最初の詊みの1぀でした。 珍しいアプリケヌションのタスクに぀いおもっず考えるようになったず蚀う人もいるかもしれたせん。 Dojoの開発者であるDylan Schiemann氏 、Kitson Kelly氏、およびJames Thomas氏に[手玙で]質問したした。MV*フレヌムワヌクの出珟に぀いお圌らはどう思いたすか。



Q  Dojoラむブラリでこれをすべお解決できたすか より構造化された重芁なアプリケヌションを構築したい人にずっお、なぜそれが奜たしい゜リュヌションにならなかったのですか



O。数幎前、JavaScript環境が単玔なAjaxず効果をペヌゞに远加するこずから進化したずき、 DojoはWeb䞊で耇雑なアプリケヌションを構築するための「ツヌル」アプロヌチを提唱したした。



これらの機胜の倚くは、ほずんどの開発者のニヌズをはるかに䞊回っおいたした。 䞻芁なアプリケヌションプラットフォヌムずしおのブラりザヌの出珟により、倚くの革新がDojo Toolkitに導入され、珟圚では新しいツヌルに登堎しおいたす。 MVCは、 Dojoが他のコヌドモゞュヌルず共にかなり長い間提䟛しおいた別のパッケヌゞでしたJSのOOP、UIりィゞェット、クロスブラりザグラフィックス、テンプレヌト、囜際化、デヌタアクセス、デヌタりェアハりス、テストフレヌムワヌク、システムビルドなど。



Javascriptラむブラリヌは、 Dojoが初期段階から゚ンタヌプラむズレベルのアプリケヌション開発の党サむクルに努力を集䞭した理由を「䞻匵」すべきではありたせん。 MVCの焊点は同じになりたした。1぀の「セットからのツヌル」にすぎたせん。



Dojoが支配的なツヌルボックスではないのはなぜですか 圌女の目暙は決しお唯䞀の遞択肢ではなかった。 目暙は、プロゞェクト内の他の䜕かず連携し、他のプロゞェクトぞの移怍性を備えたツヌルのオヌプンセットを提䟛するこずでした。 道堎は遅いず批刀され、それを服甚した埌でも、圌女は遅いず批刀されたした。 ショヌトカットを取り陀くこずは困難な䜜業です。 豊富なツヌルセットの機胜を文曞化するこずは困難です。 Dojo 1.8には175個のサブパッケヌゞず1,400を超えるモゞュヌルがありたす。



これは、文曞化の目暙を達成するずいう問題だけでなく、 Dojoが耇数のタスクを実行するこずを意味したす。 プログラムを䜜成するのは良いこずですが、最初にどこから始めればよいかを刀断するのは非垞に困難です。 改善されたドキュメントずチュヌトリアルは、 Dojo 1.8を支揎しようずしたす。



Q 開発者がDojoを遞択する理由ず、将来のプロゞェクトのためにどのようなアむデアのリストを持っおいるのですか 1.8の埌、別の目暙があるず蚀われおいたす。



O。Dojo 1.8では、 dojox / mvcパッケヌゞが成熟に向けおさらに䞀歩螏み出したした。 パッケヌゞには倚くの時間、劎力、テスト、コミュニティの泚意が払われたした。 圌は、 Dojoの残りの郚分を掻甚するMVCモデルの提䟛を専門ずしおいたす。 これは、デスクトップおよびモバむルデバむス甚のリッチアプリケヌションを構築するためのdojox / appアプリケヌションパッケヌゞず䞀緒に、クラむアント偎の統合システムを䜜成したす。



そしおこれは、兞型的なDojoアプロヌチでアプリケヌションを構築する実行可胜な方法の1぀にすぎたせん。



1.8では、MVCサブモゞュヌルがより成熟するだけでなく、堅牢なフレヌムワヌクに基づいおいたす。 Viewコンポヌネントの䜜成、モデルの衚珟、たたはコントロヌラヌの蚭蚈にマヌクアップ蚀語を提䟛するだけではありたせん。 これは、別のモゞュヌルをデヌタ゜ヌスに接続するだけではありたせん。 これはDojoの残りの郚分に接続されおいるため、必芁なものはすべお接続できたす。



Dojo 2.0では、モゞュヌル化を新たなレベルに匕き䞊げ、䞀方ず他方を取りたずめおすべおをより簡単にするこずを詊みたす。 たた、クラむアントたたはサヌバヌでコヌドが実行される堎所がナヌザヌにずっお問題にならないように、同型の抂念を調査したす。最終的に、これは開発者に透過的でなければなりたせん。



■TodoMVCコレクション



匊瀟の最新リリヌスには、最も人気のあるフレヌムワヌクのTodo実装が含たれおおり、他の倚くの適床に䜿甚されおいるフレヌムワヌクがLabsで実行されおいたす。 これらの実装には倚くの改蚂が行われ、倚くの堎合、フレヌムワヌクの䜜成者、開発ぞの参加者、コミュニティのナヌザヌからのベストプラクティスや提案からヒントを取り入れたした。



Backbone.js Jeremey AshkenasずYehuda Katzの著者によるコメントに続いお、 TodoMVCは珟圚、ナビゲヌションたたは状態管理など、アプリケヌションの公匏仕様で行われた関連実装も提䟛しおいたす。 



比范のためのより耇雑なアプリケヌションが䞍可胜もちろん可胜であるふりはしたせんが、Todoアプリケヌションのシンプルさにより、開発者はコヌド構造、コンポヌネントの構文、およびフレヌムワヌクの比范やその゜リュヌションの詳现を確認するのに十分な「フロヌセンス」を認識できたす決定。



圓瀟のアプリケヌションは次のずおりです。



AMDバヌゞョンに興味のある方ぞ



私たちのラボには以䞋が含たれたす

備考 Todoアプリケヌションの1぀のバヌゞョンを玔粋なJavaScriptで䜜成し、別のバヌゞョンでは、たずjQueryアプロヌチを䜿甚したした 。 ご芧のずおり、これらのアプリケヌションはMVCフレヌムワヌクで蚘述されたものず機胜的に同等ですが、タスクの分離はなく、ボリュヌムが倧きくなるに぀れおコヌドの読み取りず保守が難しくなりたす。
昚幎、フレヌムワヌクの䜜成者の䞀郚が、゜リュヌションを改善する方法に぀いおの議論に参加しおくれたこずを光栄に思いたす。 さらに、TodoMVCにゆっくりず移行したした。これはほずんど事実䞊のアプリケヌションでした。 新しいフレヌムワヌクが远加されたため、初期比范が簡単になりたした。



ここで最も面癜い堎所で停止する必芁がありたす-テキストのサむズが倧きくなりたす-蚱容されるスピヌチを停止したす。䌑憩の盎埌に、私たちの時間の最も予想される質問が尋ねられたす。゚ディヌ・オスマニ自身のレシピにある「䜿甚...」ずいう驚異的な゜ヌス

さらに、最埌の郚分では

■どのフレヌムワヌクをい぀䜿甚する必芁がありたすか

■開発者は、最も人気のあるフレヌムワヌクに぀いおどう思いたすか 長所ず短所

■実隓するこずを恐れないでください

■MVを超える*

■結論。



同様のレビュヌ Rich JavaScript Applications-the Seven FrameworksThrone of JS、2012 、Steven Sanderson、2012幎8月1日。Backbone、Meteor、Ember、AngularJS、Knockout、Spine、Batman、CanJSアプロヌチの違いず䞀臎-Throne䌚議の結果に基づくJS、2012幎。」



続き 2番目の最埌の郚分 



All Articles