10

私は非常に複雑なemberjsアプリケーションを作成し、それをAPIのバックエンドに結びつけています。EmberJS:モデル、ストア、コントローラ、複雑なアプリケーションのビューの良い分離?

通常、API呼び出しは特定のモデルには関係しませんが、レスポンスのさまざまなセクションでさまざまなタイプのオブジェクトを返すことがあります。 Events APIを呼び出すとイベントが返されますが、メディア資産やイベントに関与する個人も返されます。

私はこのプロジェクトを開始したばかりです。メンテナンス可能なコードベースを整備するために、懸念事項を分けるのに最適な方法について、専門家の指導を受けたいと思います。

私はこれに近づいています方法は次のとおりです。

  • モデル:基本的にそれぞれの分野、およびその他の計算されたプロパティを持つレコードを処理します。ただし、モデルは要求を行う責任はありません。
    • 個人、イベント、写真、ポストなど
  • ストア:本質的にキャッシュです。たとえば、eventStoreは、サーバーから受信したすべてのイベント(おそらく異なるリクエスト)を配列に格納し、idによってインデックスされたイベントのハッシュに格納します。
    • individualStore、eventStore等
  • コントローラ:それらは、例えば、関連するAPIコールのセットにタイeventsControllerは、イベントまたは特定のイベントを取得したり、新しいイベントなどを作成したりします。後で取得するために、異なるstoresへの応答を「ルーティング」します。彼らは店に送られた後、応答を保持しません。
    • eventsController、userSearchControllerなど
  • ビュー:これらは特定のビューに関連付けられています。一般的に、私のアプリケーションは、さまざまな場所で複数のビューを持つことができます。 latestEventsViewをダッシュ​​ボードに追加し、別々のイベントページを作成します。
  • テンプレート:それは何ですか。

はかなり頻繁に、私のテンプレートは、店舗に直接結合することが必要(例えばpeopleViewは、いくつかの順序でソートされたリスト内individualStoreにあるすべての個人を、一覧表示したいです)。

そして、時には、彼らは計算されたプロパティ

alivePeople: function() { ... }.property('[email protected]'), 

様々なフィルタリングに結合し、並べ替えオプション「選択」ビューでは、ストアから別のリストを返す必要があります。あなたは私の最後の質問を見ることができますwhat is the right emberjs way to switch between various filtering options?

誰がこのフィルタリングを行うべきですか、ビュー自体または店舗?

レイヤー間でこの種のバインディングは大丈夫か、コードのにおいですか?懸念の分離が良いか、何かが欠けていますか?コントローラーはここでもっと何かをしてはいけませんか?私の見解は店舗に直接結びついていますか?

MVCの特別なケースが私のニーズに適していますか?

アップデート2012年4月17日 私の研究私は考え出した私のデザインのいくつかの問題があり、特にhttp://vimeo.com/user7276077/videoshttp://jzajpt.github.com/2012/01/17/emberjs-app-architecture.htmlhttp://jzajpt.github.com/2012/01/24/emberjs-app-architecture-data.html

から、上行く:リクエストを作成

  • コントローラ(コントローラーではなくコントローラーではありません)
  • ステートチャートが欠落しています - これらはビューコントローラーのやりとりにとって重要ですこれは、動作中のステートチャートの良い例である

(いつかあなたの相互作用はもう簡単です実現ません後): https://github.com/DominikGuzei/ember-routing-statechart-example

UPDATE 2013年1月9日

はい、それは長い間されていますが、この質問は最近、多くの意見を得ているので、人々が感覚を得るために編集したいのです。

この質問はフレーム化されて以来、Emberの風景が大きく変わっており、新しいguidesが大幅に改善されました。 EmberJSは規則(Railsのようなもの)を思い付いており、MVCは今よりはっきりと定義されています。まだ混乱

誰もがすべてのガイドを読んで、いくつかのビデオを見る必要があります。 Seattle Ember.js Meetup

瞬間、私はEmber.js 1.0.0-pre2に自分のアプリケーションをアップグレードしています。

+0

私はこれらの同じタイプの質問をたくさん取り組んでいます。関連:http://stackoverflow.com/questions/10045619/controller-strategy-garbage-collection-destroy –

+0

あなたはember-dataを使用していますか? –

+0

また、この種の情報はEmberJSが現在欠けている場所です。私は昨日、EmberJSで作業を始めました。文字通り、EmberJSのセットアップ方法と、各タイプのオブジェクトが責任を負っていることについては全く何もないからです。見つけるには。 –

答えて

4
  • あなたは状態の面でアプリケーションを考える必要があります。当初this

  • を見て、唯一のルートとテンプレートが 何かを説明し、最終的には、ブラウザでそれを表示するために必要とされる、それはEmberjsの新しい APIを強制しようとするものです。あなたの要件がより多くを得るように あなたは、ビュー、コントローラまたはオブジェクトを投げることができます。各 しかし、特定のニーズに答える。

  • あなたが任意のブラウザのイベントを処理するか
    アニメーション、スタイリングのために使っているJavaScriptのlibのいずれかのサードパーティをラップする必要がある場合は、ビューを考えてみましょう..あなたが特定のドメインをキャプチャする必要がある場合

  • オブジェクトを考えてみましょう
    情報、おそらくバックエンド情報を模倣します。

  • コントローラは単にドメインオブジェクトのプロキシであり、必ずしもオブジェクトに関係しないロジックをカプセル化する可​​能性があります。

これはすべてです。状態の観点からアプリケーションを設計する方法を学ぶならば、残りの部分は最新のAPIを使用していれば適切な場所に落ち、前に述べたルールを適用します。

+0

あなたはどのようにアプリケーションの任意の場所から利用可能な共有やその他の懸念のような "州"を扱い、州(ルート)を変更しないでしょうか?通常はモーダルのように見えます。オプション付きモーダルを共有する(ツイッターやFacebookを介して共有する)ベストプラクティスありがとう。 –

0

も参照してくださいhttp://addyosmani.com/largescalejavascript/特にEmberJsについてではありませんが、大規模なjavascriptアプリケーションを作成する方法をあなたに示す素晴らしい記事です。

3

新しいルータの実装でEmber 1.0.0-pre4がリリースされて以来、私は標準化されたEmberJSアプリの構造を説明している2つの参考文献を見てきました。

Railsに精通している人は、それをかなりよく知っているでしょう。

https://github.com/trek/ember-todos-with-build-tools-tests-and-other-modern-conveniences

http://reefpoints.dockyard.com/ember/2013/01/07/building-an-ember-app-with-rails-api-part-1.html

https://github.com/emberjs/ember-railsで燃えさしレールプロジェクトは、本質的に上記二つのリンクに記載された構造と同じであるEmberJSアプリケーションのディレクトリ構造を作成するためのレール発生器を含みます。

EmberJSガイドでは、新しいルーティング構造についても説明します。あなたは、その後のRailsを使用している場合http://emberjs.com/guides/

UPDATE 21/08/2013

燃えさしレールの宝石は素晴らしいです。私はそれを多くの成功で使用しました。 標準化されたemberアプリケーションレイアウトの提供を支援するために、emberコミュニティには2つの努力があります。どうやら彼らはマージされようとしてますが、今のところ、チェックアウトされています

https://github.com/rpflorence/ember-tools

https://github.com/stefanpenner/ember-app-kit

+0

それは本当に本当です。 Ember.jsが1.0になると、標準化されたやり方で作業するようになりました。 Railsのようなものです(慣例があります)。 –

関連する問題