0

私はバックボーンに不慣れで、いくつかのチュートリアルアプリを通過した後、最初のアプリを試しています.

次のことを達成するための最良の方法は何だろうと思っていました

バックエンド(レール)

私はビジネスというモデル名を持っています。これは多くの属性を持つ複雑なモデルです。関連付けられたアドレス ( has_one :address) があり、アバターと別のプロファイル画像などがあります。

私のフロントエンドから、ビジネス プロファイルの特定の部分を取得して更新できるようにしたいと考えています。たとえば、名前、カテゴリ、住所を含む basic_info だけを取得したいのであれば、プロファイル画像とアバターを更新できるようにしたいと考えています。

私がバックボーンで見たのは、モデルにメソッド save、update、fetch、destroy があることです。

fetch_basic_infofetch_profile_picture、のような他のメソッドが必要な場合はどうすればよいupdate_profile_pictureですか? これらに対して、関連するビューにそれに応じて通知する必要があります。

これが私が思いついたものです

基本情報を取得したいとしましょう

  • fetch_basci_infoバックボーン モデルに機能を追加する

    • $.ajaxこの関数内で、サーバーを使用してカスタム ajax リクエストを送信します
    • 手動でイベントをトリガーする"basicinfo:fetched"
  • ルーター機能の内部

    • モデル オブジェクトの作成
    • 新しいビューを作成し、BasicInfoViewそれをモデル オブジェクトに渡します。
    • ビューバインド内で、モデルのイベントを言うことができますmodel.bind('basicinfo:fetched', this.render)
    • ルーターが初期化model.fetch_basic_infoされたとき (ルーター init 内)

そのため、ルーターが呼び出され、ビューが作成され、カスタム イベントがバインドmodel.fetch_basic_info()され、要求がサーバーに送信されて応答が返されます (ここでバックボーン モデルの属性を設定するには、set を手動で呼び出しますか)。その後、カスタムイベントイベントがトリガーされ、ビューに通知され、それ自体がレンダリングされます

これは私の最初の本格的なバックボーン アプリケーションです。

これについてどう思いますか。

読んでいただきありがとうございます。

4

2 に答える 2

0

私の最初の考えは、バックボーンによってすでに提供されている多くの機能を複製することになるということです。クライアント側でビジネスモデルを正確に複製しなければならない理由はわかりません。基本的な情報やプロファイルなどを個別のバックボーンモデルに分割し、必要に応じてビューに適用してみませんか。

于 2012-06-15T12:59:09.353 に答える
0

あなたがやろうとしていることは、あまりRESTfulではありません。リソースやネットワーク帯域幅を節約するためにこれを実行しようとしている場合は、ほぼ確実に時期尚早の最適化です。ただし、数百または数千のフィールドについて話している場合を除きます。その場合は、より良い解決策があります。

真実は、プロフィール写真だけをフェッチすることは、50-100フィールドをフェッチすることとほぼ同じリソースを使用するということです。はい、少し多くのデータがありますが、ネットワーク接続での作業、遅延、リソース、および待機時間の90%を考慮すると、実際にはそれほど節約していない接続を確立することになります。

さらに、データベース側では、

select * from businesses where id=123

使用するのはほんの少しだけです

select profilepic from businesses where id=123

仕事の最も難しい部分はデータベースへの接続を確立し、正しい行を見つけることだからです。その後、データが少し増えます。列を50個追加すると、パフォーマンスに目立たない影響があります。

これが失敗するのは、モデル/テーブルに数百または数千の属性が含まれている場合のみです。この場合の解決策は、モデルをサブモデルに分割することです。そして、RESTを介してそれらを個別に処理します。ただし、これらはビジネスロジックタイプである必要があります。たとえば、BusinessにはAddress、Employee、ShareStructureが含まれます。

私自身は時期尚早のオプティマイザーでした...「1列しか必要ないのに10列を返さないでください」。ただし、必要になる可能性のあるさまざまな組み合わせでデータのサブセットごとにWebサービスAPIを作成しようとすると、APIは実質的に使用できなくなり、保守できなくなります。また、作業を行うことは決してありません。

FacebookのAPIからCocaColaのプロフィール写真を取得したい場合は、次のように呼び出します。

https://graph.facebook.com/cocacola

Pictureプロパティを取得します。残りのデータが必要ない場合、誰が気にしますか?それは物事をシンプルで安らかに保ち、メンテナンスを容易にします。

于 2012-06-15T13:16:31.953 に答える