SRP Single Responsibility Principle

Eine Komponente (Klasse, Funktion, Modul) sollte nur eine Aufgabe erfüllen. Oder anders ausgedrückt: Eine Komponente sollte nur einen Grund haben verändert zu werden.

Am Einfachsten lässt sich das das an einem Beispiel sehen, dass das Single Responsibility Principle verletzt. Wir betrachten folgenden Java Code:

public class User {
    private String name;
    private String email;
    private String password;

    public void save() {
        // Speichere den User in der Datenbank
    }

    public void sendEmail() {
        // Sende eine E-Mail an den User
    }
}

Die Klasse User hat zwei Methoden saveToDB und sendEmail. Die Methode saveToDB speichert den User in der Datenbank und die Methode sendEmail sendet eine E-Mail an den User. DasProblem hierbei ist, dass die Klasse User zwei Gründe hat verändert zu werden. Zum einen, wenn sich die Weise ändert, wie ein User in der Datenbank gespeichert wird und zum anderen, wenn sich die Art ändert, wie eine E-Mail an den User gesendet wird.

Zusätzlich zum SRP verletzt unser Code auf das DRY Prinzip, sollte es wo anders noch eine Methode geben, die E-Mails sendet.

Wie könnten wir das ganze besser machen? Wir könnten die methode sendEmail in eine eigene Klasse EmailService auslagern. Die Klasse User würde dann nur noch die Daten des Users verwalten und die Methode save enthalten.

class User {
    private String name;
    private String email;
    private String password;

    public void saveToDb() {
        // Speichere den User in der Datenbank
    }
}

class EmailService {
    public void sendEmail(User user) {
        // Sende eine E-Mail an den User
    }
}