SOLID prensiplerini örneklerle açıklayın.

Cevap

S: Single Responsibility

Bir sınıfın değişmek için tek bir nedeni olmalı. UserService hem kullanıcı kaydı yapıp hem e-posta HTML'i oluşturup hem de PDF rapor üretiyorsa üç ayrı sınıfa bölünmelidir.

O: Open/Closed

Sınıflar genişlemeye açık, değişikliğe kapalı olmalı. Yeni ödeme yöntemi eklemek için mevcut if/else zincirini değiştirmek yerine yeni bir sınıf eklenmeli.

class PaymentMethod:
    def pay(self, amount): ...

class CreditCard(PaymentMethod):
    def pay(self, amount): ...

class Papara(PaymentMethod):      # yeni yöntem: mevcut kod değişmez
    def pay(self, amount): ...

def checkout(method: PaymentMethod, amount):
    method.pay(amount)

L: Liskov Substitution

Alt sınıf, üst sınıfın yerine kullanıldığında programın doğruluğu bozulmamalı. Klasik ihlal: Square extends Rectangle. setWidth(5) çağrısı karede yüksekliği de değiştirir ve Rectangle bekleyen kod şaşırır. Alt sınıfta NotImplementedError fırlatmak da bir ihlal işaretidir.

I: Interface Segregation

İstemciler kullanmadıkları metotlara bağımlı olmamalı. Dev bir Worker { work(); eat(); sleep(); } arayüzü yerine Workable, Eatable gibi küçük arayüzler; robot sınıfı eat()'i boş implemente etmek zorunda kalmaz.

D: Dependency Inversion

Üst seviye modüller alt seviye modüllere değil, soyutlamalara bağımlı olmalı.

class OrderService:
    def __init__(self, repo: OrderRepository):   # soyut arayüz
        self.repo = repo
# Üretimde PostgresOrderRepository, testte InMemoryOrderRepository verilir

Pratikte SOLID bir kural listesi değil, değişime dayanıklı ve test edilebilir kod için yol göstericidir; aşırı uygulanması gereksiz soyutlamaya yol açabilir.

  1. Clean code nedir? Yaygın code smell'ler nelerdir?OrtaOOP & Tasarım DesenleriYazılım Müh.
  2. Dependency Injection nedir? IoC container ne işe yarar?ZorOOP & Tasarım DesenleriYazılım Müh.
  3. Strategy deseni nedir? if/else zincirlerini nasıl ortadan kaldırır?OrtaOOP & Tasarım DesenleriYazılım Müh.
  4. Observer deseni nedir? Gerçek hayatta nerelerde karşımıza çıkar?OrtaOOP & Tasarım DesenleriYazılım Müh.
  5. Factory deseni nedir? Ne zaman kullanılır?OrtaOOP & Tasarım DesenleriYazılım Müh.
  6. Singleton deseni nedir? Neden bazen anti-pattern olarak görülür?ZorOOP & Tasarım DesenleriYazılım Müh.

Bu konuda başka bir soru biliyor musun?

Mülakatta karşılaştığın soruları ekle, onaylandıktan sonra yayına alınsın.

Soru ekle