AFAIK

Don’t Repeat Yourself (DRY) Prensibi

Güncelleme:
İki veya daha fazla tekrar eden bir ifadeden birini değiştirdiğimizde, diğerinin de değiştirilmesi gerektiğini unutmamamız gerekir ve çoğu zaman bu durumu unutur veya süreç içerisinde ...
GÖRSEL

İki veya daha fazla tekrar eden bir ifadeden birini değiştirdiğimizde, diğerinin de değiştirilmesi gerektiğini unutmamamız gerekir ve çoğu zaman bu durumu unutur veya süreç içerisinde ihmal ederiz.

DRY (Don’t Repeat Yourself) Nedir?

Don’t repeat yourself (DRY), yazılım kalıplarının tekrarlanmasını (code duplication) ve buna bağlı olarak ortaya çıkabilecek fazlalıkların / karmaşanın önlenmesini amaçlayan bir yazılım geliştirme ilkesidir1. DRY prensibi, “Her bilginin bir sistem içinde tek, kesin ve yetkili bir temsili ile var olması” gerektiğini vurgular. Prensip Andy Hunt ve Dave Thomas tarafından Pragmatic Programmer2 kitabında formüle edilmiştir.

Dave Thomas, “Çoğu kişi DRY’i kodun tekrarından kaçınmak ile sınırlandırsa da, prensibin ardındaki fikir bunun çok daha ötesindedir” der. Tüm bu bilgiler göz önüne alındığında, neden her özelliği temsil eden bir yol bulmaya çalışmayalım? İlk akla gelen cevap, eğer aynı amaca hizmet eden birden fazla yol söz konusu ise büyük ihtimalle her yol bir diğeri ile çelişecektir. Çelişmeseler dahi, bir değişiklik gerçekleştirildiğinde yine bir sorun yaşanmayacağının garantisi yoktur.

DRY prensibinin başarıyla uygulanması, sistemde herhangi bir değişiklik söz konusu olduğunda diğer mantıksal elemanların bu değişiklikten etkileyip etkilemeyeceğini düşünmememiz anlamına gelir. Ek olarak, ilişkili mantıksal elemanlarda da etkiler tahmin edilebilir olacağı için düzgün bir şekilde süreç ele alınacak ve değişiklikler güncel olarak yönetilebilecektir.

DRY Prensibinin Avantajları

DRY prensibinin sunduğu avantajları bir kaç alt başlık altında, özet bir şekilde ifade edebiliriz.

Sürdürülebilirlik (Maintainability)

DRY ile öne çıkan en önemli fayda tekrarlanan kodlar sebebiyle söz konusu olabilecek çakışmalar, aksamalar ve hataların önüne geçilebilmesidir. bu sayede, ilişkili bir logic işlemde ortaya çıkabilecek bir geliştirme ihtiyacı veya sorun kolaylıkla tek bir alan üzerinden çözülür.

Okunaklılık (Readability)

DRY prensibi ile yazılan bir kod çok daha kolay okunur / analiz edilir / anlaşılır. Elbette bu doğrudan DRY sayesinde değil, DRY prensibi ile kodu ele alan geliştirici sayesinde ortaya çıkan bir durumdur. Çünkü, geliştirici bu prensip doğrultusunda daha fazla çaba göstererek daha detaylı bir çözüm yolu ortaya koymalıdır.

Tekrar Kullanılabilirlik (Reuse)

DRY vurguladığı bakış açısı gereği, kod tekrarı yerine kodun tekrar kullanımını teşvik eder. Yeniden kullanılabilir kod, geliştirme süresini hızlandırdığı için maliyet avantajı sağlar.

Test Edilebilirlik (Testing)

Ne kadar çok işlem söz konusu ise o kadar fazla test kodu yazılması gerekir. Eğer, kod tekrarı söz konusu değilse bu daha az test işlemi demektir. Dolayısıyla DRY sayesinde daha etkin ve pratik test süreçleri (unit testing ve integration testing) söz konusu olacaktır.

WET (Write Everything Twice)

Write Everything Twice (WET), DRY prensibinin zıttı olarak nitelendirilebilir. “Her şeyi iki kere yaz”, “yazmaktan mutluluk duyuyoruz”, “herkesin zamanını boşa harcıyoruz” gibi ifadelerle tanımlanır.

İleri Okumalar

  1. Keep It DRY, Shy, and Tell the Other Guy [pdf]
  2. Chapter 30. Don’t Repeat Yourself
  3. Orthogonality and the DRY Principle
  4. DRY code vs. WET code
  5. Once And Only Once
  6. Don’t Repeat Yourself (DRY)
  7. The DRY Principle Explained: Its Benefit and Cost with Examples
  8. Don’t Repeat Yourself is Misunderstood
  9. Stop trying to be so DRY, instead Write Everything Twice (WET)
  10. Software Design Principles DRY and KISS

Kaynakça

  1. Don’t Repeat Yourself, @wikipedia
  2. Andy Hunt, Dave Thomas, “Pragmatic Programmer” [pdf]
  3. Dont Repeat Yourself
Ceyhun Enki Aksan

Kullanıcı Davranışları Analizi (User Behavior Analysis) ve Kullanıcı Deneyim Tasarımı (UX Design) üzerine çalışmalar yürütmekte, bu süreçte edindiğim teknik ve pratik bilgileri fayda sağlamak motivasyonuyla (afaik / as far as i know) paylaşmaktayım.

HABERDAR OL

Yeni eklenen projeler, eğitimler, içerikler ve yayınlanan videolar e-posta adresine gelsin.