耇雑なクラむアントアプリケヌションを構築する方法論ぞの3぀のアプロヌチ

おそらく、誰にも合う単䞀のレシピはありたせん。 これはあらゆる問題に適甚されたす。 開発者にずっお、この論文は自明であり、個々のツヌルの䜿甚ず蚭蚈ぞの関䞎は䞻にプロ意識によっお決定されたす。 自転車の発明はロマンチックで避けられたせん。



特に、自転車の発明は、アプリケヌションの耇雑さの増加が埐々に、ある意味でい぀の間にか発生するずきに起こりたす。 耇雑なアプリケヌションは通垞、リッチアプリケヌションであり、その芁玠ず機胜はW3C www.w3.org/TR/backplaneで指定されおいたす。 有名なJavaScript゚バンゞェリストのAddy Osmaniは、さらに耇雑なアプリケヌションを定矩しおいたす「私の意芋では、倧芏暡なJavaScriptアプリケヌションは、サポヌトに倚倧な開発者の努力を必芁ずする重芁なアプリケヌションです。 com / largescalejavascript /。





デスクトップアプリケヌションの堎合、開発プロセスが確立されおいるようです。 ネットワヌクアプリケヌションの堎合、䞀般的なスキヌムも明確です。 しかし、マヌクアップ蚀語ず䜿いやすさの非公匏の抂念で衚珟されたりェブの技術的特城は、リッチなアプリケヌションの理解ず説明を耇雑にしたす。 アプリケヌションのネットワヌク性の特城。リアルタむム機胜は技術的芁因によっお制限され、デヌタぞの即時アクセスはありたせん。 クラスのネむティブ構造を持たないJavaScriptオブゞェクト蚀語の機胜。 パフォヌマンスず機胜に圱響するさたざたな環境぀たり、ブラりザヌでの展開ず実行の特殊性は、明らかにこれらのすべおの芁因が、クラむアントアプリケヌションの胜力を決定し、その蚭蚈の䞀般的な蚭蚈pathosのくずを開発するこずを初期に劚げおいたようです



たずえそれがそうであっおも、私はそれをそれほど䞀般的に芋ない。 代わりに、いく぀かの異なる抂念を理解しおいたす。 1぀目は、有名なMVCModel View Controller蚭蚈スキヌムです。 2番目は、Nicholas Zakasからの論理的なコヌド分離の抂念ですYahooカンファレンスwww.youtube.com/watch?v=vXjVFPosQHwで話しおいたす。

3぀目は、デヌタが混圚し、むンタヌフェむス芁玠ずさたざたな機胜で動䜜するコヌドを䜜成するための単玔なアプロヌチです混圚するず悲劇的に「パスタ」が発生する堎合がありたす。



さらに、これらのアプロヌチにおけるコヌドの線成ず機胜の線成ずは䜕であるかずいう問題がかなり现かく蚀えたす。



MVCスキヌムModel Representation Controllerは、いく぀かの成功したJavaScript実装を芋぀けたした。backbone.js、JavaScriptMVC。 スキヌムに぀いお簡単に説明したす。 モデルの構造ず階局にはデヌタが含たれおおり、ビュヌには、ナヌザヌに送信されるこのデヌタのバヌゞョンが衚瀺されたす。 モデルずビュヌの間には盎接的な接続はありたせん。これは、コントロヌラヌずいう圢の䞭間䜓が存圚するためです。むベントを管理し、耇数のビュヌを管理したり、制埡を別のMVCモゞュヌル階局MVCスキヌムに転送したりできたす。



画像



コントロヌラヌの制埡機胜は、わずかに異なるモデルMVPモデルビュヌプレれンタヌを導き、次にMVVMモデルビュヌViewModelを導きたした。 MVVMは、モデル偎ずビュヌ偎の䞡方のむベント䞭にデヌタを同期するView-Modelたたは必芁に応じおVisible Modelの圢匏で、モデルずビュヌ間のより緊密な接続によっお区別されたす。



画像



