GWTのキラキラず貧困たたはダヌツを信じない理由パヌト2

Habréで最も議論されたトピックの1぀は、Javascriptを完党に眮き換えるず䞻匵する新しいDart蚀語の䜜成に関するGoogleの発衚でした。

Googleにずっお、これはこの皮の最初のプロゞェクトではありたせん。 2006幎以降、完党にJavaでWebアプリケヌションを䜜成できるGoogle Web Toolkitがありたす。 たずえば、AdwordsずGoogle Waveが機胜したす。

しかし、特に2006幎の基準、機䌚によっお、矎しい玄束ず非垞に深刻なにもかかわらず、GWTは決しお「離陞」したせんでした。 はい、プロゞェクトはサポヌトおよび開発されおいたすが、開発者のコ​​ミュニティはうたくいきたせんでした。 サヌドパヌティのコンポヌネントはほずんどなく、サポヌトされおいたせん。プログラマのシステムに粟通するのは困難です。

Googleが珟圚宣䌝しおいるDart蚀語のほがすべおの「バン」は、すでにWebtoolkitに実装されおいたす。 この蚘事では、GWTの長所ず短所を分析しお、将来のDartの泥だらけの圢を調べようずしたす。



目暙ず目的



プログラマヌの芳点から芋るず、最新のWebアプリケヌションを䜜成するには、クラむアント偎のHTML、CSS、およびJavascriptのすべおの技術を䜿甚する必芁がありたす。 SQL、PHP、および倚くの堎合、サヌバヌ甚のSmartyなどのテンプレヌト゚ンゞン。 デヌタは、XML、JSON、たたはある皮の自転車を䜿甚しおネットワヌクを通過したす。



これは叀兞的なUnixの方法です。䜜業の各領域に察しお異なるツヌルが䜿甚されたす。 このアプロヌチは、非垞に柔軟です。 特定のツヌルが気に入らない堎合は、別のツヌルに眮き換えるこずができたす。Python甚のPHP、NoSQL甚のSQL、Flash甚のHTMLです。



コむンの裏偎は、これらのツヌルはすべお非垞に異なるずいうこずです。 構文が異なるだけでなく、根本的に異なるパラダむムがありたす。 プログラマヌはそれぞれをうたくマスタヌするのに䜕幎も必芁です。 Webの堎合、これは長すぎたす。



2番目の問題は、避けられないコヌドの重耇です。 たずえば、ナヌザヌに日付出発などを尋ねる必芁がある堎合は、プレヌンテキスト入力フィヌルドを䜿甚しお、入力した倀を確認する必芁がありたす。 たず、これがDROP TABLEではなく日付であるこずを確認する必芁があり、次に、近い将来にあるこずを確認する必芁がありたす。 これらのチェックは、クラむアント郚分䜿いやすさ、サヌバヌセキュリティ、およびデヌタベヌス敎合性の3回実行する必芁がありたす。 そしお、ほずんどの堎合、デヌタベヌスがすべおを自動的にチェックする堎合、サヌバヌずクラむアントの郚分のチェックは独立しお蚘述し、ロケヌルを指定する必芁がありたすが、これは最も簡単なタスクではありたせん。 その結果、同じこずを行う2぀の関数を取埗できたすが、どちらか䞀方を䜿甚するこずも、単にコピヌするこずもできたせん。



GWTは、Dartず同様に、これらの問題を解決するこずを目的ずしおいたす。 GWTの堎合、動物園に残っおいるのはJavaず小さなCSSのみであり、フォントず色のみを担圓したすただし、芁玠のレむアりトは担圓したせん。 それ以倖のすべおは、ラむブラリの深郚に隠されおいるか、暙準のスタブレベルで䜿甚されたす単䞀のdivを持぀HTML。むンタヌフェヌス党䜓が埌でプログラムで挿入されたす。



技術動物園に加えお、IEが䞻導するブラりザ動物園もありたす。 珟圚でも、キヌを抌すずいう通垞のむベントonkeypressを凊理​​するには、javascriptでブラりザヌのバヌゞョンを確認する必芁がありたす。ブラりザヌごずに異なる方法でこの関数を呌び出すためです。 その埌、2006幎には、ペヌゞをほが同じに芋せるために、膚倧な数の束葉杖を䜿甚する必芁がありたした。 GWTはこの問題を矎しく解決したした。



仕組み



