私は MineSweeper プログラムを持っています。そこでは、次のようなシナリオに直面しています。
私の問題はどこですか?
class operation{
<Data's needed for all operations>
/*(Each operation needs all the datas.)*/
public mainOperation(){ // user can call this mainOperation whenever they want to do some work.
operation_ABC();
operation_LMN();
}
private void operation_ABC(){
helper_DEF(); //This helper does partial work of ABC()
helper_IJK(); //This helper does remaining work of ABC()
}
private void DEF(){..//access and work on data..}
private void IJK(){..//access and work on data..}
private void operation_LMN(){
helper_OPQ();
< some work on data >
helper_RST();
}
private void helper_OPQ(){..//access and work on data...}
private void helper_RST(){..//access and work on data...}
}
何が必要ですか?
私が必要としているのは、メソッドをグループ化し、operation_ABC 内の helper_DEF と helper_IJK の可視性を減らす何らかの方法です。ここでは、明確に operation_ または helper_ と名付けましたが、私のプログラムの実際のシナリオは....
private void backEndActionTaker(){
<type: private void > initializeMinePlacer();
<type: private void > mineValueAssigner();
}
可読性の問題:このコードを読んだり拡張したりする必要がある開発者は、一見すべてが操作のように見えるため、操作とヘルパーを分離するのが難しいことに気付くでしょう。
私は何をしましたか? データなしで内部クラスを作成する予定でしたが、2つの不安を感じました。
class operation_ABC{
exec_ABC(){
helper_1();
helper_2();
}
private helper_1(){......//Access outer class data...}
private helper_2() {.........}
}
- データメンバーなしでクラスを作成します。
- その操作を呼び出す必要があるときはいつでも、オブジェクトを作成して呼び出す必要があります (ヘルパー メソッドが外部クラス データにアクセスするため、静的内部クラス メソッドは機能しません)。