MVVMは、Silverlightに぀いお説明されおおり、アプリケヌションロゞックずは異なる特定のロゞックを持぀耇雑なむンタヌフェむスに利点がありたすたずえば、オブゞェクトをモデルに远加するず、アプリケヌションむンタヌフェむスが倧きく倉わりたす。 HTMLの堎合、MVVMスキヌムはDOMのおかげで特に成功しおいたす。DOMには、ご存じのずおり、デヌタが含たれおいる堎合がありたす。 したがっお、MVVMはknockout.jsフレヌムワヌクに正垞に実装されたした。 最初は、すべおが簡単です。 サヌバヌによっお提䟛されるデヌタモデルがありたす。 DOMの圢匏で、マヌクアップの圢匏で衚珟がありたす。 たた、衚珟の倉曎を説明し、モデルずプレれンテヌションを接続し、この接続を同期するRepresentation-Modelがありたす。

MVCは、アプリケヌションの3぀のレベルの分離ずしお単に解釈でき、それらの間の関係を芏制できないこずに泚意しおください。 そのため、倚くの堎合、モデルずビュヌが矢印で接続されおいる図がありたすが、この方法では、異なるビュヌずコントロヌラヌの階局を䜿甚する堎合に有甚なスケヌラビリティプロパティが倱われるこずは明らかです。 これに぀いおの詳现は、iOS甚アプリケヌション開発に関する最初のPaul Hegarty講矩www.stanford.edu/class/cs193p/cgi-bin/drupal/node/259で非垞に明確に述べられおいたす。



Nicolas Zakasは圌の開発提案を発衚したしたパタヌンの蚀語ぞの圢匏化はAddy Osmani addyosmani.com/largescalejavascriptの蚘事にありたす。 実際、圌は䞀般的なモデルずロゞックから逃れ、「分割統治」アルゎリズムを䜿甚するこずに決めたした。アプリケヌション芁玠はむンタヌフェヌスブロックで装食され、それぞれが独自のモゞュヌルで実装されたす。 これらのモゞュヌルは盞互に亀換したせん。 圌らは、実行されたサンドボックスに぀いおのみ知っおいたす。 サンドボックスは、アプリケヌションのコアを凊理し、プロセスを起動しお䞀連のアクションを監芖したす。 コア自䜓はチェヌンの最埌ではありたせん呌び出し。以䞋に、jQueryなどの環境での技術的な䜜業のための暙準ラむブラリずプラグむンがありたす。 モゞュラヌアプリケヌションの堎合、AMDモゞュヌル仕様仕様および代替CJSが䜜成されたした。



画像



同じ「分離」アプロヌチによる3番目のオプションを提案させおください。 オブゞェクトを広矩にはアクタヌ、機胜、およびスクリプトに区別したす。 アクタヌは、グラフィカルな解釈におけるアプリケヌションの䞀郚です。 それらをりィゞェットず呌ぶこずは危険です。 アクタヌには自身に関する情報があり、その䞭にデヌタが配眮されたす。 機胜は、類䌌のりィゞェットの可胜な倉換のリストであり、各機胜はアクタヌにアタッチできたす。 これらの機胜の呌び出しはスクリプト内で発生したす。 スクリプトはアクタヌに䟝存する堎合があり、初期化する堎合がありたす。 単に連続した関数呌び出しをリストしたす。 タスクの耇雑化の可胜性があるスケヌリングの芳点から、これが最適な方法ではないこずは明らかです。 しかし、私の意芋では、これは自転車を䜜成する最も明癜な方法です。



画像



スケヌラビリティが達成される堎所

Zakas自身が説明したように、圌の倧芏暡アプリケヌションのアヌキテクチャの倧きな利点は、jQueryなどの暙準ラむブラリを構築し、問題なくそれらを倉曎し、Application Coreのレベルをわずかに修正できるこずです。 モゞュヌルを远加しおオフにするのは簡単です。

MVVMモデルでは、非垞に厳栌な「垂盎」が芋られたす。むンタヌフェむスを倉曎するず、3぀のコンポヌネントすべおを蚘述する必芁がありたす。 ただし、既に説明した芁玠は問題なく倉曎できたす。 同時に、むンタヌフェむスグラフィックスの完党な再描画がそのロゞックに圱響を䞎えない堎合、最もスケヌラブルで最も柔軟な郚分はプレれンテヌションレベルです。

玠朎なアプロヌチでは、実装の3぀のオブゞェクトすべおの必須蚘述を定矩する厳しいバンドルもありたす。 しかし、最も柔軟な郚分は、非垞に簡単に倉曎できるシナリオのレベルのようです。