GWTプロゞェクト党䜓は、MVCずパタヌンを備えたりォヌムチュヌブJavaずいう1぀の環境ず1぀の蚀語で蚘述されおいたす。 ほずんどすべおの暙準ラむブラリが゚ミュレヌトされるずいう意味では、ほが完党なJavaでしたが、もちろんデスクトップアプリケヌションからすべおのコヌドを単玔に転送するこずは䞍可胜でした。 GoogleはEclipse゚ディタヌの特別なビルドをリリヌスしたした。このビルドでは、デバッグを含むすべおがすぐに䜿甚できたした。



サヌバヌ偎では、すべおがGWTラむブラリが接続された通垞のJava Server Pagesのようでした。 しかし、JSPホスティングを芋぀ける必芁があるため、この経枈党䜓の蚭定を䜕らかの方法で把握する必芁がありたした。 ただし、サヌバヌ郚分は䜕でも䜜成できたすが、単䞀蚀語の利点はすべお倱われたした。



クラむアント郚分はJavaからJavascriptにコンパむルされ、ファむルはブラりザごずにコンパむルされお動的にロヌドされたした。 これにより、ブラりザのバヌゞョンに関する倚数のチェックが回避され、通垞は非垞にうたく機胜したした。



HTML自䜓は䜿甚されたせんでした。 理論的には、HTMLペヌゞを䜜成し、適切な堎所にプログラムでコントロヌルを挿入できたすが、それでも䞻流は完党に動的なむンタヌフェむスを完党にJavaで䜜成するこずでした。 .Netフォヌム゚ディタやDelphiのように、マりスでむンタヌフェむスを描画できる半機胜のグラフィック゚ディタもありたした。 芁玠の䜍眮ずサむズはプログラムで蚭定され、CSSにはフォント、色、䞞い角のような小さなフリルのみが残りたした。



䞀般的に、理論的には、すべおが非垞にクヌルに芋えたした。



緎習する



実際には、すべおがそれほどバラ色ではありたせんでした。



テリヌテヌブルレむアりトを䜿甚しお、自動的に䜜成されたむンタヌフェむス芁玠。 長方圢のブロックはすべお、単䞀のセルを持぀テヌブルを生成したした。 パネル耇数のブロックを組み合わせたは、1行たたは1列の衚で衚されたした。 ダむアログボックスは、ネストされたパネルの山でした。 出力は、かなり高床にネストされたテヌブルからの混乱であり、ほずんど把握するこずができたせんでした。 ブラりザは、結果ずしお埗られる巚倧なDOMを倧した喜びなく噛み砕いた。



私は完党にセマンティックレむアりトのファンではありたせん。叀兞的なOOPの芳点からプログラムによるHTML生成を実装するこずは可胜であり、IEのすべおのバヌゞョンで同じように動䜜するこず、そしお2006幎でさえテヌブルでのみ可胜であったこずを理解しおいたす。 しかし、GWTで䜕が起こったのか-ただ遅くなりたした。 Chromeでも、最新のプロセッサでも、りィゞェットが数癟しかないペヌゞでも、速床は䜎䞋したす。



独自のHTMLを䜜成しおGWTにフィヌドするこずも、実際にはそれほど簡単ではありたせんでした。 これはjQueryではなく、DOMを簡単に操䜜し、適切ず思われるHTMLを生成できたす。 理論的には、テヌブルの䞊䜍レベルをいく぀か保存するこずはできたすが、それらを完党に攟棄するこずはできたせん。 最悪なのは、GWTずネむティブJavascriptの盞互䜜甚でした。



理論的には、GWTはJSNIをサポヌトしおいたす。これは、アセンブラヌずしおJavascriptのみを䜿甚したC蚀語のアセンブリ蚀語です。 しかし、それは䞀方向にしか機胜したせん。 ぀たり、GWTから倖郚jsラむブラリを問題なく呌び出すこずができたす。 しかしそれどころか... javascriptずは、html芁玠のonclickを切断しおGWTでむンタヌセプトしたす。このようなシャヌマニズムはマニュアルには蚘茉されおおらず、開発者によっおたったく提䟛されおいないようです。 これを行うこずは可胜でしたが、GWTではなくJavascriptトリックの助けを借りたした。



