2012-04-17 14 views
2

私は、私が取り組んでいるプロジェクトとプロジェクト管理システムを採用し、それを標準の複数ページアプリケーションからシングルページアプリケーションに変換することに決めました。このプロセスでは、多数のjavascript MV * ishフレームワーク(ember、knockout、backboneなど)を見てきました。backbone.jsを使うのが最も柔軟な解決策で、私はすでにアンダースコアを使用しています。 jsユーティリティとテンプレートシステムの両方で使用できます。これを行うと、私が持っているバックボーンとPHPモデルコードの重複

1つの最大の懸念は、私は両方の私のPHPのモデルでは、私の基幹モデルでモデルやビジネス/ドメインロジックを持っているつもりです潜在的なコードの重複です。

これは、このようなアーキテクチャと一緒に行くとき、私は有料を持っているか、私はこの懸念を軽減するために行うことができますいくつかのものがあるだけで技術的なコストですか?

答えて

1

サーバーとクライアントで異なる言語を使用している場合は、この部分的な論理複製を避ける可能性はないと思います。

あなたは間違いなく、サーバーとクライアントで同じコードを使用する場合は、唯一の共通言語にそれのすべてを移動する必要が:JavaScriptを。

複数のJSはこれらは非常に透過的にサーバとクライアントの間で開発を統合フレームワークがあります:derbymeteor、...

3

あなたはNode.jsのを含む私は答えた前の質問を見てみたいことがあります。

Reusing backbone views/routes on the server when using Backbone.js pushstate for seo/bookmarking

使用している私は現在、今やっているDavis.js + Mustache + JavaのSpring MVCのbackened(私の元の質問に基づく:Single page Web App in Java framework or examples?)。

ブラウザはPushstateをサポートしていない場合、私は、サーバーを持っているが口ひげ(すなわち、標準的なWeb 1.0)のJavaバージョンを使用して、ページ全体のレンダリングを行います。ブラウザがPushstateをサポートしている場合、ブラウザはモデルのJSONバージョンのAJAXリクエストを行います。モデルは、クライアント側の使用icanhz(すなわち、JavaScriptの口髭)をレンダリングされます。

あなたのロジックの大部分は、特定のURLに基​​づいて、それをレンダリングするモデルを取得している場合、これはかなりうまく動作します。つまり、あなたのビジネスロジックは「これをレンダリングするURLに基​​づいて」です。これはウェブ上のサイトのほとんどがどのように動作しているかを示しています(このウェブサイトはまだウェブ1.0ではありません)。明らかに、これはリアルタイムチャットやHTML5ゲームのようなものでは機能しません。

この設計のPythonのバージョンは、ここで言及されています。私は、誰かがPHPのバージョンを行っていると確信しているhttp://duganchen.ca/single-page-web-app-architecture-done-right/

+0

ここDiffidentlyいくつかの良い情報が、このテーマに多くの読んだ後、私は、サーバー側でできるだけ多くのビジネスロジックを維持しようとするつもりです、それらの数は、ここで指摘だと思います。http://programmers.stackexchangeを。 com/a/114800/20237検証で重複しなければならないことを望む唯一のことは、おそらく他のすべてがおそらくサーバーコードに保持されているはずです。また、実際の条件文(if(someVar == 'some value')など)をサポートするテンプレートエンジンが必要なので、私は口髭を使用できません。アンダースコアテンプレートエンジンのようです。 – ryanzec

+0

テンプレート用のロジックがさらに必要な場合は、Mustacheの拡張機能であるハンドルバーを使用できます。私はちょうど限界を除いて学び、できるだけ多くのモデルをレンダリングに役立てることができます(あるケースでは、モデルにhtmlを追加することさえできます)。 –

+0

口髭のテンプレートを使って '真の条件'を行うことはできますが、テンプレート自体ではなく、ビュークラス/オブジェクトを持ち、そこにロジックを実装するだけです。このようにして、テストするのがはるかに簡単です。 –