-  -  -  - - - ----->

JX

モデル - ビュー - コントローラーModel-View-Controller

--------------------

コードは別々に書かれたとしても、メンテナンスや理解し易く再利用可能なモジュールとなる。 モデル/ビュー/コントローラー[ Model-View-Controller ] は、OOP として結合されるとき、非常に効果的に作用します。モデル/ビュー/コントローラーが、これらを達成するためのパラダイムを提供します。 基本的な考え方として、コードを3つのパーツへ分解します:

  1. モデル [ Model ]                 -- データを蓄える
  2. ビュー [ View ]                   -- 特定の方法でデータを表示する
  3. コントローラー [ Controller ] -- ユーザーと相互作用し合って、データの修正を行う
 JX の中で、最も良い例が、テーブル関連のものであり、 JTableData から派生したクラスがデータを蓄え、JTable がデータを表示し、その派生クラスは、マウスクリックに応じどの様に反応するか決められる。

他のオブジェクトから Model を引き離すことによって、システムに依存せず、他のプログラムからでも再利用可能である。実際の問題として、View と Controller は、しばしば強く結び付くことがある。それは、ある特定の View は、時としてある特別な操作を行うように設計されるからである。

関数呼び出しよりも、むしろメッセージを使うことによって、 Model と その他のオブジェクトとの本当の意味での分離を達成する。JCore では、JBroadcaster によって扱われる。メッセージは、ある特定のオブジェクトに限らず、Model から、リスニングしている全てのオブジェクトへ伝達される。 Model が"この一部分が変わりました"と言うメッセージを送った時、View がそれを受け取り、 それに従い自身を更新・再描画する。.

メッセージは、又、単一 Model のマルチ View を表示する場合の問題も解決してくれる。直接的なフンクション・コールを行う場合、Model は全ての View について知っていなければならない。 メッセージについて、全ての View は JBroadcaster を経由することだけで Model をリスニングする。
 

JBroadcasterのメカニズム

JCore がメッセージを送信するのは、非常にシンプルで、レシーバーは JBroadcaster から、事実上、引き継がれなければならない。 メッセージを受信するために、レシーバーは、メンバー・ファンクションの一つとして次のコードを使う:
 
    JBroadcaster* sender;
    ListenTo(sender);
送り主がメッセージを送信して、レシーバーの Receive() ファンクションが呼び出されれる。このファンクションは、次の様に宣言され使用される:
class MyReceiver : virtual public JBroadcaster
{
protected:

    virtual void Receive(JBroadcaster* sender, const Message& message);

private:

    MySender* itsSender;   // このポインタを得るのは、あなたの使用目的によります
};

void
MyReceiver::Receive
    (
    JBroadcaster*  sender,
    const Message& message
    )
{
    if (sender == itsSender &&
        message.Is(MySender::kMyMessage))
        {
        // 何かの処理を行なうdo something
        }

    // もし自らのメッセージが不要な場合、
    // 基幹(ベース)クラスに渡さなければならない。
}
メッセージはそれ自身がオブジェクトであり、それゆえにレシーバーが使うための、データとファンクションを含むことができる。簡単な例として、ここでは、MyMessage がどのように宣言されているかを示す:
class MySender : virtual public JBroadcaster
{
public:

    static const JCharacter* kMyMessage;

    class MyMessage : public JBroadcaster::Message
        {
        public:

            MyMessage()
                :
                JBroadcaster::Message(kMyMessage)
                { };
        };
}

const JCharacter* MySender::kMyMessage = "MySender::MyMessage";

追加機能

BroadcastWithFeedback()が、 Receive() の代わりに ReceiveWithFeedback() を呼び出し、ReceiveWithFeedback() が、 non-const Message* を受け取る。そうすることで、モディファイが可能となる。これによって、受取側がメッセージを変更し、送り側へフィードバックすることが可能になります。

ReceiveGoingAway() は、リスニングしているあるオブジェクトが抹消(delete)されたとき呼ばれる。(コネクションが自動的に終了したのであれば、StopListening() を呼び出す必要はありません。)


 匿名 ftp. により JX を使うために必要とされる全ての情報を入手することができます。


JX Features Page