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

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

乾杯、

アンドリュー

4

2 に答える 2

2

関心の分離は私の測定基準です(そしてそれは難しいものでもありません)。これは実際、プログラムをDRYに保つことに直接関係していることがよくあります。

これが私が見る2つの懸念です:ロジックと使用法。のコアロジックはextractRecords、forループを実行することです。そのロジックを再利用したい場合、最初のオプションでは、そのロジックが非常に特定のアプリケーション/使用法と非常に結合されています(緩く結合されているのではありません)。

この考え方が、私がデフォルトで常に関数型プログラミングに傾倒し、可能であれば状態やオブジェクト指向を必要とするものではない理由です。

また、関連していて、おそらく同じことの別の言い回しがこの記事です:「教えて、聞かないでください」

于 2009-08-21T01:07:05.197 に答える
1

ここでプレビューできるCodeComplete2の本の第5章を読んでください:http://www.cc2e.com/これは、この質問に適用できる視点にカップリングを置きます。

于 2009-08-21T01:13:37.663 に答える