3

私はシングルページアプリを作成していて、クライアント側のデータアクセスレイヤーを作成することにしました。私の質問はそれの適切な設計を含みます。JSがコールバック中心であることは理解していますが、データ検索を行うためのより良い方法はないかと思います。現在のデータアクセス呼び出しがコールバックでどのようにフォーマットされているかの例を次に示します。

$interface.getDashboard = function (callback) {
    callback({MyApplications:[]});
};

これが、あちこちでコールバックの必要性を排除するために私が向かっていることを考えていることです:

$interface.getApplications = function () {
    var v = amplify.store("api.applications");
    if (!v) {
        v = [];
        _get("/api/applications", null, function (results) {
            amplify.store("api.applications", results, { expires: _cacheTimeOut });
            dataRefresh();
        });
    }

    return v;
};

上記のコードでは、dataRefresh()該当するすべてのサブスクライバーにデータを更新するように指示します。ですから、まだコールバックを使用していると言えますが、方法は異なります。

これを行うためのより良い方法はありますか?私はこれまでjavascriptの強力なデータアクセス層を作成したことがなく、慣例として従うべきパターンがあるのか​​、それともヒューリスティックな解決策があるのか​​知りたいですか?

4

1 に答える 1

2

私は現在、私が取り組んでいる新しいエンタープライズ レベル アプリケーションの Javascript 側をどのように設計および構造化するかについて、同じ質問に取り組んでいます。

HotTowel などの SPA の例/テンプレートの多くは、SPA を開始する方法を示すのに最適ですが、大規模な実装に関してはあまり役に立ちません。

Nicholas Zakas によるこの講演は、優れた解決策を提案しています。講演のスライドはこちらからご覧いただけます

要約すると、クライアント側のレイヤーは次のもので構成する必要があります。

  1. モジュールのセット - これらは、アプリの機能の個別の単位を提供します。それらは互いに完全に独立していて、サンドボックスのみを認識する必要があります。

  2. サンドボックス - これは、モジュールが動作するための一貫したファサード インターフェイスを提供し、モジュールとアプリケーション コアの間のコントローラーとして機能します。

  3. アプリケーションコア - これは、モジュール管理、相互通信、およびアプリに必要なその他のコア機能 (ajax リクエストなど) を担当するメディエーターです。アプリケーション コアだけが、使用している基本ライブラリを認識する必要があります。

  4. ベース ライブラリ - これらは、ブラウザーの正規化と、DOM 操作などのその他の汎用機能を提供します。

このリンクは、この設計を拡張し、詳細を提供します。

この回答がデータ アクセス レイヤーに具体的に対応していないことはわかっていますが、より一般的なアーキテクチャの概要として、特定のシナリオに概念を適用できる可能性があります。

編集:

AuraJSは、Addy Osmani によって開発された、Zakas によって概説された理論の具体的な実装です。現在開発者向けプレビュー段階ですが、アイデアの出発点として最適です。

于 2013-03-27T15:10:03.830 に答える