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.
| İlke | Yanlış uygulandığında |
|---|---|
| DRY | Aşırı genelleştirilmiş, her şeye bağlı ortak modüller |
| KISS | "Basit" bahanesiyle hata yönetimi ve testlerin atlanması |
| YAGNI | Bariz yakın ihtiyaçları bile (ör. loglama, güvenlik) ertelemek |
İlgili OOP & Tasarım Desenleri soruları
- Clean code nedir? Yaygın code smell'ler nelerdir?
- Dependency Injection nedir? IoC container ne işe yarar?
- Strategy deseni nedir? if/else zincirlerini nasıl ortadan kaldırır?
- Observer deseni nedir? Gerçek hayatta nerelerde karşımıza çıkar?
- Factory deseni nedir? Ne zaman kullanılır?
- Singleton deseni nedir? Neden bazen anti-pattern olarak görülür?
Bu konuda başka bir soru biliyor musun?
Mülakatta karşılaştığın soruları ekle, onaylandıktan sonra yayına alınsın.