Geçenlerde başka bir geliştiriciyle tartışıyordum. Bir ‘yardımcı’ kütüphanesi oluşturabileceğimizi önerdi.
Çoğu şey için kitaplıklar oluşturmayı seviyorum ama bu öneri beni vazgeçirdi. Sadece yanlış geliyordu.
Bir süre önce, geliştiricilerin temelde ‘yardımcılar’ ile çıldırdığı orta ölçekli bir sistem üzerinde çalışıyordum. Onlar her yerde, her şey için vardı.
Genel olarak, programlamada herhangi bir ideali alır ve onu aşırı uç bir şekilde uygularsanız, pek iyi sonuç vermez ve bu bir istisna değildi.
Temel olarak okunabilirliği yok etti ve yardımcılardaki kod her yerde gelişigüzeldi. Bu nedenle, birçok farklı dosya ve dizine atlamadan, kodun gerçekte ne yapmaya çalıştığını anlayamazsınız. Ve daha da kötüsü, bu parçalanma oldukça önemli bazı hataları saklıyordu, yani gerçekten büyük bir karmaşaydı.
Ancak, iyi bir yazılım geliştirmenin temel fikirlerinden biri bir şeyleri parçalamak, öyleyse yardımcı festival neden bu kadar korkunç bir şekilde yanlış gitti?
Çok sayıda yeniden kullanılabilir parça oluşturmak, yavaş yavaş düşük seviyeli işlemlerden daha yüksek seviyeli alan ilkellerine geçmek istiyorsunuz. Bunu, yeni şeyler inşa etmeye gittiğinizde, çoğu zaman güvenilir bir mevcut alt şeylerden oluşan bir setten yapabilmeniz için istiyorsunuz. Parçaların çoğunu zaten yaptınız, test ettiniz ve yoğun bir şekilde kullanılıyorlar. Bu nedenle, önceki çalışmanızdan yararlanırsanız, kendinize büyük miktarda zaman kazandıracaksınız.
Ama aynı zamanda herhangi bir karmaşıklığı da kapsamanız gerekir. Eğer yapmazsan, kontrolden çıkacak.
Temel olarak, bir kutuya karmaşık bir şey yapıştırmak, onu saklamak ve sonra tekrar kullanmaya devam etmek istiyorsunuz. Belirli bir kodlama problemini çözdükten sonra, tekrar çözmek zorunda kalarak zaman kaybetmek istemezsiniz.
Kapsülleme her zaman sadece koddan daha fazlasıdır. Kutunun içine giren bazı türde bazı veriler, sabitler veya yapılandırma parametreleri de vardır. Hatta orada biraz da halin olabilir ama buna çok dikkat etmelisin. Altta yatan bazı ayrıntılar kutudan çıkmadığı sürece, en azından bir şeyi kapsüllediniz.
Bu nedenle, yeniden kullanılabilir iyi bir alt bileşen, kapsüllenmiş kod, veri ve bazı işlevleri yapmak için gereken mekaniklerdir, bu güzel bir şekilde sarılmış ve arayandan gizlenmiştir. Bunu genellikle dil kitaplıklarında görürsünüz, dize işleme genellikle iyi bir örnektir. Bir dizi bireysel karakterle uğraşırken yakalanmazsınız, bunun yerine doğrudan bir ‘string’ soyutlama kavramı üzerinde ortak işlemler yaparsınız.
Temel olarak, bir parça karmaşıklığı kaldırdınız ve onu yalnızca biraz fazladan karmaşıklık ekleyen bir kutuyla değiştirdiniz. Genel olarak, karmaşıklık daha yüksektir, ancak herhangi bir düzeyde onu düşürdünüz.
Doğru adlandırdığınız sürece yeniden kullanılabilir. Daha sonra birileri onu bulabilir, kullanabilir ve temeldeki ayrıntılarda kaybolmadan ona güvenebilir.
Çoğu insanın yardımcı yazma şekli olsa da, bunlar yalnızca bir işlevle sarılmış saf kod parçalarıdır. Gerçekten sadece insanların sıklıkla kullandığı bir deyim veya bir kod yığını. Daha çok kes ve yapıştır gibi, ancak açık kopyalar oluşturmadan.
Demek yardımcıların başı bu noktada belaya giriyor. Temel olarak, genellikle keyfi olarak seçilen ayrık kod parçalarıdır ve her ikisi de kapsüllenmedikleri ve iyi tanımlanmış ilkel olmadıkları için kodu yeniden kullanabilirsiniz, ancak genel karmaşıklık hala artmaktadır. Bir şeyleri gizlemez, gerçekten sadece yeniden yazmayı azaltır. Onu çağırarak biraz kazanırsınız, ancak özellikle daha sonra okumanız gerekirse, doğal karmaşıklığından çok daha fazlasını kaybedersiniz.
Ve önceki projede gördüğüm şey aşağı yukarı buydu. Yardımcı kod parçalarının etrafına çizilen çizgiler keyfi olduğu için okunabilirlik paramparça oldu. Aramaların ne yapacağını tahmin bile edemezsin.
Yine de bu önceki durumda, yardımcıların çoğu aynı zamanda küreleri de değiştirdi, bu yüzden yan etkiler korkutucu ve oldukça tahmin edilemezdi. Ancak bu doğru olmasa bile, yardımcılarla ilgili genel fikirler yapıştırılan kodun azaltılmasına yardımcı olabilir, ancak herhangi bir karmaşıklığı kapsamaz, bu nedenle gerçekten fazla yardımcı olmazlar.
Bu temanın bir varyasyonu, bir OO sisteminde çok sayıda statik fonksiyona sahip olmaktır. Aynı sorun, açıkça yardımcı olarak çağrılmıyor.
Muhtemelen büyük bir sistemde kodla yapabileceğiniz en kötü şey, her yerde yinelenen şeylerdir. İşlevsellik değil, hata yaratmanın bir reçetesidir. Ancak yardımcılar gibi daha zayıf bir yaklaşım kullanarak kapsüllemeden kaçınmak gerçekten daha iyi değil. Artık düzgün bir iş kodlaması yapmak için asla yeterli zaman yok, bu yüzden yaptığınız her işi saymak zorundasınız. Ne kadar çok zaman kazanırsanız, artık daha iyi bir iş yapmak için o kadar çok zamanınız olur.