Building Evolutionary Architectures: Support Constant Change - Kitap İncelemesi

 

Güncel hayatta günlük iş yaşamımızda sıklıkla, halihazırda var olan uygulamalara ek özellikler geliştiriyoruz. Bazen karşılaştığımız yazılımların mimarileri yeni geliştirilen özelliklerin adaptasyonunda çok zorluk çıkarıyor, bazen ise çok daha kolay bir şekilde adapte edebiliyoruz yeni özellikleri. İşte evrimleşebilir yazılım mimarisi tam da bu konu ile ilgileniyor. Yani günlük yaşamımızda sıklıkla karşımıza çıkan evrimleşen yazılımları, yeni gelecek özelliklere adaptasonunu kolaylaştırma, yazılımın hedeflediği mimari özellikleri riske atmadan yeni özellik geliştirebilmeyi, güncel teknolojiler ve güncel yazılım geliştirme pratiklerini kullanarak aktarmaya çalışıyor.

Yazılım mimarisi üzerine çok güncel ve ilginizi kitabın sonuna dek üst seviyede tutacak bir kitaba ne dersiniz ? Son yıllarda sık sık duyduğumuz ve hatta hayatımıza girmeye başlayan bu yeni trendlerin ve pratiklerin oldukça açık ve anlaşılır bir şekilde anlatıldığı bu kitabı şiddetle tavsiye ediyorum.

Aşağıda kitabı bölüm bölüm içerikleri ve benim ilgimi çeken kısımları ile kısaca özetlemeye çalıştım, umarım faydası dokunur.

1. Bölüm : Software Architecture

Bu bölüm konuya giriş mahiyetinde yazılmış, genel bilgiler vererek neden yazılım mimarileri değişikliğe uğrar, nasıl hazırlıklar yapılmalıdır ve zamanla karşılaşılacak değişikliklerin ne kadar normal ihtiyaçlar olduğu üzerine nispeten kısa bir bölüm. Yazılım geliştirirken yazılım mimarlarının, yazılım ile alakalı taleplere göre çıkardıkları karakteristik mimari özelliklerin nasıl belirlendiği ne nasıl korunduğu üzerine başlıklar içeriyor.

2. Bölüm : Fitness Functions

Benim için yeni olan bu terimi bu kitap sayesinde öğrendim. İlk bölümde bahsedilen yazılımın karakteristik özelliklerini, yazılıma zamanla yapılan değişikliklerle korunup korunmadığını test eden fonksiyonlara verilen isim fitness functions. Yazılım geliştirme süreci içerisinde continuous integration içerisine dahil edilen fonksiyonlar her değişiklikte karakteristik özelliklere yapılan etkiyi test ediyor.  Kısacası geliştirilen mimarinin, talep edilen ya da iddia edilen mimari özelliklere sahip olup olmadığını kontrol eden testlere fitness function deniyor. 

Fitness functionları açıklayan bölüm sonrasında atomik, yani tek özellik üzerine yoğunlaşan fonksiyonları ve holistik yani birden fazla özelliğe yoğunlaşıp birbirleri ile ilişkilerini test eden fonksiyonları açıklıyor. Statik / dinamik, otomatik çalışan / manuel tetiklenen ve geçici fonksiyonlar gibi pek çok kategoriye ayrılan fitness fonksiyon çeşidini açıklayarak devam ediyor bölüm.

3. Bölüm : Engineering Incremental Change

Continuous Delivery kavramını açıklayarak başlayan bölüm bu kavramın evrimleşebilir mimaride nasıl yer bulduğunu açıklıyor. Yapılancak değişikliklerin agile pratiklere de uygun olarak olabildiğince ufak yapılması ve otomatize edilmesi üzerinde duruyor. Sağlanan bir serviste yapılacak değişikliğin geriye dönük desteği nasıl sağlayabileceğini örneklendirerek çok anlaşılır bir şekilde aktarıyor.

Github'ın, sisteminde gerçekleştirdiği günde 60 kurulumu nasıl yaptığı üzerine yazılmış bölüm ve Github ekiplerinin geliştirdiği Scientist kütüphanesini tanıtan bölümler gayet güncel ve ilgi çekici. Scientist kütüphanesi, sistemde yapılan refactoring'lerin eski kodda ve yeni yazılan kodda nasıl sonuçlar verdiğini karşılaştırıp güvenle değişiklik yapmayı sağlıyor. Kendime not olarak da aldığım Scientist'in .NET port'u olan Scientist.NET gayet güzel örneklerle dökümante edilmiş açık kaynak bir kütüphane.

Ayrıca Hypothesis and Data Driven Development ve 2013 yılbaşında Facebook'un karşılaştığı inanılmaz sayıdaki fotoğraf yüklenesi ve bunların büyük bir çoğunun saldırgan olarak işaretlenmesi ile ilgili vaka, ve bunun altyapıda yarattığı yoğunluk üzerinde duruluyor. İnsanların kendi "hoş gözükmeyen" fotoğraflarını saldırgan olarak işaretlemesi eğilimi üzerine facebook ekiplerinin yaptığı çalışmalar ve bu probleme çözümleri anlatılıyor.

4. Bölüm : Architectural Coupling

Mimari açıdan uygulama modüllerinin birbirlerine referansları her zaman problem olmuştur. Modüllerin ne kadar bağlı olması gerektiği üzerine çalışmak mimarları zorlayan konulardan biri. Bu konuya ayrılmış olan 4. bölüm modülerlik ve mimari quantum'dan bahsederek konuyu monolith uygulamalara, plugin tabanlı uygulamalara, SOA, sunucusuz uygulamalara, BaaS ve FaaS ile microservislere bağlıyor. Birçok modern mimarinin anlatıldığı bölüm uzun ama oldukça zevkli ve kolay anlaşılır bir dille yazılmış.

Bu noktada yine kendime not olarak aldığım bir Channel 9'da yayınlanmış güncel bir videoyu paylaşmak istiyorum : Microservice Architecture with ASP.NET Core

5. Bölüm : Evolutionary Data

Uygulamaların olmazsa olmaz parçası veri kaynakları üzerine ayrılmış bölüm temelde veritabanlarında yapılacak değişikliklerin nasıl yönetileceği üzerine yoğunlaşmış. Veri kaynağı olarak veritabanlarını kullanan ortalama seviyedeki bir yazılım geliştiricinin sıklıkla kullandığı yöntemler üzerinde duruluyor. 

6. Bölüm : Building Evolvable Architectures

Bu bölümde eski bir uygulama nasıl evrimleşen hale getirilir, yeni geliştirilmeye başlanan bir uygulamada evrimleşen bir mimari kurabilmek için uygulanması gerekenler üzerinde duruluyor. Farklı tip uygulama mimarileri ve bunların evrimleşebilir hale getirilmesi ya da evrimleşebilirliğe ne kadar uygun oldukları açıklamalı anlatılıyor. Farklı tip mimarileri tanımak için bile okumaya değer bir bölüm. Ayrıca referans olarak eklenen kütüphanelerin evrimleşebilir bir mimari üzerindeki olası etkileri, eklenen kütüphanelere ya da bağımlı olunan frameworklere nasıl yaklaşılması gerektiği konusu inceleniyor.

7. Bölüm : Evolutionary Architecture Pitfalls and Antipatterns

Bu bölümde evrimleşebilir bir mimari tasarlarken karşılaşılabilecek tuzaklar ve kötü tasarım desenleri inceleniyor. Mesela genellikle düşülen tuzaklardan biri, geliştirilen yeni bir uygulama eğer temelde bir başka ürüne dayanıyor ise mimarinin bu ürüne göre şekillenmesinin yanlışlıklarından ve etkilerinden bahsediliyor. Ayrıca kitap genelinde sürekli referans konan The Last 10% tuzağı bu bölümde inceleniyor sonunda. Uygulama geliştirirken genellikle seçilen kütüphaneleri uygulamanın 80% - 90%'sini hızlandıracak, ya da geliştirmesini kolaylaştıracak şekilde seçiyoruz. Ama bazen kalan 10%'lik kısmın geliştirmesi ya da etkileri o kadar büyük olabiliyor ki uygulamaların başarısızlıkla sonuçlanmasına bile sebep olabiliyor. Bu tuzak, gerçek bir örnek anlatılarak inceleniyor.

Code Reuse ile alakalı oldukça aykırı fikirlerin yeraldığı bir bölüm var, benim oldukça ilgimi çekti. Üniveristeden beri şartlandığımız code reuse'un gerçek hayatta işleri ne kadar zorlanştırdığı üzerinde duruluyor. Loglama ve monitoring gibi temel mimari özellikler dışındaki kısımların kod kopyalanarak ya da yeniden yazılarak uygulamaların olabildiğince birbirinden ayrık tasarlanması üzerinde duruluyor.

Hatta yanlışlıkla yapılabilecek kod reuse'ları ve bunun sonucu oluşan bağımlıklıkları engellemek için her ayrık servis için farklı teknoloji seçimi bile yapılabileceği öneriliyor. 

8. Bölüm : Putting Evolutionary Architecture into Practice

Kitabın son bölümü gerçek hayatta evrimleşebilir bir yazılım mimarisinin nasıl hayata geçirilebileceği üzerine eğiliyor. Yazılım geliştirecek ekiplerin nasıl yapılandırılması gerektiğinden başlayıp süreçlere kadar eğiliyor.

 

Yorum ekle

Loading