私は個人的にあるスタイルを別のスタイルよりも好むわけではありませんが、Javascriptからの抽象化が、これらのフレームワークがテーブルにもたらす唯一の利点であるとは思いません。確かに、言語全体を抽象化することで、以前は可能であったことが不可能になることもあり、その逆もあります。バニラJavaScriptの記述よりもGWTなどのフレームワークを採用するかどうかの決定は、多くの要因に依存します。
各言語には長所と短所があるため、これをJavaScriptと言語Xの議論にすることは無益です。代わりに、そのようなフレームワークを使用することによって何が得られるか、または失われるかについて客観的な費用便益分析を行います。これは、残念ながらSOコミュニティではなく、あなただけが行うことができます。
内部で何が起こっているのかわからないという問題は、翻訳されたソースと同じようにJavaScriptにも当てはまります。$("p") == $("p")
のような比較を試みて結果を取り戻そうとすると、jQueryで何が起こっているのかを正確に知っている人は何人いると思いますかfalse
。これは架空の状況ではなく、SOに関していくつかの質問があります。言語やフレームワークを学ぶには時間がかかり、十分な時間があれば、開発者はこれらのフレームワークのコンパイルされたソースを同様に理解することができます。
上記の質問に関連するもう1つの側面は、信頼です。私たちは、低レベルの抽象化に基づいて高レベルの抽象化を継続的に構築し、低レベルのものが期待どおりに機能することになっているという事実に依存しています。正しく動作することを確認するために、C ++またはJavaプログラムのコンパイル済みバイナリを最後に掘り下げたのはいつですか?コンパイラを信頼しているからではありません。
さらに、このようなフレームワークを使用する場合、たとえばJSNIを使用してJavaScriptにフォールバックすることは恥ずべきことではありません。手元にあるツールを使用して、可能な限り最善の方法で問題を解決することがすべてです。JavaScript、Java、C#、Rubyなどについては何も神聖なものはありません。これらはすべて問題を解決するためのツールであり、あなたにとっては障壁になるかもしれませんが、リアルタイムの節約になり、他の人にとっては有利かもしれません。
Webプログラミングの方向性については、サーバー側のJavaScriptなど、成功すると思う、あるいは期待する興味深いトレンドがたくさんあります。少なくとも、Webアプリケーションでのコードの重複を簡単に回避できるという点で、非常に現実的な問題を解決します。同じ検証、ロジックなどをクライアント側とサーバー側で共有できます。また、単純な(逆)シリアル化メカニズムを記述できるため、RPCまたはRMI通信が非常に簡単になります。つまり、次のように書くことができれば本当に素晴らしいと思います。
account.debit(200);
代わりに、クライアント側で:
$.ajax({
url: "/account",
data: { amount: 200 },
success: function(data) {
..
}
error: function() {
..
}
});
最後に、次世代のソリューションはそれぞれの失敗から学び、より良い、より速く、より素晴らしいツールを構築するための成功に焦点を当てることができるため、Webアプリケーションを構築するためのフレームワークとソリューションにこのような多様性があることは素晴らしいことです。