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 🙂
Geri bildirim: Mayıs Ayı Bülten | Ümit KÖSE