私の目標は、既存のWebアプリケーションをRESTfulに移行することです シングルページアプリケーション (SPA)。現在、私はいくつかのJavascript Webアプリケーションフレームワークを評価しています。
私の要件は次のとおりです。
現在のアプリケーションはbackbone.js
を使用しています。全体として、backbone.js
は素晴らしいプロジェクトですが、どこで何をすべきか、どのように実装する必要があるかを決定する明確に定義された構造がありません。変化する開発者とより大きなチームで作業すると、メンテナンスが難しく理解しにくい、ある種の非構造化コードにつながります。これが、フレームワークを今探している理由です。このフレームワークはすでにすべてのものを定義しています。
最後のember.js
を調べました。このアプローチは私にとって非常に有望なようです。しかし、残念ながら、コードはほぼ毎日変更されます。したがって、私はそれを生産準備完了とは呼びません。そして、残念ながら、バージョン1.0になるのを待つことはできません。しかし、私はこのフレームワークの背後にあるアイデアが本当に好きです。
Angular.js
も広く普及したフレームワークであり、Googleによって維持されています。しかし、私は角度に慣れることができませんでした。私にとって、構造は一種不明瞭であり、フレームワークの各部分の全体的な責任についての説明が欠落しており、実装は遠回りに感じられます。簡単に言うと、これは私の個人的な印象であり、知識不足に基づいている可能性があります。
私が理解したように、両方のフレームワークにもサーバー部分が必要です。そして、RESTfulなバックエンドが必要なだけなので、言語、技術、ソフトウェアに関係なく、これは私たちが望むものではありません。さらに、バックエンドAPIは既に存在します(RoR)。
これらの3つの候補については、これ以上深く入りませんでした。多分これが私の次のステップになるでしょう。
だから今私の質問:
PS:「Throne of JS」カンファレンス(2012年以降)とJavaScriptフレームワーク全般について、Steven Anderson(Knockout.jsのコア開発者)から 素晴らしいブログ投稿 をお勧めします。
PS:はい、私はすでにいくつかの質問がSOにあることを知っています。しかし、SPAの開発は非常に迅速かつ高速であるため、それらのほとんどはすでに古くなっています。
最近、プロジェクトでもJavaScript SPAフレームワークを決定する必要がありました。
早い段階でEmberを見て、あなたと同じような考えを持っていました-私はそれが本当に好きでしたが、使用するにはまだ早すぎるように感じました...私が読んだチュートリアルの約半分はテンプレートの動作方法が最近変更されたため、現在のバージョン。
バックボーンは、私たちが真剣に検討した最初のフレームワークでした。 「よく定義された構造」を持っていないのはなぜだと思うのか分かりません。バックボーンは、モデルとビューのコードを分割する方法についてかなり明確です。たぶん、ある種のアプリテンプレートがないということですか?とにかく、Backboneは実際にはモデル/ RESTバインディングの部分に焦点を当てているように見えますが、ビューバインディングについては何も規定していません。モデルバインディングが重要であり、Railsを使用している場合、これを行うのは簡単です。残念ながら、私のアプリのWebサービスは実際には一致せず、すべてに対して.sync
および.parse
メソッドを独自に作成する必要がありました。モデルとビューのコードの分離は素晴らしいものでしたが、すべてのバインディングをゼロから記述する必要があるため、それだけの価値はありませんでした。
ノックアウトは陰から背骨の陽のようなものです。 Backboneがモデルに焦点を当てているのに対して、KnockoutはMVVMフレームワークであり、Viewに焦点を当てています。 JavaScriptオブジェクトプロパティのobservable
ラッパーがあり、data-bind
属性を使用してプロパティをHTMLにバインドします。ビューバインドは主にアプリに必要なものだったため、最終的にはKnockoutを使用しました。 (後で説明するように、他にも...)KnockoutのビューバインディングとBackboneのモデルバインディングが好きな場合は、両方のフレームワークを結合する KnockBack もあります。
Knockoutの後にこれを見てください-残念ながら、Knockoutがどのようにビューバインディングを表示したかについて、私たち全員がかなり満足しているように見えました。 Knockoutよりも複雑で入りにくいように見えました。そして、カスタムHTML属性の束を使用してバインディングを行いますが、これが好きかどうかはわかりません... Angularを後で見直すかもしれません。フレームワークのように-多分、私たちはそれをこのプロジェクトには遅すぎたのかもしれません。
これらのどれも実際にはあまり見ていませんでした。 Spineは、明示的なControllerオブジェクトを持つBackboneと同様のフレームワークであり、CoffeeScriptで記述されていることは知っていますが。
あとがき
先ほど述べたように、Knockoutを使用することになりました。プロジェクトでは、ビューのバインドに重点を置くことがより重要だからです。また、モジュール化には RequireJS を、ルーティングと履歴を処理するには crossroads および Hasher を、テストには Jasmine を使用しました。 JQuery 、 Twitter Bootstrap 、および nderscore.js (そしておそらく現時点で忘れているライブラリがもっとあります)。
Javascriptアプリの開発は、JavaエコシステムよりもRailsエコシステムに似ています。 Railsは、すべてのアプリ(Railsフレームワーク)で使用するものの堅実なコアを提供し、コミュニティはその上に多くのカスタマイズ(gems)を提供します。 Javaは...言語を提供します。そして、Java EEまたはSpringまたはPlayまたはStrutsまたはTapestryを選択できます。そして、JDBCまたはHibernateまたはTopLinkまたはIbatisを選択して、データベースと通信します。そして、AntまたはMavenまたはGradleを使用してビルドできます。そして、Tomcat、Jetty、JBoss、またはWebLoginを選択して実行します。したがって、を選択するよりも、必要なものと一緒に動作するものを選択することに重点が置かれます。使用するフレームワーク。
多数のSPAを使用してクラウドサービスプロジェクトの開発を開始してから1年が経過したため、RESTfulアーキテクチャニーズを満たすためにUIに使用するjavascriptフレームワークを決定しました。そして、多くの調査の結果、 Dojo framework を使用することになりました。
あなたが好きになる主な機能:
これらの問題を克服するために、AJAXポーラー、エラー処理、ユニバーサル、ロードおよび通知ソリューションを開発しました。 dojoフレームワークの規則と構造を使用して、非常に簡単にそれを行いました。そうしたくない場合は、おそらくこの部分に別のフレームワークを使用する必要があります。
ウェブ上のすばらしいSPAを見ると、すべてがカスタマイズされており、複数のフレームワークを使用していることがわかります。しかし、Dojoだけでの経験は素晴らしいものでした。したがって、他のフレームワークはすべてSPAに対して不完全であるため、他のフレームワークについては考えないことをお勧めします。最終的には別のオプションもあります(これはお勧めできません。詳細情報はありません)。 UIとJavaScriptを自動的に生成することにより、SPAを構築できるJavaフレームワークを使用します。