前の開発日記 | 次の開発日記 | 一覧 |
RPGを開発しつつ、いままでのアプリケーションのバージョンアップを図っています。 片方がもう片方の気分転換みたいな感じです。 趣味プログラムは、納期が無いのでこういうふうに切り替えられ、お気楽でいいですね。
こういった、バージョンアップのため修正や機能の追加を行うとき、そのソフトウェア設計の良さ悪さが分かります。
すんなりと修正が出来た場合は、何も問題はありません。「やっぱりこういう設計にして良かったか」という
結論にたどり着くだけです。
問題は、すんなりと修正が出来そうに無かった場合です。
「少量の修正で」「希望の機能を実装し」「その後の修正も行いやすくする」
ということを、実現しなければなりません。
結局のところは、
「そこその量を修正し」「希望の機能を実装し」「その後の修正もそれなりに行いやすくする」
というあたりになるよう修正を行うことになります。バランスが難しいですね。
RegistorWindowMessageというWin32 APIを発見しました。なかなか面白そうなAPIです。 もし私がRegistorWindowMessageを実際に利用して、便利だと判断したのでしたら 正式な話題として提供するのですが、今回は、APIのHELPを見ただけで想像で語ります。
あるアプリケーションAと、Aと通信するアプリケーションBと、これまたAと通信するアプリケーションCが
あったとします。通信方法は、どれもWindowメッセージのやりとりで行っているとします。
しかし、アプリケーションBの作者と、Cの作者は特にコミュニケーションが無く、好き勝手に
メッセージ番号を決めて、アプリケーションAにデータを送信してくるとします。
こんなとき、アプリケーションAの作者は困ります。特に、BとCから送られてくるメッセージの
番号が一致していたら、BとCのどちらから送られてきたか判別が難しくて大変です。
こんなときにResistorWindowMessageを使用してメッセージ番号を決定すると楽です。
AとBの通信用のメッセージ番号は例えば次の様に決めます。
UINT WM_SETHOGE = RegisterWindowMessage("B.SETHOGE");
UINT WM_GETHOGE = RegisterWindowMessage("B.GETHOGE");
UINT WM_HERO = RegisterWindowMessage("B.HERO");
AとCの通信用のメッセージ番号は例えば次の様に決めます。
UINT WM_SETNEKO = RegisterWindowMessage("C.SETNEKO");
UINT WM_GETNEKO = RegisterWindowMessage("C.GETNEKO");
UINT WM_HERO = RegisterWindowMessage("C.HERO");
これだけで、メッセージ番号が重なる可能性は無くなります。
同様にしてメッセージ番号を増やしていっても、問題はありません。
AとB、AとCで情報交換が必要ですが、BとC間では情報交換の必要がありません。
これも利点ですね。
このように、限られた状況の中ではRegisterWindowMessageは役に立ちそうです。
ですが、実際にこのような状況が到来するかは微妙です。
正直、私は、アプリケーション間通信方法として、Windowメッセージを使う方法が
有力であるとは考えておりません。
既にOSで定義されているメッセージを使ってやりとりするならば便利ですが、
新たにメッセージを定義してデータをやりとりするとなると、TCP/IPやメールスロット等を
使ったほうが楽なような気がします。
そんなわけで、実用にはなりそうにないですが、もしかしたら実用になるかもしれない RegistorWindowMessageのお話でした。
前の開発日記 | 次の開発日記 | 一覧 |