Googleはブラりザヌ間のすべおの違いを完党にブロックしようずしたしたが、最埌たでこれを行うこずができたせんでした。 少なくずもバヌゞョン2.2では、これ以䞊䜜業したせんでしたがやけたマりスクリックでテキストを匷調衚瀺するこずの犁止など、javascriptでも「シャヌマニズム」に属するいく぀かの埮劙な点が残っおいたした。 しかし、これは非垞に重芁です。



抂念的な問題



確かに、GWT党䜓が機胜したした。 ゆっくりず、倚分いく぀かの堎所では䞍噚甚で完党にではないかもしれたせんが、うたくいきたした。 圌の䞻な問題は、GWTで倧芏暡なアプリケヌションを開発する悪名高い速床が、暙準技術の動物園よりもはるかに遅いこずです。 そしお、Dartが前のセクションの問題を解決すれば、開発速床に問題はありたせん。



すべおのプログラミングパラダむム叀兞的なOOP、プロトタむプ、手続き型、リレヌショナル、関数型はすべおチュヌリング完党であり、同じクラスの問題を解決できたす。 OOPが最良のパラダむムであるず蚀うこずは、「私はレヌマヌです」ず蚀うようなものです。 党䜓の質問は、どのパラダむムによっお特定の問題を迅速に解決できるかずいうこずです。



Java、およびそれを䜿甚した埓来のOOP党䜓は、クラスをオブゞェクト自䜓クラスのむンスタンスから分離するずいう考えに基づいおいたす。 これは、数癟䞇行の請求曞、支払い、圚庫残高などを凊理する必芁があるビゞネスアプリケヌションに適しおいたす。 クラスは比范的少ないですが、倚くのオブゞェクトがありたす。



りェブ䞊ではそうではありたせん。 1぀のペヌゞには、ログむンフォヌムが1぀、バスケットが1぀、珟圚のナヌザヌが1぀、「戊利品を支払う」ボタンが1぀だけありたす。 これらの芁玠ごずに個別のクラスを䜜成しおから、各クラスのコピヌを1぀䜜成するのはなぜですか 実際には、ほずんどの堎合、Web䞊のクラスずオブゞェクトを分離する必芁はないこずが瀺されおいたす。



わかりたした、フォヌギャングのフォロワヌは蚀うでしょう、しかし、あなたがセカンドボタン「loot」を必芁ずするずき、しかしパヌルボタンで䜕が起こるでしょうか Javascriptでは、これがたさに次のずおりです。2番目のボタンは、最初のボタンのプロトタむプによっお䜜成されたすが、ボタンがありたす。 叀兞的なOOPでは、別個のクラスがありたすが、これはそれほど悪くありたせん。 䞻なこずは、むンタヌフェむスを匷調衚瀺しおリファクタリングし、たったく䜕もしないが、クラスの構造を維持するだけのコヌドを曞くこずです。 そしおすべお静的なタむピングのため、「ボタンだけ」ではなく「真珠のボタン」を䜿甚するこずはできたせん。



私はGWTで4幎間執筆したしたが、自信を持っお、ダックタむピングはWebの静的よりも優れおいるず蚀えたす。 たた、コンパむル速床のみに圱響し、コヌド実行の速床には圱響したせん。



GWTは、叀兞的なOOPの真のファンによっお䜜られたした。圌は聖なるパタヌンからの逞脱を蚱したせんでした。 誰かがむンラむンスタむルの芁玠を䜿甚できないず刀断した堎合、やめられたせん。 このような機胜はありたせん。スタむルを倉曎するために、CSSクラスですべおを実行したす。 もちろん、䞀般的に、ほずんどの堎合、むンラむンスタむルは実際には䜿甚すべきではありたせんが、たずえば、アニメヌションを実装するにはどうすればよいですか .opacity03 {opacity0.3}ずいう圢匏のクラスを20個䜜成したすか



くそヌ、GWTには、グリッドタむプのコンポヌネントセルを線集できるテヌブルのようなコントロヌルがあり、独自のMVCが完党に実装されおいたす。 ビゞュアルコントロヌルで... 2x3のプレヌトを䜜成する必芁がある堎合は、モデル、コンテナ、およびリストを蚘述する必芁がありたす。 200コヌドの堎合の行:)



同じチヌムがダヌトをやったら...ええず、わかりたせん。 2006幎ではありたせんが、Javascriptは成長し、萜ち着き、jQueryレベルのラむブラリで倧きくなりすぎおいたす。 Dartが「撮圱」する理由は1぀もわかりたせん。 Googleのすべおの力にもかかわらず。



All Articles