C# S.O.L.I.D (SRP)

AhmetKürşadYILDIZ
4 min readApr 28, 2024

SOLID İlkelerinden İlki: Tek Sorumluluk Prensibi (Single Responsibility Principle — SRP)

Tek Sorumluluk Prensibi (SRP), nesneye yönelik programlamada (OOP) temel bir prensiptir. Bu prensibe göre, bir sınıf veya modülün tek bir sorumluluğu olmalıdır. Başka bir deyişle, bir sınıfın veya modülün tek bir işlevi yerine getirmesi ve bu işlevselliğin yalnızca bir bölümünden sorumlu olması gerekir.

SRP’nin Faydaları:

  • Kodun daha anlaşılır ve sürdürülebilir olmasını sağlar. Her sınıf tek bir sorumluluğa sahip olduğunda, kod daha kolay okunabilir ve anlaşılabilir hale gelir. Bu da kodda hata ayıklamayı ve değişiklik yapmayı kolaylaştırır.
  • Kodun daha esnek ve tekrar kullanılabilir olmasını sağlar. Tek bir sorumluluğa sahip sınıflar, farklı bağlamlarda daha kolay kullanılabilir. Bu da kod tekrarını azaltır ve geliştirici verimliliğini artırır.
  • Kodun daha sağlam olmasını sağlar. Bir sınıfın tek bir sorumluluğu olduğunda, sınıfa yapılan değişiklikler diğer işlevleri etkileme olasılığı daha düşüktür. Bu da kodun daha az hata yapmasını sağlar.

SRP’yi Uygulama:

SRP’yi uygulamanın en iyi yolu, küçük ve odaklı sınıflar oluşturmaktır. Her sınıf, belirli bir sorumluluğu yerine getirmeye ve sadece o sorumluluğa odaklanmaya odaklanmalıdır. Bir sınıfın sorumlulukları çok büyükse, onu daha küçük sınıflara bölmek gerekir.

SRP’yi uygulamanın başka bir yolu da arayüzler kullanmaktır. Arayüzler, bir sınıfın veya modülün yerine getirmesi gereken bir dizi yöntem ve özelliği tanımlar. Farklı sınıflardan nesneler aynı arayüze sahip olabilir ve bu da onları birbirinin yerine kullanmayı mümkün kılar. Arayüzler, kodda daha fazla soyutlama ve esneklik sağlamak için kullanılır.

SRP’ye Uyulmamasının Sonuçları:

SRP’ye uyulmadığında, kod daha az okunabilir, sürdürülebilir ve esnek hale gelir. Ayrıca, kodda daha fazla hata olması ve hata ayıklamanın daha zor olması muhtemeldir.

Örnek:

Aşağıdaki kod SRP’ye uymamaktadır:

C#

public class KullaniciIslemleri
{
public void KullaniciOlustur(string ad, string soyad, string eposta, string sifre)
{
// Kullanıcıyı veritabanına kaydet
// Kullanıcıya e-posta gönder
// Kullanıcı profilini oluştur
}
    public void KullaniciGirişi(string eposta, string sifre)
{
// Kullanıcıyı veritabanında doğrula
// Giriş işlemini gerçekleştir
}
public void KullaniciBilgileriniGuncelle(int kullaniciId, string ad, string soyad, string eposta)
{
// Kullanıcı bilgilerini veritabanında güncelle
}
public void KullaniciHesabiniSil(int kullaniciId)
{
// Kullanıcı hesabını veritabanından sil
}
}

Bu kodda, KullaniciIslemleri sınıfı birden fazla sorumluluğa sahiptir. Bu sınıf, kullanıcı oluşturma, kullanıcı girişi, kullanıcı bilgilerini güncelleme ve kullanıcı hesabını silme gibi işlemlerden sorumludur. Bu, kodun okunmasını ve sürdürülmesini zorlaştırır. Ayrıca, bir sorumlulukta yapılan bir değişiklik diğer sorumlulukları da etkileyebilir.

SRP’ye uymak için bu kodu şu şekilde yeniden yazabiliriz:

public interface IKullaniciIslemleri
{
void KullaniciOlustur(string ad, string soyad, string eposta, string sifre);
}
public class KullaniciKayitIslemleri : IKullaniciIslemleri
{
public void KullaniciOlustur(string ad, string soyad, string eposta, string sifre)
{
// Kullanıcıyı veritabanına kaydet
// Kullanıcıya e-posta gönder
// Kullanıcı profilini oluştur
}
}
public interface IKullaniciGirisIslemleri
{
void KullaniciGirişi(string eposta, string sifre);
}
public class KullaniciGirisIsle

