Definicja
Zasada pojedynczej odpowiedzialności (SRP – Single Responsibility Principle)
Zasada SRP mówi, że klasa (lub moduł) powinna mieć tylko jeden powód do zmiany, czyli powinna odpowiadać tylko za jedno konkretne zadanie lub odpowiedzialność w systemie.
Innymi słowy, każda klasa powinna zajmować się tylko jednym aspektem funkcjonalności aplikacji. Jeśli klasa ma wiele odpowiedzialności, zmiana w jednej z nich może niechcący wpłynąć na inne — co prowadzi do trudności w utrzymaniu i testowaniu kodu.
Przykład programu przed wdrożeniem SRP
public class Assistant {
public int retirementAge = 65;
public int age;
public Assistant(int age) {
this.age = age;
}
public void HandleEmployee() {
System.out.println("Logging data...");
System.out.println(this.retirementAge - this.age);
}
}
Klasa Assistant w powyższym kodzie ma dwie funkcje: logowanie danych, obliczanie ile lat zostało do emerytury. Zgodnie z zasadą SRP, te odpowiedzialności powinny być rozdzielone. Proponuje utworzyć trzy klasy: Assistant, FinancesAssistant, Logger.
Kod po zastosowaniu zasady SRP
public class Assistant {
public FinancesAssistant financesAssistant;
public Logger logger;
public Assistant(int age) {
this.financesAssistant = new FinancesAssistant(30);
this.logger = new Logger();
}
public void HandleEmployee() {
this.logger.Log();
this.financesAssistant.Calculate();
}
}
public class FinancesAssistant {
public int retirementAge = 65;
public int age;
public FinancesAssistant(int age) {
this.age = age;
}
public void Calculate() {
System.out.println(this.retirementAge - this.age);
}
}
public class Logger {
public void Log() {
System.out.println("Logging data...");
}
}
Podsumowanie
Dzięki rozdzieleniu odpowiedzialności każda klasa ma teraz jeden jasno określony cel. Taki kod jest łatwiejszy do testowania, modyfikowania i utrzymania w dłuższej perspektywie. To właśnie jest sedno zasady pojedynczej odpowiedzialności
