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

クラむアントで重芁なJSの圹割を持぀プロゞェクトのラむブラリヌの比范ず遞択に関するEddie Osmaniの蚘事の翻蚳の終わり。

最初の郚分の内容



■MVCずは䜕ですか

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

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

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

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

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

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

■TodoMVCコレクションTodoテストアプリケヌションの実装が行われるフレヌムワヌク



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



フレヌムワヌクの怜玢範囲を絞り蟌むために、サンプルのいく぀かのオプションを遞択するのに圹立぀機胜に基づいお、高レベルのフレヌムワヌクの遞択を提䟛したいず考えおいたす。



アプリケヌション内のタスクを分離するための最小限の゜リュヌションを備えた柔軟なものが必芁です。 䞀定の接続性ずREST同期、モデル、ビュヌコントロヌラヌ付き、むベント駆動型デヌタ亀換、テンプレヌト、およびナビゲヌションURLアンカヌ経由をサポヌトしたす。 モデルが倉曎されるず、ビュヌはすぐに倉曎されたす。 自分でアヌキテクチャを適切に管理したいず思いたす。 理想的なのは、倚くの倧䌁業が自明でないアプリケヌションのために゜リュヌションを䜿甚した堎合です。 私は耇雑なものを埗るこずができるので、フレヌムワヌクの呚りの掻発なコミュニティを芋たいず思いたす。あなたはい぀でも簡単な質問ではありたせん Marionette、Chaplin、Aura、Thorax 。 ビルドツヌル grunt-bbb、brunch を持぀こずも理想的です。 Backbone.jsを䜿甚したす。



Web甚のデスクトップレベルのアプリケヌションの基瀎が必芁です 。 このフレヌムワヌクは、すべおを手動で組み立お、氞続性ファむルのメタファヌを持぀氞続オブゞェクト、デバむス、蚈算されたプロパティ、および自動曎新テンプレヌトを必芁ずしない、高レベルのモゞュヌル匏MVCである必芁がありたす。 これは、手動構成ではなく、倚くの隣接するフレヌムワヌクずの互換性のあるむンテリゞェントな状態管理に必芁です。 適切なドキュメント、䜿甚パタヌン、ビルドツヌル ember.gem、ember for brunch を䜿甚する必芁がありたす。 Ember.jsを䜿甚したす。



テンプレヌトをオンザフラむで接続、ナビゲヌション、䞻芁なラむブラリ jQueryやDojoなど ずの統合、高速で、倧芏暡アプリケヌションではただ動䜜しない可胜性のあるMVCコンポヌネントの継承をサポヌトする、軜量なものが必芁です。 耇雑なアプリケヌションを䜜成した経隓のある人が行う堎合に最適です。 CanJSを䜿甚したす 。



Viewを䜿甚しお、アプリケヌションのルヌルに埓っおHTMLずコンポヌネントをカスタマむズするこずにより、ナヌザヌの行動に関するデヌタを収集する宣蚀型ラッパヌが必芁です。 MVCたたはそのバリアントを介したURLナビゲヌションずタスク共有を䜿甚した、シンプルなテストシステムのサポヌト。 これにより、HTMLで独自のDSL サブゞェクト指向蚀語を構築するためにHTMLコンパむルを行う関連ラむブラリにカスタマむズされたアプロヌチが提䟛されたす。 これは、Webコンポヌネントなどのネットワヌクプラットフォヌム芁玠に必芁です。 ただ組み立おツヌル 角床付きシヌド が必芁です。 AngularJSを䜿甚したす。



膚倧なアプリケヌションの優れた基盀が必芁です。これには、実瞟のあるりィゞェットのむンフラストラクチャ、ポストロヌディングを備えたモゞュヌルが必芁です。 おそらく-非同期でシンプルなCDNずの統合、モゞュヌルずりィゞェットグラフ、チャヌト、テヌブルなどの遞択、優れた倚蚀語i18n、l10n。 耇雑なアヌキテクチャを䜜成するには、OOP、MVC、およびブロックビルダヌモゞュヌルのサポヌトが必芁です。 Dojoを䜿甚したす。



YUI拡匵機胜を䜿甚するために最適化されたものが必芁です 。 モデル、ビュヌ、ナビゲヌションのサポヌトにより、情報をさたざたな方法で衚瀺したり、衚瀺オプションを盞互に切り替えたりするアプリケヌションを簡単に䜜成できたす。 これは、りィゞェット/コンポヌネントを備えた完党な゜リュヌションであり、アプリケヌションのアヌキテクチャを蚘述するこずができたす。 ビルドツヌル yuiproject が存圚する堎合がありたすが、他のツヌルの代わりになる可胜性がありたす。 YUIを䜿甚したす。



MVC、むベント、ナビゲヌションをサポヌトしながら、コンパクトなたたで、アプリケヌションを構築する際に柔軟で、非同期むンタヌフェむスで䟝存関係のないシンプルなものが必芁です 。 詳现なドキュメントずずもに、CoffeeScript甚に最適化されおいたす。 Spineを䜿甚したす。



デヌタモデルず宣蚀型バむンディングスタむルに基づいお耇雑な動的UIを構築するツヌルが必芁です 。 モデルが倉曎されたずきのUIの曎新では、デヌタトラッキングによる双方向バむンディングず䟝存関係のサポヌトを䜿甚したす。 これは、任意のフレヌムワヌクたたは既補のアプリケヌションでも䜿甚できるはずです。 組み蟌みのテンプレヌトず簡単な拡匵性が必芁です。 KnockoutJSを䜿甚したす。



シンプルなWebアプリケヌションやサむト甚のものが欲しい 。 私はそこに倚くのコヌドがあるずは思わないので、あたり干枉したせん。 タスクに集䞭するためのクロスブラりザ。 簡単なむベント凊理、リモヌトサヌビスずのやり取り、拡匵性、膚倧なプラグむンセット。 jQueryを䜿甚したす。



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



TodoMVCのMV *フレヌムワヌクずこの蚘事の研究の䞀環ずしお、開発者を察象に調査を実斜したした。 圌らはどのフレヌムワヌクをより頻繁に䜿甚したすか、そしお最も重芁なのは、なぜそれを掚奚するのですか このフレヌムワヌクがプロゞェクトになかったら、圌らは䜕を感じたすか



最も興味深い答えのいく぀かを次に瀺したす。



Ember.js



長所ラむブパタヌンず監芖可胜なオブゞェクトの組み合わせにより、JavaScriptの動䜜が倉わりたした。 最初は少し混乱しおいるように芋えるかもしれたせんが、コヌドの責任を適切に分担しお䜜業を終了したす。 すべおを説明したらすぐに、かなり耇雑な機胜を远加するには数行かかるこずがわかりたした。 Emberがなければ、これらの同じ機胜を実装するのは非垞に困難です。



短所  Emberは匕き続きバヌゞョン1.0に到達する必芁がありたす。 ルヌタヌやEmberデヌタなど、倚くのものがただ動いおいたす。 新しいWebサむトは非垞に䟿利ですが、他のフレヌムワヌク、特にBackboneのようなEmberのドキュメントはありたせん。 フレヌムワヌクに倚くの魔法があるため、少し怖いです。 䜕かが壊れた堎合、その理由を正確に把握するこずはできたせん。 たた、 Emberの゚ラヌメッセヌゞはしばしば䞍正確です。



「察象」 䞻な芁因

aボむラヌプレヌトコヌドバむンディング、蚈算されたプロパティ、優れたプレれンテヌションコントロヌルレむダヌを回避できる機胜。

b開発チヌム。 私はルビストであり、むェフダ・カッツの䟡倀を知っおいたす。 私は男を信頌する=。



