Kompozisyon ve Soyutlama

Şimdi çok komplike olan bir sürecin nasıl bir komut ile halledilir hale geldiğinden yani kompozisyon ve soyutlamanın nelere kadir olduğundan bahsetmek istiyorum.

Bir ürün için release ve deployment sürecini düşünün. Sürüm için bir ürüne, deployment için bir altyapıya ihtiyacınız var.

Siz sadece release.sh komutu ile bir sürüm oluşturup, deploy.sh ile bunu altyapınıza deploy ediyorsunuz.

Bu ikisi, özellikle deploy.sh komutu çok karmaşık bir yapıyı çok basit bir şekilde kullanılır hale getiriyor.

deploy.sh komutunun çalışabilmesi için bir sunucuya, onun üzerinde bir işletim sistemine, sunucuya erişmek için ssh’ya, sunucu üzerinde uygulanın çalışma ortamı ayarlarına, deployment işlemi öncesinde kimin bu işi yapabileceğine karar veren bir identity servisine (SSO; Single Sign On), tanımlı rol ve yetkilere, ürün için nginx, postgres, redis gibi altyapı komponentlerine, deployment sürecini yöneten ve hata oluşması durumunda sürümü geri alabilen (rollback) bir araca ihtiyacınız var. Burada uzatmamak için networking, security ve ölçekleme konularına girmedim bile.

Sadece deploy.sh diyebilmek için kocaman bir altyapı dünyası kurmanız gerekiyor. Deploy yapan şahsın bunların hiçbirinden haberi bile olmak zorunda değil.

Benim örneğimde önce release.sh ile bir sürüm oluşturuyorum, akabinde deploy.sh ile sunuculara bu versiyon yükleniyor ve son adımda upload.sh ile oluşan tüm sürüm dosyaları versiyonlu olarak artıfact repository’ye yükleniyor. Bu üç adımın arka arkaya atılması gerekiyor.

Yazılım geliştirme aslında büyük ölçüde kompozisyon ve soyutlama üzerine kurulu. Durum böyle ise, benim bu üç adımı tek bir adıma dönüştürmem gerekir.

Yine benim örneğimde bunun karşılığı ship.sh. Tek bir komut ve altında kocaman bir okyanusvarı bir yapı.

Buraya nasıl geldim?

Önce yapmak istediklerim hakkında bir fikrim vardı. Sonra bunu netleştirdim ve ürünü geliştirdim. Daha sonra gerekli altyapıyı kurdum. Üzerine identity servisini inşa ettim. Akabinde release, deploy ve upload mekanizmasını oturttum. Şimdi sadece ship.sh yazarak, istediğim ürünü, istediğim yere deploy ediyorum. 

Dışardan bakınca tek bir script gibi duruyor: ship.sh

Karmaşıklık ortadan kalkmadı. Organize edildi ve görünmez hale getirildi.

ship.sh sadece bir kompozisyon ve geldiğim soyutluk seviyesine işaret ediyor. Onun altında release/deploy/upload soyutlamaları vardı. Yani soyutlamalar da bir zaman sonra yeni soyutlamalar yapmak için yapı taşına dönüşüyor.

Ben bir zaman sonra şu ürünü canlıya al komutunu sesli olarak beyan edeceğim. Yapay zeka aracı ship.sh komutunu koşturacak ve bu tek cümlenin altında yüzlerce, hatta binlerce teknik işlem gerçekleşiyor olacak.

Son 30 yılda yazılımda olan gelişmeler bu prensibe dayanıyor. Karmaşıklık yok olmuyor, sadece aşağıya doğru taşınıyor.

📢 Önemli Bağlantılar
▶️ YouTube Kanalım En yeni videoları kaçırmamak için abone olun Kanalı Ziyaret Et →
📘 Yapay Zeka Çağında Yazılım Geliştirme Ücretsiz e-kitabı PDF olarak indirin ve okuyun PDF'i İndir →