FlexでのUI間のデータ受け渡しについて
FlexでUI間のデータの受け渡しをするのに、
例えば子画面で入力したデータを親画面に反映するUIの実装方法について、各種実装方法と、プログラムの保守性の関係を少し考えてみた。
子画面から親画面を直接操作
まず最初に子画面に親画面の具象クラスの参照を保持し、親画面のプロパティに直接データを反映させる場合。
この場合、子画面と親画面は直接結合している。
子画面は独自のエンティティを編集することが多いため、例えば、他の画面からもそのエンティティを使用する必要が生じた場合、子画面を使いまわすことができず、最悪は子画面をコピーすることになる。
子画面から親画面をインターフェース経由で操作
次に、1.と似ているが、子画面に親画面のインターフェースの参照を保持し、インターフェースを経由して親画面のプロパティにデータを反映させる場合。
この場合、子画面と親画面の結合度はインターフェースを経由するにより、低下する。
よって、子画面はそのインターフェースを実装しているクラスからならば、使いまわすことが可能になる。
ただし、親画面は同一インターフェースを実装しなければならない。
あるいは、インターフェースを用意せず、親画面の参照はObjectとして保持しておき、duck typing 的にアクセスする方法も考えられるが、親画面がどのメソッドを実装するかが曖昧になりやすいため、規約やASDoc等で明確にしておかないと、混乱が生じる可能性がある。
Eventを使用する
次に、全く違うアプローチとして、Eventを使用する場合。
子画面は、入力完了時に、自分が保持しているエンティティをプロパティに保持したEventをdispatchし、親画面はそのEventをlistenし、データを自分自身に反映する。
この場合、子画面は親画面に全く依存しないため、子画面はこのエンティティを使用する必要が生じた全ての画面で使いまわすことができる。
ただし、親画面にイベントをlistenするコードを書かなければいけないので、子画面のデータを同じように使う画面
(例えば子画面のデータを親画面のデータグリッドに反映するケースがほとんどの場合など)
で、コードの重複が発生する。
その部分をユーティリティクラスのメソッドに切り出すとしても、コードの重複は免れない。
結論としては、2、3を状況に応じて使い分ける感じになるのだろうか。