短所 ドキュメント。 Emberに優れたドキュメント、チュヌトリアル、 Backbone、Angularなどのフレヌムワヌクなどのスクリヌンキャストがないこずは本圓に残念です。 珟圚、完党ではないドキュメントを探しおいるコヌドを探しおいたす。



短所 構成契玄。 ゚ンバヌはあなたのために倚くの小さな仕事を取りたす。 これは、最近ではクラむアント偎のアプリケヌションを構築する最も簡単な方法です。



短所 孊習のしきい倀。 Backboneのような他のフレヌムワヌクのために存圚する初心者向けのチュヌトリアルが倚くないのは、䞀郚は小さなコミュニティによるものですが、バヌゞョン1.0に備えたコヌドモビリティのためだず思いたす。



長所バむンドの容易さ、コントロヌルずの緊密な統合、独自のコヌドの簡単なモゞュヌル性。



短所  Emberデヌタずの安定した統合ず、REST APIず同期された統合されたlocalStorageサポヌトが必芁です。これらはすべお倢のようなものです。



Backbone.js



「察象」 シンプル-4぀の䞻芁コンポヌネントコレクション、モデル、ビュヌ、ルヌタヌのみ。 StackOverflowの巚倧なコミュニティ゚コシステムず倚くの゜リュヌション。 MarionetteやVertebraeなどの高次フレヌムワヌク-内郚に倚くのスマヌトコヌドがありたす。 誰かが「䜎レベル」を奜む-あなたは定型的なコヌドをたくさん曞く必芁があるが、あなたのために䜜られたアヌキテクチャを手に入れなさい。



「反察」 継承が奜きではありたせん-芪オブゞェクトの内容が新しいオブゞェクトにコピヌされたす。 プロトタむプの継承が必芁です。 ドックの䟋で「珟実のシナリオ」を読んでいないこずがありたす。 TODOを䜿甚したチュヌトリアルを読んだ埌、少し耇雑なアプリケヌションを䜜成する方法を芋぀けるために、倚くの調査を行う必芁がありたす。



DocumentCloud Backbone、Underscore のプロゞェクトでは、 AMDの公匏サポヌトを䜿甚したせん[ただし、これはRequireJS 2.0の新しいshimメ゜ッドの問題ではありたせん]。



「察象」  Backboneの最初の䞍可解な研究の埌、これはすべお非垞に実甚的であるこずが刀明したした。 実甚性-適切に管理され、軜量で、垞に曎新されるラむブラリヌが適切な環境にありたす。 Underscore、jQuery / Zepto 、私のスタゞオのほずんどのプロゞェクトで䜿甚できるツヌルのフレンドリヌなサポヌト。



短所  Backboneの操䜜方法に関するチュヌトリアルの数は、バヌゞョンによっお異なりたす。 私は他の開発者にBackboneを芋おもらい、バヌゞョン0.3のコヌドを曞くこずにしたした。 知らずに。 問題はありたせんが、 Backboneはそれを修正できたすが、これはおそらくそれに関連する䞻な䞍䟿です。



理論的には、䜕でも同じこずが蚀えたすが、 Backboneでは、目の前で定期的に繰り返されたす。 地獄、私は䞀ヶ月前に叀代の方法ず技術を䜿った蚘事を芋さえしたした。



フレヌムワヌクに察する私の態床に関係なく、合理的な線集ずアプロヌチでコミュニティが修正できるのはこの問題です。 これが、コミュニティのサポヌトのために、 Backboneが私を尊敬するに倀する理由です。



「For」 合理的な制限なしに最小限の抜象化のみを提䟛したす-ニヌズに応じおプロゞェクトを組み立おるこずを可胜にしたす。



短所  Backbone.syncを曞き換えるか削陀したす。 これはHTTPプロトコル甚に構築されおおり、WebSocket機胜にうたく適応したせん。



「のために」 働き始めるのは非垞に簡単で、知るための良い方法を提䟛したす。 それは比范的よくカスタマむズ可胜であり、それを䜿甚しおいる他の倚くの人々が助けるこずができたす。



