[[開発/設計/議論]] *議論の目的 [#tf5dce46] -制御モジュール -コントローラ部 --制御モジュールコントロール --スクリプト(Router)~ に、どのような機能を持たせるべきかを決定するための場所です。 *制御モジュール・コントローラ部の位置付け [#cd3f0fa6] **制御モジュールの本質 [#sd5e26b4] B2BUAにおいて、重要なコアとなる部分です。~ B2BUAとして考えるのであれば、これ以外の部分は不要であります!!! ***理由 [#j1567183] -制御モジュール≒UA であるため、これがあれば、B2BUAとして動作させることが出来るからです。~ ただし、この場合は、柔軟性がほとんどなくなる点が、「SIProp」との相違点と なり、他の部分が必要となる理由となります。 **コントローラ部の存在理由 [#o48c6449] 下記のような役割を持たせたいために存在しています。 -制御モジュールを動的に呼び出す --DIのような使い方を想定しています -制御モジュールの処理結果の評価を行う --制御モジュールの制御(コントロール)を行うことを想定しています~ 制御モジュールを複数制御するような場合に使用します ***「制御モジュールを動的に呼び出す」の概要 [#oc1a2f87] 例えば、A-UA制御モジュールというものがあり、これに、 A-UA.Call() という通話用のメソッドがあった場合と仮定します。~ そして、A-UAが、Ver.2.0になって、通話機能が変化してしまった場合 A-UA.CallForV2() A-UA.CallForV1() というものを用意するようなことを想定します。(別モジュールとして、用意し てもよい。) このような場合に、スクリプト部で、条件分けをして、メソッドをインジェクシ ョンをさせるために使用します。 例: if(userAgent == "v1") { injection A-UA.CallForV1() in A-UA.Call(); } else if(userAgent == "v2"){ injection A-UA.CallForV2() in A-UA.Call(); } else { injectionList A-UA.CallForV1() in A-UA.Call(); injectionList A-UA.CallForV2() in A-UA.Call(); } ※最後の「else句」は、1つにインジェクションが絞れない場合を表現しています。 ***「制御モジュールの処理結果の評価を行う」の概要 [#m654fd66] 上記の「else句」部分のように、制御モジュールが並列起動となった場合、制御 モジュールのコントロールをしなければなりませんので、その機能を提供するた めのものとなります。~ そして、この部分は、非常に複雑となるため、スクリプトでは表現しにくい部分 となります。(スレッド動作も必要となるため、JavaScriptでは制御しきれませ ん。) 例: var result = A-UAv1.Call();// A-UAv2.Call()も同様にして扱う。 // B2BUAモード if(result == "B2BUA") { A-UA.Send(); // パケットをスルーするだけモード } else if(result == "THROW"){ A-UA.Sleep(); // それ以外。終了させる } else { A-UA.Stop(); } 具体的には、 A-UAコントロール部 というコントロール部があり、その内部で、 A-UAv1制御モジュール A-UAv2制御モジュール をコントロールするような構成となります。 **制御モジュール・コントローラ部のまとめ [#a86a5396] 簡単に言うと、一番べた〜と実装した場合が、最初に書いた 制御モジュールのみ という構成となります。ただし、これでは、柔軟性がほとんど無くなります。~ そして、制御モジュールから、設定可能部分をすべてスクリプト化し、柔軟性をMaxにしたものが スクリプト+制御モジュール という構成となります。~ しかし、すべての制御をスクリプトで書くのは、現実的ではないため、SIPropで は、 制御モジュールコントロール+スクリプト+制御モジュール という構成を取っています。~ すなわち、スクリプトと制御モジュールが対極に位置しているイメージで、制御モジュールコントロールを踏まえて、柔軟性の落し所をどこに持ってくるのか?が、SIPropのポイントになると思っています。 *議論の論点 [#yc9bf9b7] -制御モジュール -コントローラ部 --制御モジュールコントロール --スクリプト(Router) 上記の3機能に対して、どのように機能を割り振るかを決定します。 **上記3機能が持つ具体的な機能 [#v0f69474] -ダイアログの管理 --トランザクション管理 -シーケンスの管理 --ルーティング情報 --ステート状態 -メッセージの変換 --ヘッダーの追加、削除 --ヘッダーの変更 -各ダイアログの連携 -制御モジュール並列化制御 -etc... ※他にも、機能がありそうなので、募集中。 *結論 [#t1f97055] ※ただいま、議論中。 **制御モジュールで持つべき機能 [#j758fb94] -UAとして、必要な動作の管理 **制御モジュールコントロール [#ode2f5de] -制御モジュール並列化制御 **スクリプトで持つべき機能 [#gc2e23f4] -ヘッダーによる機能の振り分け(メソッドの振り分け?)