2011-12-22 4 views
0

私は時々、同じデータ(クエリオブジェクトなど)を必要とするクラス内のいくつかのメソッドを見つけることがあります。一般的に、順番にデリゲートは、いくつかのプライベートメソッドにうまく、最終的に完成品を返すparseReport()ような一般的な名前の1つのパブリックメソッドが存在します。クラスプロパティではなく複数のメソッドで使用される変数はどのように扱うべきですか?

public function parseReport(queryObject) { 
    queryObject = correctDatesAndTimes(queryObject); 
    queryObject = sortByCusomter(queryObject); 
    queryObject = buildHierarchy(queryObject); 

    return queryObject; 
} 

private function correctDatesAndTimes(queryObject) { 
    // do some stuff 

    return queryObject; 
} 

private function sortByCusomter(queryObject) { 
    // do some stuff 

    return queryObject; 
} 

private function buildHierarchy(queryObject) { 
    // do some stuff 

    return queryObject; 
} 

だから私の質問をされ、私のqueryObjectはクラス - する必要があります私のメソッドのすべては、呼び出されるたびにメソッドの引数として渡すのではなく、すべてのメソッドが参照するレベルプロパティです。

+0

これらの機能は「this」に変異していますか?そうでなければ、この関数群全体はスレッドセーフである可能性が非常に高いですが、それらをすべて変更してプロパティを設定しても機能しません。 –

+0

現在は "this"はまったく変更されていませんが、その作業全体が他の場所から渡されて返される 'queryObject'で行われます。 –

答えて

2

このような場合、queryObjectはクラスプロパティであってはなりません。それを見ると、いくつかの小さな関数に分割された大きな関数が実際にあります。 1つの大きな関数であれば、そのクラスのプロパティを作成しません。

データが実際にクラスの一部である場合、データはクラスプロパティに属します。 クラス定義は、データと振る舞いの両方をカプセル化することを覚えておいてください。

+0

ありがとう - それは私の考えでもありましたが、それはそのようなクラスの周りにそれを渡して変だと感じました。 –

1

この例では、プライベート関数内で変更されるため、クエリオブジェクトをパラメータとして渡す必要があります。

また、プライベートプロパティに入れておくと、マルチスレッド化すると頭痛がかかります。

関連する問題