Tek Sorumluluk Prensibi (SRP)’de Dikkat Edilmesi Gerekenler

Tek Sorumluluk Prensibi (SRP), nesneye yönelik programlamada (OOP) temel bir prensiptir. Bu prensibe göre, bir sınıf veya modülün tek bir sorumluluğu olmalıdır. Başka bir deyişle, bir sınıfın veya modülün tek bir işlevi yerine getirmesi ve bu işlevselliğin yalnızca bir bölümünden sorumlu olması gerekir.

SRP’yi uygulamada dikkat edilmesi gereken bazı önemli noktalar şunlardır:

1. Sınıfların Sorumluluklarını Doğru Belirleyin:

  • Her sınıfın neyi başarmak için var olduğunu açıkça tanımlayın.
  • Sınıfın yaptığı her şey, bu temel sorumlulukla uyumlu olmalıdır.
  • Sınıfın sorumluluğuna dahil olmayan işlevler, ayrı bir sınıfa taşınmalıdır.

2. Büyük Sınıfları Bölün:

  • Çok fazla sorumluluğa sahip büyük sınıflar SRP’ye uymaz.
  • Büyük sınıfları daha küçük ve odaklı sınıflara bölerek SRP’yi uygulayabilirsiniz.
  • Bu, kodun daha anlaşılır ve sürdürülebilir olmasını sağlayacaktır.

3. Arayüzleri Kullanın:

  • Arayüzler, bir sınıfın veya modülün yerine getirmesi gereken bir dizi yöntem ve özelliği tanımlar.
  • Farklı sınıflardan nesneler aynı arayüze sahip olabilir ve bu da onları birbirinin yerine kullanmayı mümkün kılar.
  • Arayüzler, kodda daha fazla soyutlama ve esneklik sağlamak için kullanılır.
  • SRP’yi uygulamak için arayüzleri kullanarak, sınıfların sorumluluklarını daha iyi tanımlayabilirsiniz.

4. Kodunuzu Düzenli Olarak Gözden Geçirin:

  • Mevcut kodunuzu düzenli olarak gözden geçirerek SRP’ye uyup uymadığını kontrol edin.
  • Yeni kod yazarken SRP’yi aklınızda bulundurun ve her sınıfın tek bir sorumluluğu olduğundan emin olun.
  • SRP’ye uymayan kodları düzeltmek için zaman ayırın.

5. Statik Analiz Araçlarını Kullanın:

  • Statik analiz araçları, kodunuzdaki büyük sınıfları ve diğer SRP ihlallerini belirlemenize yardımcı olabilir.
  • Bu araçlar, SRP’ye uymamanızı önlemenin ve kodunuzu iyileştirmenin iyi bir yoludur.

6. Kod İncelemeleri Yapın:

  • Diğer geliştiricilerle kodunuzu gözden geçirmeniz ve SRP’ye uyup uymadığını kontrol etmeniz için iyi bir yoldur.
  • Farklı bakış açıları, SRP’ye uymayan kodları belirlemenize ve düzeltmenize yardımcı olabilir.

7. Test Odaklı Geliştirme Kullanın:

  • Kodunuzun SRP’ye uyduğundan emin olmanıza yardımcı olacak testler yazabilirsiniz.
  • Test odaklı geliştirme, kodunuzun sağlam ve güvenilir olmasını sağlayabilir.

SRP, kodunuzun daha anlaşılır, sürdürülebilir ve esnek olmasını sağlayabilecek güçlü bir prensiptir. SRP’yi uygulamak için zaman ayırmak, uzun vadede kodunuzu daha iyi hale getirmenize yardımcı olacaktır.

Dikkat Edilmesi Gereken Diğer Noktalar:

  • Sınıf adları ve yöntem adları, sınıfın sorumluluğunu açıkça yansıtmalıdır.
  • Kodunuzda yorumlar kullanarak sınıfların ve yöntemlerin ne yaptığını açıklayın.
  • Basit ve anlaşılır bir kod yazmaya özen gösterin.
  • Karmaşık koddan kaçının ve kodunuzu mümkün olduğunca modüler hale getirin.

SRP’yi uygulamaya koymak biraz zaman ve çaba gerektirebilir. Ancak, uzun vadede kodunuzun daha iyi hale gelmesini ve daha kolay yönetilebilir olmasını sağlayacaktır

--

--