短所 デフォルトのビュヌバむンディングがないずいう事実指定できたすが。 単䞀のプロパティが倉曎されたずきにビュヌ党䜓を曎新するこずは䞍経枈です。



REST APIには倚くの利点がありたすが、倚数のレコヌドには問題があり確かに、RESTの問題は独自のものですが、ただ残っおいたす、さたざたなタむプの操䜜を凊理するためのさたざたなURIスキヌムを取埗する際に䞍快な問題がありたす。



Angularjs



賛成 

a双方向のデヌタバむンディングは非垞に匷力なアプロヌチです。 䞀連のむベントを敎理するのではなく、モデルず状態に぀いおもっず考えたす。 モデルは唯䞀の真実の源です。

bスピヌド。 AngularJSは簡単にダりンロヌドできたす。 innerHTMLの代わりにノヌドを構築するこずでテンプレヌト化され、理論的には生産性が向䞊したす。

c最新のブラりザおよび/たたはむしろth玄によっお導かれおいる堎合は、jQueryなしで行うこずができたす。



短所 モデルによっお倉曎されるUI状態遷移を瀺すこずができるようにしたいず思いたす。 ぀たり、 ng-show / ng-hideを䜿甚する芁玠は、単玔な宣蚀で非衚瀺たたは折りたたみたいず思いたす。



長所 それは非垞に盎感的で、優れたドキュメントがありたす。 デヌタバむンディング、ビュヌベヌスのHTML、スコヌプぞのアプロヌチが気に入っおいたす。 Backbone / ThoraxからAngularに切り替えたしたが、振り返るこずはありたせんでした。 Chromeの新しいBatarangアドオンはChrome開発者ツヌルず統合され、 Angularデヌタ構造ぞのリアルタむムアクセスを提䟛したす。



短所 ドラッグアンドドロップなどの機胜の組み蟌みサポヌトが必芁ですが、これはGitHubで利甚可胜な倖郚コンポヌネントを介しお远加できたす。 再利甚に適したサヌドパヌティのコンポヌネントをもっず芋たいです。 これは、 AngularJSを取り巻く゚コシステムがより成熟するための時間の問題であり、 jQueryのようなコミュニティのように、アクセス可胜で倚様になるず思いたす。



長所定型コヌドを倧幅に削枛し、コンポヌネントを介しおコヌドを再利甚できるようにし、倚くの耇雑な機胜がHTMLで属性を蚘述するのず同じくらい簡単になるようにHTML構文を拡匵し、䟝存関係の完党な説明のおかげでテストが非垞に簡単になりたす。

DOMを盎接制埡するこずなく、 jQueryを䜿甚せずに重芁なアプリケヌションを䜜成できたす。 そのような楜噚を䜜るこずは本圓のスキルです。



「Against」 圌女の孊習しきい倀はBackboneの孊習しきい倀マスタヌにずっお非垞に簡単ですよりもわずかに高いですが、結果は䟡倀がありたす。 ドキュメントが改善される可胜性がありたす。



ノックアりト



長所 垞に䜿甚するわけではありたせんが、 KnockoutJSは単䞀ペヌゞのアプリケヌションに最適です。 オブゞェクトを倉曎するための非垞に簡単なサブスクリプション。 芳枬可胜な配列を䜿甚する、いわゆるバックボヌン 「コレクションビュヌ」甚のはるかに優れたAPI。 たた、芳察されたオブゞェクトの゚フェクトなどのカスタムむベント



短所 APIを拡匵するのは難しいず感じおいたす。 倧芏暡なアプリケヌションコミュニティのサポヌトなどを含むでBackboneを遞択するこずをお勧めしたす。



「For」 デヌタバむンディングのメカニズムずその䟿利な䜿甚が奜きです。 特に、テンプレヌトが制埡ロゞックぞのバむンドに眮き換えられたこずが気に入っおいたす。



短所 アプリケヌション構造に関するベストプラクティスガむドがないのは悪いこずです。 フレヌムワヌクは、ビュヌモデルを持っおいるだけでなく、適切に構造化されたビュヌモデルを蚘述するのに圹立ちたせん。 倧きなアンマネヌゞ関数で非垞に簡単に終了したす。



道堎



長所 構文的に-Dojoは非垞に単玔です。 これは、通垞6 KBのサむズの初期ロヌダヌファむルを䜿甚した動的で堅牢なビルドに適しおいたす。 AMD互換ブヌト埌であるため、非垞にコンパクトになり、DOMの基本的な䜜業から耇雑なSVG、VML、キャンバスに至るたで倚くの拡匵機胜を備えおいたす。 Dijitりィゞェットシステムは 、䜿いやすさず拡匵性に優れおいたす。 これは非垞に適切で完党なツヌルボックスです。



短所 dojo / _base / declare機胜は100厳密に管理されたツヌルではありたせんが、䞋䜍互換性のためにいく぀かのオヌバヌレむがありたすが、これはほずんどDojo 2.0で修正されたす 。



「察象」 Goodコンポヌネントタブ、デヌタテヌブル、フォヌムマネヌゞャヌ...すべおのブラりザヌで同じ。 働くAMD。 デヌタシミュレヌタを䜿甚した簡単なテスト。 AMDのおかげで他のフレヌムワヌクずうたく統合できたす JMVCず統合したす 。



短所 プロゞェクトは、叀いコンポヌネント甚にデフォルトで構成されおいたす。 完党にhtml5ではありたせん。 ドキュメントはたあたあです。 暙準化の悪いシステム「オンザフラむ」でのバむンディングなし。



ゆい



長所  YUI3は、Backboneなどのすべおの利点を含む、モゞュヌル匏で自由に実行できるコンポヌネントラむブラリです。 私の意芋では、バックボヌンの抂念の䞀郚を改善し、いく぀かのこずを共有したすたずえば、属性は任意のオブゞェクトに混合できる別個のモゞュヌルです-むベントの「モゞュヌル」も混合できたす。



短所  YUI3がEmberからの自動配線をサポヌトしおいるこずを確認したいず思いたす。 これぱンバヌにずっお本圓に玠晎らしい成果だず思いたす。 そうでなければ、 YUI3は必芁なものを芋぀けるこずができる優れたコンポヌネントラむブラリだず思いたす。 改善されたAMD互換性モゞュヌルロヌダヌを芋たい。 今日は問題なく動䜜したすが、AMDモゞュヌルで新しいプロゞェクトを開始し、 YUI3やその他のサヌドパヌティのものをAMDを䜿甚するAMDコンポヌネントに挿入できるずよいでしょう。



JavascriptMVC



「察象」 すべおのツヌルが「すぐに䜿える」状態であり、チヌムを実行しおアセンブリを開始するためだけに残りたす。 私は6か月䜿甚したしたが、本圓に良かったです。



短所 私が芋たいのは、次のバヌゞョンの開発をスピヌドアップするこずだけです。 開発者は問題を認識しお解決したすが、プロセスは異なる堎合がありたす-修正しお解決策を送信したいいく぀かの問題に぀いおは数か月ではなく-その埌、パッチを䜜成しおリク゚ストをプルできたす。



マリア



長所  Mariaは玔粋なMVCを実装するためのフレヌムワヌクであるため、MVCフレヌムワヌクであるこずに焊点を圓おおいたす。 これ以䞊でもそれ以䞋でもありたせん。 すべおがシンプルです。



短所 ゜ヌスコヌドで曞かれたドキュメントよりも少し倚くのドキュメントずいく぀かのテストケヌス。 MariaでのMVCの実際の䜿甚の基本を瀺すチュヌトリアルはうたくいきたす。



Cujo.js



「察象」 実際のアプリケヌションの堎合、MV *はすぐに䜿甚できるものではなく、最も重芁なツヌルキットはすぐに䜿甚できる堎合がほずんどです。 cujo.jsを䜿甚しお、ボックスを定矩したす。



はい、 cujo.jsにはビュヌ、モデル、コントロヌラヌなどを䜜成するための高レベルのMV *のような機胜がありたすが、各アプリケヌションは異なり、100の゜リュヌションになるフレヌムワヌクはありたせん。 cujo.jsは、みんなを喜ばせようずする代わりに、䜎レベルのツヌル、アヌキテクチャのカスタマむズ、および他のMV *フレヌムワヌクを組み合わせお拡匵するこずもできる豊富なプラグむンシステムを提䟛したす。



誰かのアヌキテクチャにアプリケヌションを配眮する代わりに、アプリケヌションに最適なアヌキテクチャを䜜成したす。



「反察」 JavaScriptの倧郚分は完党に準備が敎っおおらず、倧芏暡なアプリケヌションを開発するためのトレヌニングを受けおいたせん。 それらのほずんどは、蚭蚈パタヌンずアヌキテクチャの存圚を認識しおいたせん。



cujo.jsは他のものずは非垞に異なるため、APIずコヌドサンプルぞの単なる参照以䞊のものが必芁です。 チュヌトリアル、教材、および教育甚の䟋がなければ、 cujo.jsは芋た目が奇劙で気のめいるように芋えたすが、すぐにドキュメントが䜜成される予定です。



Extjs



長所  ExtJSはExt Designerで最適に機胜するず思いたす。 他のGUIフレヌムワヌクから分離されるため、プログラマヌ以倖のナヌザヌがUIをモックでき、プログラマヌは空癜を埋めるこずができたす。 私の意芋では、 BackboneなどのMVCフレヌムワヌクずの比范は間違っおいたす。ExtJSの匷みは、軜量のWebアプリケヌションではなく、リッチなGUIを䜜成するこずにありたす。



商甚、リモヌトオフィス、リッチアプリケヌションの堎合、JavaScript゜リュヌションに関しおはExtJSが最適な遞択肢であるず思いたす GWTなどを陀く。 パブリックWebアプリケヌションの堎合、マヌクアップをより詳现に制埡できるそしお完党にグレヌスフルデグラデヌションを実珟するものがありたす。



「Against」 他の倚くの珟代の構造フレヌムワヌクよりも高い゚ントリヌしきい倀を持っおいたす。 , ExtJS , , , .



«» : , ExtJS 4 — MVC . Dojo , , ExtJS , .



ExtJS , , HTML. , , HTML .



, , - . , DOM .



«» : . ExtJS , , . , , — .



«» : ExtJS — RIA . , , HTML JavaScript, . ExtJS , HTML, , , , UI.



«» : 
 , , , . , — , . , Sikuli , Selenium .



Batman



«» : . — .



«» : , , Shopify , , .



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



, . ( ) , .



: , Batman.js . CoffeeScript- Batman.js , . , . , , Batman.js , .



, , , .



■ MV*



MV* , , , Views, , . .



, MVC, .



. , Backbone , , . Backbone (, ), . Initializer .



, MVC . — , , .



, Marionette . — , ( ) , .



Marionette TodoMVC, Backbone , MV*.
Derick Bailey — Marionette



JavaScript MVC, . , API , , .



, , , MV* . « », — , - . , , JavaScript .



J2EE. , «PHP Objects, Patterns, and Practice», Matt Zandstra, , ! J2EE , , URL . , , , .



J2EE , .
Dustin Boston — Aura



■おわりに



, -, : , . , .



TodoMVC . , , , , .



, .



, TodoMVC Sindre Sorhus .



: Addy Osmani — - Chrome Google. JavaScript, : « JavaScript » " Backbone ", Modernizr JQuery . " Yeoman " — .



All Articles