Single Responsibility Principle (Tek Sorumluluk Prensibi) SOLID Prensiplerinin ilk sırasında yer alan prensiptir. SRP’nin yaratıcısı Robert C. Martin prensibi “Bir sınıfın değişmesi için tek bir nedene sahip olmalıdır” şeklinde tanımlamıştır. Yani Single responsibility’e göre bir sınıf veya metodun birden fazla görevi olmamalıdır yapması gereken tek görevi olmalıdır.
Peki biz SRP’ye uygun kod yazarsak faydası ne olur? Single Responsibility’e uyularak yazılan projelerde okunabilirlik kolay olduğu için projeye sonradan giren bir kişi projeye kolaylıkla uyum sağlar. Sonradan geliştirilebilecek olan büyük projelerde kullanılması hem projenin geliştirilmesini kolaylaştırır hem de zamandan kazanmamızı sağlar.
Örnek verecek olursak bir su fabrikası düşünelim. Damacanalar taşıyıcı bantlara yerleştirilir ve sırayla makinelerden geçer. Her makinenin tek bir görevi vardır. Mesela damacana taşıyıcı banda yerleştirildi önce damacana da herhangi bir çatlak kırık vb. sıkıntısı var mı diye bir makine kontrol eder. Sorun yoksa başka bir makineye gider bu makinenin görevi de suyu doldurmak olsun. Suyu doldurduktan sonra damacana tekrar yoluna devam eder ve görevi kapağı takmak olan makineye gider, bu makinede kapağını takar. İşin kısası Her makinenin kendine ait bir görevi vardır. Eğer biz kapak rengini değiştirmek istiyorsak sadece görevi kapak takmak olan makinede değişiklik yaparız. Böylelikle diğer makinelerle uğraşmak zorunda kalmayız büyük projelerde de olay böyledir.
Örneğimize bir de kod olarak bakalım.
class Makine
{
public bool KontrolEt()
{
return true;
}
public bool SuDoldur()
{
return true;
}
public bool Kapaktak()
{
return true;
}
}
Örnekte makine adında bir classımız var. Classımızın içinde de 3 tane kontrolet, sudoldur ve kapaktak metotlarımız bulunmakta. Yani makinemiz hem kontrol hem su doldurma hem de kapak takma işlemlerini yapmaktadır. Bu örneğimiz SRP’ye uymamaktadır. Mesela yarın bir gün Kapaktak metodunda değişiklik yapmak istersek bütün class’ı etkileyebiliriz. Böyle bir şeyin olmasını istemiyorsak SRP’ye uymalıyız. Şimdi de aynı örneğimizi SRP’ye uygun olarak yapalım.
class KontrolMakinesi
{
public bool KontrolEt()
{
return true;
}
}
class SuMakinesi
{
public bool SuDoldur()
{
return true;
}
}
class KapakMakinesi
{
public bool Kapaktak()
{
return true;
}
}
SRP’ye uygun olarak yaptığımızda her makinemiz için farklı bir classımız bulunmakta. Eğer bir gün Kapak ile ilgili bir değişiklik yapmamız gerekirse sadece KapakMakinesi adlı classımızda değişiklik yaparız. Böylelikle diğer makinelerimiz(classlarımız) yaptığımız bu değişiklikten etkilenmez.
Bu makalemizde de SOLID’in S harfinin ne anlama geldiğini ve mantığını basit bir örnekle öğrenmiş olduk. Diğer yazılarımda görüşmek üzere hoşça kalın.

Yorum Yap