0

私の Web ページは、使用時にいくつかの ajax 操作を送受信する必要があります。現在、1 つの ajax ハンドラーを使用してすべてのイベントを処理しています。すべての ajax リクエストは、この形式 "(type) | {json string}" を使用して送受信されます。

js コードの一部が ajax 要求/応答を処理します: 応答テキストの解析 -> タイプの取得 -> 選択... ケースごとに、それぞれのタイプのケースで何かを行います。

これは機能しますが、ajax イベントが大きくなると、0 から 99 のようなケースが多すぎます。メンテナンスやさらなる開発は容易ではありません。

おそらく、単一の ajax ハンドラーを複数のものに分割する必要がありますか? では、どの ajax レスポンスを特定のハンドラーに送信する必要があるか、ブラウザーはどのように判断するのでしょうか?

アドバイスをいただければ幸いです。

現在、コードは次のようになっています: (単純な JavaScript を使用したページの 1 つ、フレームワークは使用されていません)

  xmlhttp.onreadystatechange = function() {
                if (xmlhttp.readyState == 4 && xmlhttp.status == 200) {
                    //alert(xmlhttp.responseText);
                    var reply = decodeArray(xmlhttp.responseText);  //convert to json object and some other stuff 
                    switch (reply.type) {
                          case 0:
                          case 1:
                          ....

                    }
4

1 に答える 1

0

これは、ソフトウェアエンジニアリングの基本的な課題の1つです。繰り返し実行するタスクがありますが、バリエーションごとに詳細がわずかに変化するため、コードを再利用してクリーンに保つにはどうすればよいでしょうか。実質的なアプリにはすべてこの問題があります。

関心の分離を強制する設計アプローチを使用する必要があります。私は通常、アプリの他の部分から完全に分離されたアプリのAPIで開発します。私のAPIは1つのことと1つのことだけを行います-それはサーバーと通信します。

アプリケーション固有のコードはありません

これは、必要に応じて、APIをさまざまなアプリで再利用できることを意味します。また、アプリとは別にAPIをテストできることも意味します。

だから、あなたがのようなことをする必要があるとしましょうloadObject。アプリケーションが見る

App.API = {
    loadObject: function(params, onSuccess, onFail) {...}
}

これを切り離しておくための鍵は、onSuccessonFailコールバックです。APIを使用しているアプリケーションは、これらの関数を渡します。したがって、APIはアプリケーション固有のロジックについては何も知りません。知っているのは、これらのコールバックを適切に起動した場合だけです。コールバックは、応答データである引数を取るメソッドです。APIが行うのは、応答データをコールバックに渡すことだけです。

ほとんどの場合、ajax呼び出しの詳細には多くの一般的な項目が含まれているため、XhrWrapperリクエストを発生させるようなものも作成します。したがって、あなたloadObjectsはxhrヘルパーを使用してリクエストを行うことになります

xhr.sendRequest(url, method, onSuccess, onFail);

このようにして、xhrsの起動の面倒な作業を最小限に抑えることができます。

明らかに、さらに先に進むことができます。たとえば、ほとんどの場合、失敗はひどいので、私のxhrラッパーにはデフォルトのonFail実装があり、特定のAPIメソッドは、それが理にかなっている場合にのみ、オーバーライドを渡すことができます。

于 2012-07-01T18:56:54.337 に答える