いくつかの理由がありますが、私が気に入っているのは、初期のUNIXプログラムの多くで使用されているアプローチです。一つのことでそれを行うのは十分に困難であり、あなたがやろうとすることは難しくなります。
別の理由は、副作用を制限および制御することです。私はコンビネーションコーヒーメーカーのドアオープナーが大好きでした。残念ながら、訪問者がいたとき、コーヒーは通常あふれていました。先日コーヒーを飲んで、誰かがそれを盗んだ後、私はドアを閉めるのを忘れました。
心理的な観点からは、一度にいくつかのことしか追跡できません。一般的な推定値は7プラスまたはマイナス2です。クラスが複数のことを行う場合、それらすべてを一度に追跡する必要があります。これにより、実行していることを追跡する機能が低下します。クラスが3つのことを行い、そのうちの1つだけが必要な場合、クラスで実際に何かをする前に、物事を追跡する能力を使い果たす可能性があります。
複数のことを行うと、コードが複雑になります。最も単純なコードを超えて、複雑さが増すとバグが発生する可能性が高くなります。この観点から、クラスをできるだけシンプルにする必要があります。
1つのことを行うクラスのテストは、はるかに簡単です。クラスが行う2番目のことは、すべてのテストで行われたか、行われなかったかを確認する必要はありません。また、これらのテストの1つが失敗した場合、壊れた状態を修正して再テストする必要もありません。