Single Responsibility Principle (Tek Sorumluluk Prensibi) Üzerine
Nesne yönelimli geliştirme yaparken yazılan kodların tüm geliştiriciler tarafından kolay okunabilmesi ve çözümlenebilmesi, yazılımın kaliteli ve hızlı geliştirilebilmesi için izlenmesi gereken en önemli prensiplerden biridir.
Uzun süreye yayılan bir yazılımı geliştirmek oldukça zahmetli ve maliyetli bir iştir. Bu çaptaki projelerde büyük kod yığınları içinde kalırız ve nerede ne yapıldığını anlamak, sorunu tespit etmek, koda müdahale etmek biz yazılımcılar için genelde kâbus olur. Dolayısıyla bu tarz projelerde her zaman anlaşılır ve temiz kodlar yazmak çok önemlidir.
Single Responsibility Principle(Tek Sorumluluk Prensibi), basit projelerde olsun yukarıda tarif ettiğimiz projelerde olsun önümüzü görmemizi, nesneleri ve nesne işlevlerini(metotları) rahatlıkla anlamamızı sağlayan bir yazılım geliştirme prensibidir. SOLID prensipleri içerisinde ilk sırada yer alır. Bu prensibe uygun geliştirilmiş projeler okunulabilirliliği yüksek olduğu için, işe sonradan dahil olan geliştiriciler projeye daha çabuk ve daha sağlıklı ayak uydururlar.
Bu prensibe göre bir metodun veya sınıfın tek görevi olmalıdır. Metot için konuşursak, bir metoda yüklenen işlev birden fazla olmamalıdır. Örneğin bir ürünün fiyatı güncellenip, ardından mağaza sorumlusuna e-posta atılacaksa ortada iki farklı metot olmalıdır; birisi ürünün fiyatını güncelleyen(ör: UpdatePrice), diğeri de e-posta gönderen(ör: SendMailToShopManager) metot olmalıdır. Tek metot yazıp hem ürün güncellemesi hem de e-mail gönderimiyle ilgili kodların tek metot içerisine konulması bu prensibe tamamen ters bir durum olur.
Sadece metot için değil sınıf için de aynı durum geçerli. Örneğin kullanıcı ile ilgili işlemleri yapan bir sınıf içerisine sadece CreateUser, Login, ChangePassword gibi kullanıcıyla ilgili metotları eklemeliyiz. Böyle bir sınıfa SendMail veya WriteLog gibi bir metot eklememek gerekir. Çünkü bu metotlar doğrudan kullanıcıyla ilgili değildir. SendMail MailHelper, WriteLog da Logger gibi bir sınıfın içerisinde yer alması daha doğru olacaktır.
Yukarıdaki resim bu prensibin önemini anlatıyor sanırım. İlk bakışta İsviçre çakısı herşeyi üzerinde bulundurduğu için daha kullanışlı gelebilir. Ama yazılım geliştirirken elimizden geldiğince bileşenleri ayırmalıyız, kimin ne yaptığı ve ne yapmadığı gibi konular ayrıştırılmalı ve yazılım takımındaki herkes tarafından iyice bilinmelidir.
Single Responsibility Principle uyumlu kod yazmak
SOLID’in ilk kuralı olan single responsibility principle, yani tek sorumluluk prensibi yazılım geliştirirken yazdığımız metodun, sınıfın, hatta projenin tek bir sorumluluğa sahip olmasını ve kendi alanı dışındaki farklı işlemleri içermemesini bize öğütler. Bunu yapabilmek için her zaman kodu yazarken “bu işlemi burada mı yapmalıyım?” “bu metot içerisinde birden fazla iş yapılıyor mu?” “bu sınıf x nesnesine hizmet etmek dışında farklı işlevler içeriyor mu?” gibi sorular sorarak kod geliştirmeliyiz. Sadece kod geliştirirken değil, code review yaparken de başkasının yazdığı metotlara ve sınıflara içlerinde bu prensibe aykırı durumlar var mı gözüyle mutlaka bakmalıyız. Değişmesi gereken kısımlar için kodu yazan yazılımcının gerekli düzeltmeleri yapmasını sağlamalıyız.
Bu prensibe uyarak yazdığımız kodları daha anlaşılır hale getiririz. Proje ekibine yeni katılan biri dahi sınıf isimlerinden ve metot isimlerinden nerelerde hangi işlemlerin yapıldığını kolayca anlar. Kod içindeki akışları takip etmek daha kolay olur ve bir işlemle ilgili değişiklik yapılınca hem nereyi değiştireceğimizi iyi biliriz, hem de sadece o işlemin etki alanını değiştirdiğimizi biliriz.
Yine single responsibility principle uyumlu kod yazarsanız diğer prensiplere uyumunuzda kolaylaşacak ve süre bakımından daha esnekleşeceksiniz. Çünkü kaliteli kod, artan zamana eşittir. Ne kadar kaliteli kod yazarsanız o kadar çok zaman kazanırsınız.
3 Comments
Efe Baturalp Gökdoğan
14 Kasım 2016 at 20:08Çok yararlı olmuş teşekkür ederim.
Merve Çelenk
18 Kasım 2016 at 09:44Gayet güzel. Teşekkür ederim.
Ahmet Gökalp
26 Ocak 2017 at 14:27Böylelikle fazla zaman kaybeymeden neyi nerde yaptığımızı bulabileceğiz. Mükemmel teşekkürler.