Single Responsibility Principle

(Zasada jednej odpowiedzialności)

Każdy moduł lub klasa powinna mieć odpowiedzialność za pojedynczą część funkcjonalności zapewnianej przez oprogramowanie, a odpowiedzialność ta powinna być w całości zawarta w klasie, module lub funkcji. Klasa powinna mieć jeden i tylko jeden powód do zmiany.

Robert C.Martin (Uncle Bob)

Pomimo, że zasada ta wydaje się łatwa do wdrożenia, istnieje w niej pewna trudność: czasami bardzo trudno jest uchwycić moment, kiedy klasa zaczyna robić więcej niż jedną rzecz.

</> Lepszy przykład niż wykład

✘ Błędny kod

Klasa Cat zajmuje się wydawaniem dźwięku kota i polowaniem na mysz. Ponieważ jest odpowiedzialna ze dwie funkcjonalności, narusza SRP.

public class Cat {
    public void makeSound() {
        System.out.println("Wydaję dźwięk kota.");
    }

    public void huntMouse() {
        System.out.println("Poluję na mysz.");
    }
}

public class Main {
    public static void main(String[] args) {
        Cat cat = new Cat();
        cat.makeSound();
        cat.huntMouse();
	}
}
✔ Prawidłowy kod

Klasę Cat zastąpimy klasami:

  • CatSound odpowiadającą za wydawanie dźwięku kota
  • CatHunting odpowiadającą za polowanie na mysz
public class CatSound {
    public void makeSound() {
        System.out.println("Wydaję dźwięk kota z wykorzystaniem osobnej klasy.");
    }
}

public class CatHunting {
    public void huntMouse() {
        System.out.println("Poluję na mysz z wykorzystaniem osobnej klasy.");
    }
}

public class Main {
    public static void main(String[] args) {
        CatSound catSound = new CatSound();
        CatHunting catHunting = new CatHunting();

        catSound.makeSound();
        catHunting.huntMouse();
	}
}

Teraz każda z klas wykonuję tylko jedną rzecz.

Zostaw komentarz

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *