MediatorやObserverパターンなどの内部メッセージシステムを開発する場合、渡されたメッセージオブジェクトをカプセル化する最良の方法は何ですか?カプセル化とメッセージオブジェクト
いくつかのサービスに新しいJob
を実行するように指示する次のメッセージオブジェクトを考えてみましょう。メッセージには、実行する必要があるJob
が含まれています。
bool JobService::handleMessage(Message* msg)
{
switch(msg.getType())
{
case MESSAGE_JOB:
runJob((dynamic_cast<NewJobMessage*>(msg))->m_Job);
return true;
case default:
return false;
}
}
これは、すべての罰金とダンディようだが、NewJobMessageもそれかかわらず、ジョブ・クラスについて決して知らないために持っている:今、メッセージは以下のサービスhandleMessage
機能で取り扱うことができ
#define MESSAGE_JOB = 1
class NewJobMessage: public Message
{
virtual int getType() { return MESSAGE_JOB; }
Job* m_Job;
}
それを意味のある方法で使用します。それは単にそれを運ぶだけです。
メッセージをデータに結合しないように他の方法を使用することをお勧めしますか?私はvoid*
を使ってキャストしようと思っていましたが、それはハッキーだと思われ、他の人が自分のコードを解読すると混乱するかもしれません。
'return'ステートメントの後にセミコロンがありません:' virtual int getType(){return MESSAGE_JOB; } ' – Azeem