●子(集約)オブジェクトのイベント通知
以下は、会社、部、課が集約関係にあるとして、お読みください。
00522一部/00522 VFF15672 T's-Neko 集約されたオブジェクト(子)のIDと処理
( 7) 97/09/27 16:04 00506へのコメント
katana さん、こんばんは。T's-Neko です。(^o^)o
【集約されたオブジェクト(子)の処理】
>このあたりが集約の悩みどころのよう
な気がするんです。子(部門)は、親(会社)
>に集約されているので、会社のメソッドを通じて削除されるべきだと考えると、
>末端にあるグループ(課の下)を削除する場合は、親〜子のつながりをたどって行
>く必要があり、使う側はたいへんだし...。あっと、T's-Nekoさんは全く別の考
>えかもしれません。(^^;
たとえ、会社(親)にその処理(メソッド)があったとしても、
部(子)がその通知受け入れて、会社(親)に委譲(再通知)すれば、
いいですね。Delphi では、このパターンを使っています。
ボタンが押されるとメソッド・ポインタ(*1)を通じて親(ウィンドウ)に
委譲(メソッドの呼び出し)しています。
(*1)メソッド・ポインタ: 関数ポインタのメソッド版
内部に、オブジェクトへのポインタとメソッド(関数)への
ポインタを持っている。
過去ログ: 旧OOについて議論する(2)#9-78
実際の処理を置く場所なんですが、親と子の1対1の処理であれば、
子に置いた方がいいと思います。子にメッセージを送れば
(処理を呼び出せば)、子は親へのポインタを持っているので(なら)
親を特定できますね。親にメッセージを送るなら、どの子に
対する処理なのかも、引数で指定しなければなりません。
逆に1対多の処理であれば、親に処理を置いた方がいいと思います。
おっしゃる通り、子から別の子のアクセスするのは大変ですからね。
でも、前述のように、メッセージの受け口を子に作って、
メソッド・ポインタを用いて親に通知するようにして、
ユーザーに楽をさせるのがいいと思います。
--- Neko.
This text was copyed from Niftyserve Programer's Forum Pro.