Genel

Solidin S ‘si ->Single Responsiblity Princible

Bu yazı dizimizde her hafta solid ‘in bir prensibini paylaşacağız. Her bir yazı uzun olduğu için ayırmanın daha doğru bir karar olduğunu düşündüm.

SOLID 5 tane kuralın baş harflerinden oluşmuş bir prensiptir. Nedir Bu kurallar ?

  • Single Responsiblity Princible (Tek Sorumluluk Kuralı)
  • Open-Closed Princible (Açıklık – Kapalılık Kuralı)
  • Liskov’s Substitution Princible (Liskov’un Yer değiştirme Kuralı)
  • Interface Segregation Princible (Interface Parçalama Kuralı)
  • Dependecy Inversion Princible (Bağımlılıkları Tersine Çevirme Kuralı)

Yukardaki kurallar tek başlarına çok şey anlatmayabilirler lakin bir hedef ve kendimize koymuş olduğumuz bir şart ile uygulanırsa o zaman yazılım projemizde bakımı kolay, anlaşılır ve genişletilebilir bir yapıya sahip olabileceğiz. Bağımlılıklarımızı yönetebileceğiz ve birbirlerine louse coupling (gevşek bağlı) sınıflar üretebileceğiz. Kullanmadığımız taktirde ise projemiz büyüdükçe bir sürü sorunlar ile karşılaşıcağız ve proje kontrolümüzden çıkıcaktır.

İlgili bağlantılar üzerinden derslere erişim sağlayabilirsiniz.

Single Responsiblity Princible

Bu kural sınıflarımızın, metotlarımızın ya da modüllerimizin tek sorumluluğu olması gerektiğini söylüyor. Yazdığımız servis sınıfları, metotlar vs. yazılım birimlerinin tek sorumluluğu olmalıdır.

Single Responsibility Principle was defined by Robert C. Martin as –
A class should have only one reason to change.

Örneğin çarpma ve bölme işlemlerini aynı fonksiyon içerisinde yapıyorsak bu fonksiyonu parçalayarak sadece çarpma işlemini ve sadece bölme işlemini yapan fonksiyonlar oluşturmalıyız. Bu durum kod tekrarını önleyerek kodun tekrar kullanılabilirliğini arttırır.

Kötü Bir Örnek :

İlk olarak kötü bir örnek olarak aşağıya baktığımızda hem customer için değişkenlerimiz (model) hem de dao işlemlerini içeren hem de login olmayı kapsayan bir yapı görmekteyiz. Burası SRP ‘ye uymuyor. Neden diyecek olursanız şartımız bizim class ‘ımız tek bir sorumluluk alması gerekiyor. Burada hem DAO işlemleri hemde model olmaya çalışıyor.

package SOLID.SRP.Bad;

public class Customer {

    private int id;
    private String userName;
    private String email;
    private String password;

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getUserName() {
        return userName;
    }

    public void setUserName(String userName) {
        this.userName = userName;
    }

    public String getEmail() {
        return email;
    }

    public void setEmail(String email) {
        this.email = email;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    public void create(){

    }

    public void delete(){

    }

    public void login(){

    }

}

İyi Bir Örnek

Customer:

package SOLID.SRP.Good;

public class Customer  {

    private int id;
    private String userName;
    private String email;
    private String password;

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getUserName() {
        return userName;
    }

    public void setUserName(String userName) {
        this.userName = userName;
    }

    public String getEmail() {
        return email;
    }

    public void setEmail(String email) {
        this.email = email;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

}

CustomerDAOImp

package SOLID.SRP.Good;

public class CustomerDAOImp  implements  ICustomerDAO{
    @Override
    public void create() {

    }

    @Override
    public void updare(Customer customer) {

    }

    @Override
    public void delete(Customer customer) {

    }
}

ICustomerDAO

package SOLID.SRP.Good;

public interface ICustomerDAO {

    void create();

    void updare(Customer customer);

    void delete(Customer customer);
}

ILogin

package SOLID.SRP.Good;

public interface ILogin {

    void login(Customer customer);

}

LoginImp

package SOLID.SRP.Good;

public class LoginImp implements ILogin {
    @Override
    public void login(Customer customer) {
        if(customer.getEmail().equals("umiitkose@gmail.com") && customer.getPassword().equals("1234")){
            System.out.println("Şifreniz Doğru ");
        }
        else {
            System.out.println("Şifreniz Yanlış..");
        }
    }
}

Aşağıdaki sosyal medya hesaplarımdan beni takip edebilirsiniz.

İyi Okumalar 🙂

Bu görsel boş bir alt niteliğe sahip; dosya adı unnamed.png          Bu görsel boş bir alt niteliğe sahip; dosya adı github-mark-1024x538.png   Bu görsel boş bir alt niteliğe sahip; dosya adı 26cba4a440f340e70e99ba87ca76d416.png

One thought on “Solidin S ‘si ->Single Responsiblity Princible

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir