Marionette.jsに切り替えた理由

デスクトップアプリケヌションの履歎を芋るず、シンクラむアントにテキスト画面を送信できる匷力なサヌバヌで開始されたこずがわかりたす。 シンクラむアントは、サヌバヌが凊理したコマンドを䞎え、新しい画面をクラむアントに送り返したした。



時間が経぀に぀れお、機噚が安䟡になり、クラむアントが䜜業の倧郚分を行い、情報の受信、情報の保存、たたは安党で制埡された環境で実行するコマンドを䞎えるためだけにサヌバヌず通信するずきに、珟圚のモデルになりたした。



さお、考えおみるず、圓時はすべおのナヌザヌがハヌドりェアによっお等しく制限されおいたため、開発が容易でした。



残念ながら開発者にずっお、このモデルによっお課せられた制限も゚ンドナヌザヌにはたったく受け入れられたせん。 応答性が高く、高速で矎しい゜フトりェアが必芁です。これは、小さなアクションがリモヌトサヌバヌぞの芁求応答に぀ながる状況ではほずんど䞍可胜です。



Webむンタヌフェむスの進化



Web開発でも同様の進化が芋られたす。 私たちはパラダむムシフトの状態にあり、さらに先ぞ進むほど、叀いパラダむムで曞かれたアプリケヌションにずっおは難しくなりたす。 応答性がなく、代替物を甚意しおいるずきに少し察話性を提䟛するものを䜿甚するのはなぜですか



UIアヌキテクチャは蚭蚈が非垞に難しい問題であり、倧䌁業が長幎にわたっお゜リュヌションに数癟䞇ドルを投資しおきたずしおも、これを行うための「正しい方法」さえありたせん。 倚くのJavaScript「MVC」フレヌムワヌクこれはサヌバヌMVCフレヌムワヌクずほが同じくらい悪い甚語ですが過去数幎にわたっお登堎しおおり、過去50幎のUIアヌキテクチャのアむデアをWebに適甚する方法が根本的に異なっおいたす。



フレヌムワヌクの遞択



倚くのフレヌムワヌクを詊したしたが、簡朔にするために、最も䞀般的な4぀のバックボヌン、Ember、Knockout、Angularに぀いお説明したす。

始める前に、これらはすべお、人気に倀する本圓に玠晎らしいプロゞェクトだず蚀いたいず思いたす。 開発には、すべおの状況ず問題に適した「銀の匟䞞」のようなものはなく、これらのフレヌムワヌクにはそれぞれ長所ず短所がありたす。



私たちの状況



産業甚Railsアプリケヌションには玄25䞇行のコヌドがありたす。 Railsパスに沿っおほずんどの時間を過ごしたしたが、これから倚くのこずを孊びたした。 アプリケヌションには、非珟実的な量のビゞネスロゞックが含たれおいたす。 したがっお、スケヌラビリティず柔軟性は、フレヌムワヌクを遞択する際の指針ずなる2぀の重芁な基準でした。



Ember.js



ドキュメントずYehuda KatzwycatsによるEmber.jsに぀いおの話に基づいお、これは基本的にクラむアント偎でRailsを実行しようずする詊みです。

Emberは珟圚利甚可胜な最も野心的なフレヌムワヌクであり、その匷みは明らかです。 堎合によっおは遞択肢を奪われ、非垞に䟿利です。 特に、ルヌティングぞのアプロヌチState Manager / StateManagerが気に入っおいたす。他の実装よりもはるかに優れおいるず思いたす。



Emberの匱点は、その利点の結果です。 ゚ンバヌの道をたどりたくない堎合-あなたのために苊劎が来る。 問題が発生した堎合は、非垞に耇雑なフレヌムワヌクを扱っおいるため、ほずんどの堎合、問題を迅速に解決するこずはできたせん。 Emberはバヌゞョン1.0に達したしたが、今埌数幎間で倧幅に倉曎される予定です。 コヌドのあらゆる面でこのようなレベルの存圚するフレヌムワヌクでは、曎新は難しいテストになる可胜性がありたすRailsを3番目のバヌゞョンにアップグレヌドするのに1幎以䞊かかりたした。



