クラスAがクラスBを生成しそのメソッドbを呼び出す
メソッドb内でクラスBがクラスCを生成しそのメソッドcを呼び出す
・・・
という階層構造になっている場合、クラスAの外から与えられたデータはどのように下位のクラスに与えていくのがよいのでしょうか?
いくつか案は考えてみたものの、どれも一長一短というかしっくり来てないです。
仮にあるファイルにクラスA~Cが使うパラメータが保存されているとして
案1 クラスA~Cでそれぞれファイルを読み込む
→何度も同じファイルにアクセスしたくない、読み込むタイミング次第ではデータの整合性が怪しい、ファイルフォーマットが変わった場合にすべてのクラスが影響を受ける(ファイル読込を基底クラスにする手もありますが)など
案2 ファイル読込クラスを作成し、それがすべてのデータを持つ。読込クラスを引数やセット関数でクラスA→B→Cとリレーしていく
→仮にファイル読込からGUIでの設定に変わったら?などを考えるとクラス間の結合が強すぎる気がする
案3 ファイル読込クラスから、設定データ全てを保持するクラスにデータを渡し、それをクラスA→B→Cとリレーしていく
→(案2も同様ですが)クラスCからしたら関係ないAやBのパラメータが見えるのはどうなのか?
案4 クラスAにはA・B・Cが使うパラメータをすべて渡す、AからBにB・Cが使うパラメータをすべて渡す、BからCにCが使うパラメータを渡す
→処理が重複しているような・・・、階層が深くなると渡すデータが増える(仕方ない?)
どういう設計にするのが妥当なのでしょうか?
あるいは階層構造のように呼び出すこと自体を見直したほうが良いのでしょうか?
抽象的な質問で申し訳ありません。
クラス設計(以前の問題かもしれませんが)にお詳しい方がいましたらアドバイスいただけると助かります。
よろしくお願いいたします。
回答4件
あなたの回答
tips
プレビュー