31 Aralık 2020 Perşembe

Yaklaşımını Seç - WET mi DRY mi ?

    S.A. Arkadaşlar,

    Uzun süredir üzerine düşündüğüm bir konu olan bazı yaklaşımlardan bahsetmek ve bu konuda hem kendi fikirlerimi hem de konu üzerinde tartıştığımız arkadaşlarımın da fikirlerini toparlayıp paylaşmak istiyorum. Kıvılcımı çakan Osman Yavuz'a bu konuda özel bir teşekkür geçmeliyim. Birlikte bilgilerimizi paylaştığımız discord kanalımızda kendisi güzel bir soru sordu ve konu bu şekilde ortaya çıktı. Konuyu genelleştirmek gerekirse bir yazılım geliştirirken onu hangi ölçüde parçalara bölmenin doğru olacağı ile ilgiliydi. Aşağıya yazdıklarım tamamen kendi düşüncelerimdir. Bu konuda her türlü fikre açık olduğumu belirtmek isterim. Hazırsak başlayalım.

    Aslına bakıldığında soru her ne kadar react ile ilgili de olsa genel bir yazılıma yaklaşım sorusuydu. Şöyle ki, elimizde birbirine benzeyen 2 adet metodumuz var. Bu iki birbirine benzeyen metodu tek bir metod haline getirmeli miyim? Bu şekilde yapılınca de metodun öngörülemeyen bir şekilde yönetilmesi zorlaşıyor. Bu durumu sizler nasıl yönetiyorsunuz? 

     Bu konuyla ilgili fikrini belirten ve benim de cevabıyla yazı yazmama vesile olan Önder Bakırtaş'a teşekkür ederim. DRY ve WET kavramlarını yazının derinliklerine girmeden verebiliriz.

    DRY- don't repeat yourself - Çok bilinen kendini tekrar etme yönteminin asıl amacı kod tekrarını azaltmaktır.

     WET - write everything twice - DRY'a karşı ortaya çıkmış gibi gözükse de gerçekte sıkı sıkıya DRY yöntemine bağlı kalmanın gereksiz olduğunu savunmaktadır.

     Açıkçasını söylemek gerekirse WET yönteminin insanlar tarafından net anlaşılmadığını düşünüyorum. Bunun sebebi bu yöntemi tamamen yanlış olarak görmeleridir, fakat dikkatli incelediğimizde burada söylenmek istenen şey genel metodları parçalamak ve bunları birer kez kullanmanın mantıklı, fakat daha özel noktalarda bunları illa soyutlamaya gerek olmadığını savunmaktadır. Başka bir yerde kullanılacaksa oraya da "copy-paste" ile koyup gerekli değişiklikleri yapmamız gerektiğini, eğer ki bu 3.defa tekrarlanırsa işte o zaman DRY yöntemini kullanmaya başlamamızı önermektedir. 

     Öncelikle konuya kendimi fikrimi belirterek gireyim. Aynı kodu kopyalamak mı yoksa metoda bir parametre daha geçerek ona bir şekilde (if veya başka bir şekilde) 2 iş yaptırmak mı? 2 yaklaşımın avantaj ve dezavantajları muhakkak vardır. 1.yöntemde her ne kadar "copy-paste" olayına düşme ihtimali bulunsa da 2.yöntem de SOLID'ın Single Responsibility prensibine ters düşmektedir. Öncelikle bunu net bir şekilde ifade etmek faydalı olacaktır.

     Farklı bir çözüm olarak da, belki yukarıdaki 2 yöntemden daha mantıklı, 3.bir private metod yapıp her iki metod içerisinde benzer olan kodları buraya taşıyabilir ve bu şekilde hem "copy-paste" yönteminden kurtulmuş oluruz, hem de Single Responsibility prensibine de uygun şekilde kod yazmış oluruz. Bu en makul çözüm gibi gözükse de metodları çok küçük parçalara bölmenin de yönetebilme maliyeti muhakkak olacaktır.

      Benim bu konuda naçizane söyleyebileceğim bu işin net bir doğrusu olmadığıdır. Bunu da bir örnekle açıklamak gerekirse, matematikte bir konuyla ilgili 3 formül bildiğimizi varsayalım fakat hangisini nerede kullanacağımız bizim o konudaki bilgi, becerimiz ve egzersiz alışkanlığımıza bağlıdır. İşte tam da bu noktada bu tarz bir problem ile karşılaştığımızda bunu bu şekilde yönetmek en makul yöntem olacağı kanısındayım.

    Burada üzerinde durmamız gereken başka bir konu da: "Attığımız taş ürküttüğün kuşa değecek mi". Bu da başlı başına önemli bir konu olarak karşımıza çıkmaktadır. Bir işi çözebilmenin birçok yöntemi elbette mevcuttur, fakat içinde bulunduğumuz şartları en iyi kendimiz biliriz ve buna uygun bir yöntemi seçmek de çok önemlidir. Bu konu, kendisinden çok şey öğrendiğim, Uygar Manduz ile sık sık üzerinde konuştuğumuz bir konudur. Her zaman en iyi yöntem o an için en doğru yöntem olan olmayabilir. Neden mi? Biraz bir uç örnek olacak ama bir yazıda okumuştum, yanlış hatırlamıyorsam Hepsi Burada ekibinden biriydi, canlı ortamda patlayan bir kod var ve o kod için, o an bir koşul ifadesi yazılması gerekip hemen kodun canlıya alınması lazım, fakat kodu düzeltecek arkadaş bunun doğru bir yöntem olmadığını belirtiyor, takım lideri ise bu işi en hızlı şekilde çözüp tekrar bu konuya eğilebileceklerini söylüyor. Bir de konuya bu açıdan bakmanın da çok önemli bir nokta olduğunu düşünüyorum.

      Buralarda naçizane kendi fikirlerimi belirtirken bu konuyu farklı şekillerde ele alan ve fikirlerini de belirtip yazının olgunlaşmasında emeği geçen Ömer Faruk Şahin, Aras Yağmur ve İlter Köse'ye de teşekkürlerimi iletmeyi bir borç bilirim.

     Ayrıca buradaki yazıya da göz atmanızı özellikle altındaki yorumları da okumanızı tavsiye ederim. Sizin de bu konudaki düşüncelerinizi okumaktan büyük bir keyif alacağımı da belirtmek isterim.

     Yaptığımız işleri yapıp geçmekten ziyade onlara kafa yormak dileğiyle.

Hiç yorum yok:

Yorum Gönder