YAGNI
You Aren't Gonna Need It (Buna İhtiyacın Olmayacak)
- Okunuşu
- yegni
Kısaca
YAGNI, ileride gerekebilir diye değil, gerçekten ihtiyaç duyulana kadar bir özellik ya da soyutlama inşa etmemeyi söyleyen bir extreme programming ilkesidir.
YAGNI nedir?
You aren't gonna need it ifadesinin kısaltması olan YAGNI, 1990'ların sonlarında geliştirilen çevik bir yöntem olan extreme programming'den (XP) gelen bir ilkedir. Bir şeyi yalnızca gerçekten ihtiyaç duyduğunuzda uygulamanız gerektiğini, ileride ihtiyaç duyabileceğinizi öngördüğünüzde değil, söyler. Geliştiriciler çoğunlukla gelecekteki gereksinimler için yapılandırma seçenekleri, eklenti sistemleri ya da genel soyutlamalar eklemeye özenir; YAGNI, bu tahminlerin çoğunun yanlış ya da gereksiz çıktığını savunur.
Bir özelliği erken inşa etmenin birkaç maliyeti vardır: şu anda gereken bir şey yerine ona harcanan zaman, herkesin okuması, test etmesi ve bakımını yapması gereken ek kod ve gerçek gereksinim sonunda geldiğinde ve tahminden farklı göründüğünde yapılan yeniden çalışma. YAGNI, otomatik testler, refactoring ve küçük, sık sürümler gibi sonraki değişikliği ucuz kılan uygulamalarla birlikte çalışır; bu yüzden özelliği gerektiğinde eklemek, onu baştan sona taşımaktan daha kolaydır.
Plaj gezisine hazırlanmak gibidir: her ihtimale karşı kar ayakkabıları, bir smokin ve bir çadır getirebilirsiniz, ama ağırlığı yol boyunca taşırsınız ve neredeyse kesinlikle hiç kullanmazsınız. Kodda YAGNI, yirmi hayali durumu ele alan bir framework yerine bugünün iki durumunu ele alan basit fonksiyonu yazmak demektir.
YAGNI sıklıkla KISS ilkesiyle karıştırılır. YAGNI bir şeyi hiç inşa edip etmeyeceğinize karar verir; KISS ise inşa etmeye karar verdiğinizde bunu en basit biçimde yapmakla ilgilidir. YAGNI ayrıca kaliteyi atlamak için bir bahane değildir: testler, anlaşılır kod ve refactoring her zaman gereklidir; public API sözleşmeleri, veri biçimleri ya da güvenlik gibi sonradan değiştirilmesi çok pahalı olan kararlar ise önceden biraz düşünmeyi hak eder.
Önemli noktalar
- YAGNI, you aren't gonna need it ifadesinin kısaltmasıdır.
- Özellikleri ve soyutlamaları hayal edildiğinde değil, gerektiğinde inşa edin.
- Spekülatif kod şimdi zaman, sonra bakım maliyeti getirir ve çoğunlukla yanlış tahmin eder.
- Gelecekteki değişiklikleri ucuz tutmak için testlere ve refactoring'e dayanır.
- Özellikler için geçerlidir; test ya da güvenlik gibi kalite uygulamaları için değil.
Örnek
// Speculative: plugins, options, and formats nobody has asked for yet
class ReportExporter {
constructor(private plugins: ExportPlugin[] = [], private options: ExportOptions = {}) {}
export(data: Row[], format: "csv" | "xml" | "pdf" | "xlsx" = "csv") { /* ... */ }
}
// YAGNI: the only current requirement is a CSV download
function exportCsv(rows: string[][]): string {
return rows.map((row) => row.join(",")).join("\n");
}Sık sorulan sorular
YAGNI neyin kısaltmasıdır?
YAGNI, bazen you ain't gonna need it olarak da yazılan you aren't gonna need it ifadesinin kısaltmasıdır. Extreme programming'den gelir ve her ihtimale karşı özellik inşa etmeye karşı uyarır.
YAGNI ile KISS arasındaki fark nedir?
YAGNI kapsamla ilgilidir: ihtiyaç duyulana kadar bir şey inşa etmeyin. KISS tasarımla ilgilidir: ne inşa ederseniz edin, olabildiğince basit tutun.
YAGNI ne zaman izlenmemeli?
Bir karar sonradan geri almak için çok pahalı olacaksa, örneğin public bir API sözleşmesi, birçok sistemin paylaştığı bir veri modeli ya da güvenlik ve gizlilik gereksinimleri, ileriyi düşünün. YAGNI spekülatif özellikleri hedef alır, değiştirmesi zor temellerin dikkatli tasarımını değil.
İlgili sayfalar
- KISS İlkesiYazılım Mimarisi, s. 22KISS ilkesi, sistemlerin olabildiğince basit tutulduğunda en iyi çalıştığını, gereksiz karmaşıklıktan kaçınılması gerektiğini söyleyen tasarım yönergesidir.
- Extreme ProgrammingEkipler ve Süreç, s. 10Extreme Programming, eşli programlama, test odaklı geliştirme ve sürekli entegrasyon gibi mühendislik pratikleri üzerine kurulu bir Agile yöntemidir.
- RefactoringYazılım Mimarisi, s. 32Refactoring, mevcut kodun dışarıdan görünen davranışını değiştirmeden daha temiz ve bakımı kolay hâle getirmek için yeniden yapılandırılması sürecidir.
- Teknik BorçYazılım Mimarisi, s. 43Teknik borç, daha uzun sürecek daha iyi bir yaklaşım yerine şimdi hızlı ya da sınırlı bir çözüm seçilmesiyle doğan, gelecekteki ek iş maliyetidir.
- MVPEkipler ve Süreç, s. 14MVP, gerçek kullanıcıların kullanabileceği en sade ürün sürümüdür; temel bir varsayımı test etmek ve en az emekle en çok şeyi öğrenmek için geliştirilir.
- DRYYazılım Mimarisi, s. 13DRY, her bilgi ya da mantık parçasının çoğaltılmak yerine tek bir yetkili temsile sahip olması gerektiğini söyleyen bir yazılım tasarım ilkesidir.
Bu sayfada bir hata ya da eksik mi gördünüz?Düzeltme önerin