私は Code Complete を読んでいる最中で、本の終わりに向かって、リファクタリングに関する章で、著者は、リファクタリング中にコードの品質を向上させるためにすべきことをリストしています。
彼のポイントの 1 つは、特にコレクションやイテレータなどを返す場合は、常に可能な限り特定の型のデータを返すことでした。したがって、私が理解しているように、たとえば を返す代わりに、そのデータ型を使用する場合Collection<String>
は を返す必要があります。HashSet<String>
メソッドの内部。
彼は人々に情報隠蔽のルールを破るように勧めているように聞こえるので、これは私を混乱させます。さて、アクセサーについて話すとき、私はこれを理解しています。それは明確なケースです。しかし、データを計算してマングリングし、メソッドの抽象化のレベルが直接的なデータ構造を意味しない場合、データがバラバラにならない限り、可能な限り抽象的なデータ型Object
を返すのが最善だと思います (私はそうしません)。の代わりに戻りIterable<String>
ます。たとえば)。
だから、私の質問は: Code Complete のアドバイスの背後にあるより深い哲学はありますか?