データバインディング

同じデータを複数のビューから参照し、データが変更されたら、紐づいたビューが一気に更新されるような機構をデータバインディングという。

第5回 WPFの「データ・バインディング」を理解する (1/3):連載:WPF入門 - @IT

MVVMをやる上でこれは欠かせないが、C言語C++はデータバインディングを持たないので、C++で疑似的なデータバインディングを、

Win32APIアプリケーションでデータバインディングしてみる - Qiita

を参考につくってみた。
今回、実装は大変複雑なので割愛して、どんなものかという実験だけ・・・。

class_input_formが入力フォームのコントロールだとする。
class_binding_variableが入力フォームと紐づける変数。
基本的には文字列を持っていて、文字列をセットするセッターや取得するゲッターなども指定されている。
初期化で"ABC"を持つ。
一方、入力フォームはform1が"hoge"、form2が"foo"、form3が"bar"を持つ。
それぞれのフォームの値を出力。

form2に"AAA"をセットして、またそれぞれ出力。

binding_strと各formをbindし、また値をそれぞれ出力。

form3に"BBB"をセットして、また値を出力。

form1に"CCC"をセットして、また出力。

実行すると、

$ ls
binder.h  binding_variable.h  comparator.h  getter.h  input_form.h
key_binder.h  main  main.cpp  mediator.h  member.h  setter.h
$ g++ main.cpp -o main
$ ./main
value_ = hoge
value_ = foo
value_ = bar
-----
value_ = hoge
value_ = AAA
value_ = bar
-----
value_ = ABC
value_ = ABC
value_ = ABC
-----
value_ = BBB
value_ = BBB
value_ = BBB
-----
value_ = CCC
value_ = CCC
value_ = CCC
$

"AAA"をセットした時は、まだbindされてないので、form2しか変わらない。
しかし、bindされた後は、binding_strの"ABC"に全部変わっている。
form3を"BBB"に変えると、他も"BBB"になり、form1を"CCC"に変えると、他も"CCC"になる。

Sample/designpattern/data_binding/data_binding/src/data_binding at master · bg1bgst333/Sample · GitHub