2009-08-21 7 views
2

クラスを実装するときは、メソッドの値を返すか(疑問)、メソッド内でクラス属性を直接操作する(必須)ことをお勧めします。命令型と疑問型のメソッド

たとえば、CSVファイルに出力する文字列を作成するクラスがあります。私は、このようにそれを行う可能性があります:

私はこのようにそれを行う可能性があります
String output = "" 

String records[] = //list of record strings 

void extract() 
    extractHeader() 
    extractRecords() 


void extractHeader() 
    output += "FirstName,LastName,PhoneNumber" 


void extractRecords() 
    For Each record In Records 
    output += records.toString() 

または、:

void extract() 
    output += extractHeader() 
    output += extractRecords() 


string extractHeader() 
    // return header string 


string extractRecords() 
    // return records as string 

は、それは単に個人の好みの問題です、または一般的に受け入れられているベストプラクティスのガイドラインはありますか?

乾杯、

アンドリュー

+0

この質問に記載されている事項http://stackoverflow.com/questions/1137222/function-parameter-best-practiceもあなたに適用されます。 –

+0

ありがとう、とても助かりました。 – Andrew

答えて

2

Separation of Concernsは私のメトリック(と、それはどちらか速いハードと-1ではありません)です。これは実際には、プログラムの保存に直接関係していることが多いです。DRY

ここには2つの懸念事項があります:ロジックと使用法です。 extractRecordsのコアロジックは、forループを実行することです。その論理をもう一度再利用したいと思えば、最初の選択肢は、そのロジックの非常に特殊なアプリケーション/用法と非常に結合されたロジック(loosly-coupledとは対照的に)を持つようになりました。

これは、私ができる限り、デフォルトでは常に機能的なプログラミングに傾き、状態やオブジェクト指向性を必要とするものではないからです。

同じ記事の関連性があり、異なる言い方もあります。"tell, don't ask"です。

1

ここでのプレビューに使用できるコードコンプリート2の第5章を読んでください:http://www.cc2e.com/この質問に適用できるカップリングをパースペクティブに置きます。

関連する問題