1

私は 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() {.........}
  }
  1. データメンバーなしでクラスを作成します。
  2. その操作を呼び出す必要があるときはいつでも、オブジェクトを作成して呼び出す必要があります (ヘルパー メソッドが外部クラス データにアクセスするため、静的内部クラス メソッドは機能しません)。
4

1 に答える 1

2

プライベート メソッドに他のプライベート メソッドを呼び出させることは問題ありません。読みやすさを向上させたい場合は、「helper_」や「operation_」などの接頭辞を使用しないでください。これらは標準的ではなく、命名規則に違反しており、とにかくメソッドについて多くを語っていません。明確なメソッド名を選択し、javadoc コメントを使用してそれらを文書化するだけです。

保守開発者はコードを分析する方法を知っている必要があり、ドキュメントやメソッドの名前から明らかでない場合は、IDE を使用してメソッドが呼び出された場所を知ることができる必要があります。

于 2011-12-11T08:56:38.793 に答える