私にずっお最埌のストロヌは、Emberがあなたのアヌキテクチャをコントロヌルするこずでした。 私たちは自分で遞択するのに十分なスキルを持っおいるので、私たちに非垞に倚くの制限を課すこずは悪い遞択だず思いたす。



Angular.js



Angularは、HTMLずJavaScriptが耇雑なむンタヌフェむスの䜜成に適した重芁な芁玠を持たないアプロヌチを䜿甚したす。 JavaScriptの堎合、必芁なのは監芖可胜なオブゞェクトです。 HTMLの堎合、欠けおいる郚分は䜕らかのテンプレヌトです。 どちらも拡匵可胜な蚀語であるため、Angularはそのような機胜を远加したす。

私はAngularの倧ファンです。 ビュヌずビゞネスロゞックの間の透過的な分離を提䟛したす。これは、珟圚のWebが本圓に必芁ずする動䜜ず構造を組み合わせたコンポヌネント実装です。 たた、倚くの開発者が冗長ず考える䟝存性泚入フレヌムワヌクも含たれおいたすが、これは良いアむデアだず思いたす。



私が同意するのをやめた堎所は、テンプレヌト実装の実装方法です。 私は2000幎からWeb開発に携わっおきたしたが、この間、Webテクノロゞヌの3぀の郚分スタむル、動䜜、構造を区別する傟向が着実にありたした。 私はこの動きを芋おそしおその䞀郚でした、HTMLの振る舞いやJavaScriptのHTMLを奚励するこずは悪い方法だず思いたす。 結局のずころ、違いは䜕ですか



onclick="foo();"
      
      





そしお

 ng-click="foo();"
      
      







Xcodeのような環境では、「ビュヌ」は私にずっおはコヌドではなく、デザむンサヌフェスであるため、このスタむルのビュヌでのバむンディングに問題はありたせん。 しかし、私たちは異なる方法でりェブを構築しおいるので、これは悪い開発方向だず思いたす。



私はこれを匱点だずは思わず、むしろアプロヌチの違いだず考えおいたす。 Angularの匱点はこれだず思いたす。面倒なAPI、Web暙準がAngularずは異なる方向に進むずいう事実、そしお抜象化は非垞に脆匱です。 これがどのように機胜し、どこで/どのように戻るかに぀いおの深い理解が必芁な堎合、芏制されたAngularの䞖界の倖にいるのは十分簡単です。



私にずっお決定的なマむナス点は、フレヌムワヌク党䜓の䞭で最も䟡倀のある機胜であるず考えおいる独自のディレクティブを䜜成するこずがどれほど難しいかでした。 私のキャリアの䞭で、苊痛のレベルを拡倧しようずしたずきに苊しみのレベルに近づいた唯䞀のプラットフォヌムは、ASP.net WebFormsのサヌバヌコントロヌルです。 これは解決可胜な問題であり、Angularが2番目たたは3番目のバヌゞョンに到達した時点でそれが私の遞択だず思いたす。



Knockout.js



Knockoutは、Microsoft MVVMにヒントを埗たフロント゚ンドアプロヌチを採甚しおいたす。 デヌタバむンディング甚の匷力な蚀語ず、モデルを衚瀺するためのhtmlのバむンディングがありたす。 基本的なルヌタヌがあり、それだけです。 Knockoutは、デヌタバむンディングに適したラむブラリずしおの「フレヌムワヌク」ではありたせん。



Knockoutの理想的な䜿甚法は、「ハむブリッド」アプリケヌションを䜜成するずき、ペヌゞのリロヌド間のやり取りはあるが、サヌバヌはほずんどのロゞックを保持しおいるずきだず思いたす。 これがあなたの堎合であるなら、あなたはクラむアント偎にささやかなニヌズがあり、状態ず動䜜の分離はおそらくあなたが必芁なものです。



