Neden sürekli yeni frameworkler çıkıyor, ReactJS neyimize yetmiyor?
Sorunu yanlış yerde aramak çözümden uzaklaşmanın en popüler yoludur.
Ön bilgi: Kariyerim boyunca şu framework’lerle çalıştım, hepsine eşit ölçüde sempati besliyorum. jQuery, AngularJS, ReactJS, VueJS, NextJS, NuxtJS, VanillaJS. Herhangi bir dil veya framework’ün fanatiği değilim.
Profesyonel olarak 5 yıldır, yarı profesyonel olarak 15 yıldır yazılımcıyım. Bu süre birçok dil ve framework’ün “hypelanıp” yok olmasını görebilmem için yeterli oldu. Frontend alanında uzmanlaştığım için ve neredeyse her gün yeni frontend framework’ü duyurulduğu için bu konuyu frontend özelinde inceleyeceğim.
Bir türlü yerleşememiş standartlar
Her çalışan o veya bu nedenle daha az yorulmak ister, kim pazartesi sabahı toplantıda “Bana daha fazla iş yükleyin” der ki?
Bu daha az yorulma arzusu her zaman negatif sonuçlar doğurmaz, hatta çalışan bu hedefe ulaşmak için adil ve kaliteli standartlar üretebiliyorsa pozitif sonuçlar bile doğurur.
Çamaşır makinası icat edilmeden önce “kirliler” herkesin hayatından önemli ölçüde zaman çalıyordu. Eminim çamaşır makinasını ilk kez bir tembel hayal etmiştir. İyi ki o tembeller var.
Yazılım, işin içindeki insanlar için bile o kadar soyut, o kadar ele avuca gelmez bir konu ki daima daha iyi standartlar icat edilmesine alan tanıyor.
Örneğin, bir side project için 3–5 yazılımcı bir araya geldiğinde, basit bir CI/CD ihtiyacı için bile onlarca farklı senaryo değerlendirilebiliyor. Hatta o anki ruh haline göre daha önce hiç yapılmamış bir CI/CD akışı icat etmek durumunda kalabiliyorlar.
Framework olmasa da olur mu
ReactJS, 11 yıl önce Facebook ürününün frontend kodlarını standardize etmek, developerları align etmek için oluşturulmuş bir library.
Çünkü bir grup developer ortak bir kod yazacaksa bunun katı kuralları olmalı, işlerin sarpa sarmasını engellemek için code review sürecinde aşırı efor harcamamak için, çerçevesi net bir library iyi bir çözümdür. Yeni ekip üyesi kod yazarken library büyük ölçüde developer’ı yönlendirmeli. İşte bu nedenle bu framework’ler çıktı. Facebook, kodların bir standart halinde kurulmasını istedi. Böylece ekibe sonradan dahil olan developer’lar göz attıkları her yeni kod dosyasında benzer bir kod yapısı görecekti.
Bir framework’ün temelde en büyük vaadi budur.
Bir değil, iki değil, üç değil
Peki bu devasa (Meta) şirketin kurduğu standartlar yeterli değil mi? Herkes o standarda uysun, böylece bir developer şirket değiştirdiğinde sonraki şirketindeki kodlara adaptasyonu çok hızlı olur. Olmaz mı?
Olamıyor.
Çünkü her şirketin bir yoğurt yiyişi, bir ReactJS kullanışı var. Biri redux’a göbekten bağlı, diğeri component’ler arası iletişimi emit prop ile yürütüyor, bir diğeri context ile… Biri global state management’e karşı, diğeri x ui library ile çalışıyor, ötekisi y ui library ile…
Yani JavaScript’in başına gelen ReactJS’in de başına geliyor, herkes kendi ReactJS tarzını yaratıyor sonra ortamlarda “ReactJS karmaşık ya, yeni çıkan x framework’ü daha iyi” yankıları yükseliyor.
Yani JavaScript’in başına gelen AngularJS’in de başına geliyor, herkes kendi AngularJS tarzını yaratıyor sonra ortamlarda “AngularJS karmaşık ya, yeni çıkan x framework’ü daha iyi” yankıları yükseliyor.
Yani JavaScript’in başına gelen VueJS’in de başına geliyor, herkes kendi VueJS tarzını yaratıyor sonra ortamlarda “VueJS karmaşık ya, yeni çıkan x framework’ü daha iyi” yankıları yükseliyor.
Yani JavaScript’in başına gelen SolidJS’in de başına geliyor, herkes kendi SolidJS tarzını yaratıyor sonra ortamlarda “SolidJS karmaşık ya, yeni çıkan x framework’ü daha iyi” yankıları yükseliyor.
Yeni çıkan daha mı iyi?
Yeni çıkan framework’ler daha “tatlı” görünüyor çünkü henüz şirketler onu kendi yoğurt yiyişlerine göre yoğurmadılar. Dokümanda (kullanım kılavuzunda) nasıl açıklanmışsa herkes öyle kullanıyor.
Evet, yeni çıkan daha iyi ama bir süre sonra, daha yeni çıkan, herhangi bir üstünlüğü bulunmasa, hiçbir yeni problemi çözmese bile daha iyi…
Yani özetle JavaScript’in başına gelen framework’lerinin de başına geliyor.
Çözüm önerisi
Öncelikle bunun başlı başına bir sorun olduğunu görmek gerekiyor. Şirketlerin sürekli framework değiştirmesi, bunla ilgili kaynak yatırımlarını güncellemesi bir sorun.
Her şirket kendine göre yoğurt yiyecekse, o zaman framework de olmasın, oturup bir JavaScript library yazılsın. Button gerektiğinde şirketin ürettiği button kullanılsın.
Custom HTML Element üretmek zannettiğiniz kadar zor değil, bu da kanıtı.
class Counter extends HTMLElement {
constructor() {
super();
// Shadow DOM oluştur
this.attachShadow({ mode: 'open' });
// Sayacı başlat
this.count = 0;
// Label oluştur
const label = document.createElement('span');
label.textContent = `Count: ${this.count}`;
label.style.margin = '0 10px';
// + ve - butonlarını oluştur
const incrementButton = document.createElement('button');
incrementButton.textContent = '+';
const decrementButton = document.createElement('button');
decrementButton.textContent = '-';
// Butonlara tıklama eventleri ekle
incrementButton.addEventListener('click', () => this.updateCount(1));
decrementButton.addEventListener('click', () => this.updateCount(-1));
// Butonları ve label'ı Shadow DOM'a ekle
this.shadowRoot.append(decrementButton, label, incrementButton);
}
// Sayacı güncelle ve label'a yansıt
updateCount(amount) {
this.count += amount;
this.shadowRoot.querySelector('span').textContent = `Count: ${this.count}`;
}
}
// Custom elementi tanımla
customElements.define('my-counter', Counter);
Bakın örnek bir Counter component’i ürettik.
Projemizde sıradan bir HTML element’i kullanır gibi kullanabiliriz.
<h1>This is a title</h1>
<my-counter></my-counter>
<p>Lorem ipsum dolor sit amet </p>
Live Demo: https://codepen.io/gayret/pen/JjgByyB
Belki şu sunum da ilginizi çeker
Özetle
Bir framework’ü kullanıyorsanız, dokümanda (kullanım kılavuzunda) tarif edildiği şekilde kullanın. Kendi kendinize yeni standartlar oluşturmayın. Kendi oluşturduğunuz standartlar tüm ihtiyaçlara yanıt veremeyeceği için bir gün gelecek başka bir framework’e geçmeniz gerekecek.
İşte hemen her gün yeni framework icat edilmesinin altında yatan en temel nedenlerden biri bu.