Es gibt eine Reihe von Gründen, aber der eine, den ich mag, ist der Ansatz, den viele der frühen UNIX-Programme verwenden: Mach eine Sache gut. Es ist schon schwer genug, das mit einer Sache zu tun, und es wird immer schwieriger, je mehr Sie versuchen, es zu tun.
Ein weiterer Grund ist die Begrenzung und Kontrolle von Nebenwirkungen. Ich liebte meine Kombination Kaffeemaschine Türöffner. Leider lief der Kaffee normalerweise über, wenn ich Besucher hatte. Ich habe vergessen, die Tür zu schließen, nachdem ich neulich Kaffee gemacht hatte und jemand hat ihn gestohlen.
Aus psychologischer Sicht können Sie immer nur wenige Dinge auf einmal im Auge behalten. Allgemeine Schätzungen sind sieben plus oder minus zwei. Wenn eine Klasse mehrere Aufgaben ausführt, müssen Sie alle gleichzeitig im Auge behalten. Dadurch können Sie nicht mehr nachverfolgen, was Sie gerade tun. Wenn eine Klasse drei Aufgaben ausführt und Sie nur eine davon ausführen möchten, können Sie möglicherweise die Übersicht verlieren, bevor Sie tatsächlich etwas mit der Klasse anfangen.
Das Durchführen mehrerer Aufgaben erhöht die Codekomplexität. Über den einfachsten Code hinaus erhöht eine zunehmende Komplexität die Wahrscheinlichkeit von Fehlern. Von diesem Standpunkt aus möchten Sie, dass Klassen so einfach wie möglich sind.
Das Testen einer Klasse, die eines tut, ist viel einfacher. Sie müssen nicht bei jedem Test überprüfen, ob das Zweite, was die Klasse tut oder nicht, passiert ist. Sie müssen die fehlerhaften Bedingungen auch nicht beheben und erneut testen, wenn einer dieser Tests fehlschlägt.