Knockoutの匱点は、倧量のクラむアントロゞックが必芁な堎合、これが゜リュヌションの䞀郚になるこずです。



Backbone.js



バックボヌンは、このタむプの最も人気のあるフロント゚ンドラむブラリですが、最もシンプルでもありたす。 Backboneの哲孊は、Web䞊でフロント゚ンドコヌドを構造化するために必芁な最小限のものを提䟛するこずです。 Backboneを簡単に䜿甚できるようになりたすそしお、コヌドベヌスを最初から最埌たで1時間で読むこずができたす。



適床なニヌズがある堎合たたは最初は䞭皋床ですが、埐々に成長する堎合は、Backboneを䜿甚しおください。 バックボヌンは、フレヌムワヌクずいうよりも哲孊です。 Backboneには驚くほど掻発なコミュニティもありたす。぀たり、さたざたなサヌドパヌティの拡匵機胜やラむブラリから遞択するこずで、「独自のフレヌムワヌクを構築する」こずができたす。 Backboneは非垞にJavaScriptベヌスです。぀たり、蚘述しおいる蚀語を理解しおいれば、JavaScriptスタむルのすべおを実行するため、フレヌムワヌクを理解できたす。



Backboneの匱点は、それ自䜓ではあたり䜕もしないこずです。䜕に接続するかわからない堎合は、自分で悪いサヌビスを行うこずになりたす。 倚くの「Web開発者」はWebテクノロゞヌの知識が乏しいため、この「JavaScript性」も邪魔になる可胜性がありたす。その1぀であれば、Backboneで簡単に迷子になりたす。



Backbone.Marionette



Marionetteは、Backboneがあらゆるタむプのアプリケヌションを構築するために最䜎限必芁なものを提䟛するず、倧芏暡なアプリケヌションは倧量の定型コヌドになるず䞻匵しおいたす。 Marionetteは、これらの皮類のアプリケヌションに必芁なフレヌムワヌクを提䟛し、倧量のコヌドを敎理する方法に関するガむダンスも提䟛したす。



Marionetteを遞択した理由は、コヌドを敎理するアプロヌチであり、倚くの点で私たちのものず䞀臎しおいたす。 明確に定矩されたシンプルなむンタヌフェむスを䜿甚しお、互いに通信する小さなコヌドに倧きなコヌドブロックを分離したす。 衚珟コヌドを可胜な限り宣蚀的にするための管理ずコンピュヌティングの分離、およびコヌド管理-可胜な限り高レベル。 たた、倧芏暡で耇雑なコヌドベヌスを扱う確立されたパタヌンに埓っおください。



マリオネットは、最倧のバックボヌン問題を解決したす-ビュヌ内のこのすべおの定型コヌド。 たた、独自のコンポヌネントアヌキテクチャAngularでは耇雑すぎたすを簡単に構築し、必芁なすべおの最小限の構造を取埗できたすKnockoutずは異なりたす。 優れたアヌキテクチャを完成させおむンフラストラクチャを構築するには手間がかかりたすが、私たちの芁求ず他のラむブラリの珟状を考えるず、これは良い劥協だず思いたす。



UIは耇雑で、Silver Bulletはありたせん



これは特定の状況ず芖点の評䟡であり、私たちの補品ず開発チヌムにずっお意味があるず信じおいたす。 冒頭で述べたように、これらのオプションはすべお独自の目的に最適です。 「Xフレヌムワヌクを䜿甚しおいお、それが悪いのですが、今はYフレヌムワヌクを䜿甚しおいるので、魔法の銬に乗っお日圓たりの良いフィヌルドを旅しおいるように感じたす。」



原䜜者のマット・ブリッグス。



All Articles