DRY, KISS ve YAGNI prensipleri nedir? Birbirleriyle çatıştıkları durumlar olur mu?

Cevap

Üçü de sürdürülebilir kod yazmak için kullanılan sezgisel ilkelerdir:

  • DRY (Don't Repeat Yourself): her bilgi (iş kuralı, sabit, mantık) sistemde tek ve yetkili bir yerde bulunmalıdır. Amaç, bir kural değiştiğinde tek yerde değiştirmektir.
  • KISS (Keep It Simple, Stupid): problemi çözen en basit tasarımı tercih edin; gereksiz soyutlama ve "zekice" kod okunabilirliği düşürür.
  • YAGNI (You Aren't Gonna Need It): şu an ihtiyaç olmayan özelliği "ileride lazım olur" diye yazmayın. Extreme Programming'den gelir.

Örnek: YAGNI ihlali

# Tek bir PDF raporu gerekiyorken:
class ReportExporterFactory:          # 5 format, plugin sistemi, config dosyası...
    ...

# Yeterli olan:
def export_report_pdf(report): ...

Çatışma: DRY ile KISS

Benzer görünen iki kodu erken birleştirmek, if ve parametrelerle dolu karmaşık bir ortak fonksiyon doğurabilir. Bu yanlış soyutlamadır. Sandi Metz'in sözüyle: "Duplication is far cheaper than the wrong abstraction."

Pratik kural: Rule of Three. Aynı şeyi üçüncü kez yazarken soyutlayın; iki kez tekrar genelde kabul edilebilir.

DRY sadece kod tekrarı değildir

İki kod parçası aynı görünse de farklı nedenlerle değişiyorsa aslında aynı bilgi değildir. Örneğin indirim hesabı ve vergi hesabı bugün aynı formülü kullansa bile ayrı tutulmalıdır; biri değiştiğinde diğeri etkilenmemelidir.

İlkeYanlış uygulandığında
DRYAşırı genelleştirilmiş, her şeye bağlı ortak modüller
KISS"Basit" bahanesiyle hata yönetimi ve testlerin atlanması
YAGNIBariz yakın ihtiyaçları bile (ör. loglama, güvenlik) ertelemek
  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