LoginSignup
0
1

More than 5 years have passed since last update.

考察 > FormMainとFormSub間のメッセージ受け渡し > FormSubの再利用性

Last updated at Posted at 2016-07-07

[検討中]

対象環境
C++ Builder XE4などフォームアプリケーション

前提

以下の2つのフォームがあるとする。

  1. FormMain
  2. FormSub

FormSubで行った処理をもとに、FormMainにメッセージを表示したい。

実装方法

2つの方法が考えられる。

Case A: FormMainにAddMessage()を実装

FormSubからFormMain->AddMessage()をコールする。

  • 利点: FormSubでメッセージ発生直後にFormMainに表示できる
  • 欠点: FormSubに#include "FormMain.h"が入る
    • FormSubからのメッセージを別のフォーム(例: FormTest)に表示できない(再利用時の問題)

Case B: FormSubにGetMessage()を実装

FormMainから定期的にFormSub->GetMessage()をコールする。
GetMessage()した文字列がLength > 0の時にメッセージを表示する。

  • 利点: FormSubがFormMainに依存せず、他のフォームからも使える (再利用可能)
  • 欠点: FormSubにてメッセージ発生直後にFormMainは更新されない。
    • FormMainのGetMessage()実行頻度に基づく (例: 1秒ごと、200msecごと、など)
  • 欠点: FormSub側でメッセージをリスト保持する必要がある
    • メッセージ上書き防止のため
  • FormMainからFormSubの既読メッセージの消去処理は要検討

感想

Case Aの実装をたくさんしてきたが、FormSub自体の再利用性を考えるとCase Bの方がいいのかもしれない。

上記のような問題はフォーム間だけでなく、アプリケーション間の通信にも関係しそうだ。

こういう設計の良い本はまだ見つかっていない。(または過去に読んだかもしれないが、頭に入っていない)。

Presentation Domain Separation

@ozwkさんのコメントで紹介いただいたPresentation Domain Separationを読み始めている。

以下のリンクが勉強になった。
http://memowomome.hatenablog.com/entry/2014/04/13/102736

MVVMを使う時にObserverパターンを使う場合や、メディエーターパターンを使う場合があるようだ。

Observerパターン

Observerパターンは以下を見つけた。
https://sourcemaking.com/design_patterns/observer/cpp/3
delphi実装を理解して、C++ Builder向けに展開した方がいいのかもしれない。

0
1
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1