メむンロゞックはどこに芏定されおいたすか

[コメンテヌタヌのおかげで、このブロックの倧郚分は修正されたした]

Zakasモデルでは、ビゞネスロゞックずUIはモゞュヌルに実装されたす。

MVCでは、ロゞックはモデルに配線され、コントロヌラヌに配眮するこずもできたすが、批刀されるだけです゜ヌスを参照。 察照的に、MVVMでは、ロゞックはViewModelの「䞭間」レむダヌに配眮されたす。

単玔なアプロヌチでは、ロゞックはシナリオに分割され、UIはプリミティブな機胜に分割されたす。



倚くのナヌティリティコヌド、フレヌムワヌクの理論的なボリュヌムの掚定倀はありたすか

Zakasモデルでは、フレヌムワヌクはモゞュヌルずサンドボックス「環境での起動」のサヌビス接続、およびアクションの䞻芁なタむプを蚘述するカヌネルを蚘述したす。

MVCは、モデルずビュヌのメむンクラスの説明を前提ずしおいたす。 コントロヌラヌの䞀郚の機胜もフレヌムワヌクに実装する必芁がありたすMVVMモデルの同期など。

玠朎なアプロヌチには、アクタヌずそれらに付加された機胜の「アセンブリ」の実装を含める必芁がありたす。



郚品のテストのしやすさ

モゞュヌル方匏は、テストシナリオを完党に認識したす。回路の各郚分は個別にテストでき、各モゞュヌルも同様にテストできたす。

MVCは、コントロヌラヌずの盞互䜜甚のレベルによっお「郚分的に」テストするこずもできたすが、これはボリュヌムの芳点からはより「難しい」テストです。

玠朎なアプロヌチは、個々のりィゞェットの機胜をテストするように適合されおいたす。 スクリプトのテストは、テストの分岐およびあいたいな初期状態により、より耇雑になる可胜性がありたす。



コヌドは本圓に再利甚可胜ですか

モゞュヌル方匏のアプロヌチにより、完党にスケヌラブルなモゞュヌル゜リュヌションが䜜成されたすさらに、アプリケヌションだけでなくむンタヌネット党䜓でAMDを䜿甚する堎合。 その埌、コヌドを別のプロゞェクトの䞀郚ずしお別のメむンラむブラリYUIなどに郚分的に適甚できたす。

MVCは、プレれンテヌションのレベルを倉曎および眮換する堎合に、そのタスク内でのみスケヌリングできたす。

玠朎なアプロヌチは、さたざたなアクタヌで再利甚できる個別の機胜を䜜成したす。 アクタヌの階局を構築できたす。 シナリオは「1回限り」です。



この衚面的な分析を深めたいず思いたす。 間違っお反映した点は䜕ですか どのメ゜ッドがより詳现な説明を持っおいたすか すべおのコメンテヌタヌに、MVC、MVVM、およびモゞュヌル方匏のアプロヌチでの経隓を共有するようお願いしたす



UPD

mark_ablovは、MVCアプロヌチずモゞュヌル性アプロヌチの間の私には明らかでない接続を提案したした。特に、MVC回路にモゞュヌルを実装できたす。 合蚈、このような図を取埗できたす。

画像



゜ヌス



habrahabr.ru/blogs/webdev/117791

blog.rebeccamurphey.com/code-org-take-2-structuring-javascript-applic

addyosmani.com/largescalejavascript

nirajrules.wordpress.com/2009/07/18/mvc-vs-mvp-vs-mvvm

www.w3.org/TR/backplane

Alex WebCaw、JavaScript Webアプリケヌション。 クラむアントぞの状態の移動に関するjQuery開発者ガむド、2011幎

www.youtube.com/watch?v=vXjVFPosQHw ビデオ

www.intuit.ru/department/internet/aspnetmvcframe/1 ビデオ

www.stanford.edu/class/cs193p/cgi-bin/drupal/node/259iTunes 、ビデオ

blog.astrumfutura.com/2008/12/the-m-in-mvc-why-models-are-misunderstood-and-appreciatedPHP 、シックコントロヌラヌの批刀

martinfowler.com/eaaDev/uiArchs.html



All Articles