S.O.L.I.D. 1 – Single Responsibility Principle (SRP)

Czym właściwie jest SOLID? SOLID to akronim wymyślony przez Roberta C.Martina. Jest to zestaw zasad stosowany w programowaniu obiektowym. Dzięki nim powinniśmy uniknąć błędów podczas tworzenia aplikacji, a nasz kod będzie najwyższej jakości.

Single Responsibility Principle (SRP) – najprostsza i najbardziej użyteczna zasada, nazywana jest zasadą pojedynczej odpowiedzialności. Jest treść brzmi następująco:

Klasa powinna mieć tylko jedną odpowiedzialność (nigdy nie powinien istnieć więcej niż jeden powód do modyfikacji klasy).

Oznacza to, że klasa powinna być odpowiedzialna tylko za jeden element programu, mieć jeden cel, jedną funkcjonalność. Jeżeli klasa jest odpowiedzialna za więcej rzeczy, powinniśmy ją podzielić.

Przykład: Mamy klasę User, która przechowuje dane użytkownika takie jak np. nazwę, użytkownika, hasło, email itp. W tym przypadku sprawdza również  poprawność podanych przez użytkownika danych.

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

    public User(String userName, String email, String password) {
        this.userName = userName;
        this.email = email;
        this.password = password;
    }
    public void checkPassword(String password){
        //code...
    }
    public void checkEmail(String email){
        //code...
    }
    public void checkUserName(String userName){
        //code...
    }
}

Ta klasa łamie zasadę SRP, ponieważ realizuje więcej niż jedną funkcję – oprócz przechowywania danych użytkownika, sprawdza również poprawność danych. Rozdzielmy zatem funkcjonalność na dwie klasy: UserSRP i UserSRPValidation.

public class UserSRP {
    private String userName;
    private String email;
    private String password;
    private UserSRPValidation userSRPValidation;

    public UserSRP(String userName, String email, String password) {
        this.userName = userName;
        this.email = email;
        this.password = password;
        userSRPValidation = new UserSRPValidation();
    }
    public void userValidation(){
        userSRPValidation.userValidation(userName, email, password);
    }
}
public class UserSRPValidation {
    public void userValidation(String userName, String email, String password){
        checkPassword(password);
        checkEmail(email);
        checkUserName(userName);
    }
   private void checkUserName(String userName){
        //code...
    }
    private void checkPassword(String password){
        //code...
    }
    private void checkEmail(String email){
        //code...
    }
}

Teraz zadanie walidacji zostało oddelegowane do klasy UserSRPValidation. Dzięki temu podzielona została odpowiedzialność, każda klasa ma swój jasno postawiony cel.

Leave a Comment

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