4

さて、これらすべてのパターンを理解しようとしています。

よし、私は CodeIgniter でアプリケーションをコーディングしています。このアプリケーションは、車と顧客に関するデータをさまざまなタイプの企業に、SOAP、おそらく XML、コンマ区切りなどを使用して送信できるようにする必要があります。

しかし、それらはすべて同じものを必要とします。

できるだけ動的にして、テストを簡単に記述できるようにしたいと考えています。

したがって、このサービスは次の 2 つのことを行う必要があります。

  • ハンドラー
  • 応募者[1-2]
  • パラメータ
  • 物体

さまざまなクラスの作成を開始しました

Gr8Exp NordCar SwePerf

それぞれがインターフェースiServiceRequestを実装しています

interface iServiceRequest{
    /**
     * Send the request to the company server.
     */
    function sendRequest();
    /**
     * Saves the response into the database.
     */
    function saveResponse();
    /**
     * Prepares the request to the company, setting info from form and shit.
     */
    function prepareRequest();
    /**
     * Soap, XML, CSV, JSON
     * @param type $method
     */
    function setRequestHandler(iServiceRequestHandler $handler);
}

次に、私が入れたハンドラーに応じて、Soap、XML、CSV、JSON リクエストを構成する必要があります。

検証が必要な人たちの後に(すべてではありませんでした)、私は以下を使用しました:

interface iAdaptServiceRequest{
    /**
     * Structure the array information and put it into an object structure in the right place.
    */
    function structure(array $info);
    /**
     * Make all the checks for the function
     */
    function validateInfo();
}

しかし、私は立ち往生しています.SOAPリクエストを使用したときは本当にうまくいきました。でも今。それらを異なる形式にする必要があるため、リクエストの種類または会社ごとに異なるハンドラーを使用してください。どうすればよいかわかりません。それらを別のフォルダーに入れて、別のフォルダーにクラスを再作成できます。しかし、私はコードを複製しているので、それは良い習慣ではありません。

最後に、次のような連鎖を実行したいと思います。

$result = $m->prepareRequest()->sendRequest()->saveResponse();

助言がありますか??

4

3 に答える 3

3

私見では:

-- フロント コントローラを作成/使用します。

-- フロント コントローラーは、使用する要求ハンドラー (JSON、SOAP、XML など) を決定します。

-- リクエスト ハンドラは、すべてのインターフェイスで同じように動作する共通の「リクエスト」オブジェクトを生成します。基本的には、変数を「リクエスト オブジェクト」内の共通の名前付き形式にします。

-- リクエストを送信するサービスを決定し、そこにリクエスト オブジェクトを送信します。

-- サービスはリクエスト オブジェクトを処理し、レスポンス オブジェクトを生成します。

-- コントローラーは適切な (JSON/SOAP/XML) ビュー オブジェクトを作成して、応答オブジェクトを正しいビュー タイプに処理し、ビューは応答をそのタイプとして出力します。

于 2013-04-15T19:13:26.440 に答える
0

あなたのようなものを使用します: $result = $m->prepareRequest('JSON')->sendRequest()->saveResponse();、ただし、送信するデータの形式を指定します。

メソッドprepareRequest(string $type)は形式をチェックし、別のメソッドを呼び出してデータをそれぞれの形式に変換します。

このようなもの:

function prepareRequest(string $type){
     if ($type == 'json'){
          $this->convert2json();
     }
     if ($type == 'xml'){
          $this->convert2xml();
     }
     // And so on
}
于 2013-04-15T22:00:48.967 に答える
0

MVC または Observer パターンについては、しばしば混乱があります。これは、このパターンが適用される状況ではありません。MVC パターンでは、View と Model が互いに関連しています。ビューは、サブジェクトの情報に基づいて自身を更新する必要があります。データベース内のビューとその下にあるテーブルが良い例です。それはあなたがここで望むものではありません。

この問題に適した設計パターンが Builder パターンです。Builder パターンは、1. Builder、2. ReaderManager、3. ConverterManager、および 4. DataObject の 4 つの協調するクラスタイプで構成されます。ReaderManager は Interpreter パターンを使用しています。変換は State パターンを使用して行うことができます。ReaderManager の出力 (一部の DataObject) は、ConversionManager の入力です。これは、インターフェイスの代わりに抽象クラスを使用して行うことができます (データに焦点を当てたクラスに対する私の好み)。Builder は ReaderManager を ConverterManager に接続し、データの転送を処理します。

数年前、私はデザインパターンについて書きました。ビルダー パターンは、私が説明したパターンの 1 つであり、これはそのページへのリンクです: http://www.loekbergman.nl/InsideArchitecture/TheProcess/DesignPatterns/Builder パターンの UML 図を示します。次のリンクでは、デザイン パターンの例を含む jar をダウンロードできます。そのうちの 1 つがビルダー パターンです: http://www.loekbergman.nl/InsideArchitecture/DownloadsAndLicense 私はこのコードを数年前に書いたので、このコードを保証なしで提供します。(これはこの文脈で正しい用語ですか?) コードでは、名前仕様のフォルダーを確認できます。これは、Interpreter パターンの別の例です。(ビルダー パターンには、もちろんこのパターンの例もあります)。

完了するには、MVC へのリンク - パターン: http://www.loekbergman.nl/InsideArchitecture/TheProcess/DesignPatterns/Observer およびインタープリター パターン: http://www.loekbergman.nl/InsideArchitecture/TheProcess/DesignPatternsを参照してください。 /通訳者

于 2013-04-17T20:52:46.827 に答える