Python ile Mimari Kalıplara Bakış
(cosmicpython.com)- "TDD with Python" yazarı Harry ve yazılım mimarı Bob'un, karmaşık yazılım mimarilerini nasıl anlayıp yönettiklerini anlattığı kitap
- E-ticaret şirketinde fiilen kullanılan mimari teknikleri derleyip paylaşıyor
MADE.com, Avrupa merkezli bir çevrimiçi mobilya satış şirketi ve küresel bir tedarik zinciri işletiyor- Amaç, lojistiği optimize ederek stoğu en aza indirmek ve lojistiğin müşteri siparişiyle aynı anda ulaşmasını koordine etmek
- Ancak gerçek dünya karmaşık ve öngörülemez olduğundan, bunu yansıtan akıllı yazılımlar kurarak otomasyon sağlıyorlar
- Bu kitap, böyle gerçek dünya problemlerini çözmek için tasarlanmış mimari kalıpları ele alıyor
Neden Python?
- Python, dünya çapında hızla büyüyen bir dil ve giderek daha karmaşık kurumsal problemlere meydan okuyor
- Mevcut mimari kitaplarının çoğu Java ya da C# tabanlı örnekler kullandığından Python kullanıcıları için erişmesi zor olabiliyor
- Bu kitap, klasik mimari kalıpları Python topluluğuna uygun bir şekilde tanıtıyor
TDD, DDD ve olay tabanlı mimariye giriş
- TDD (Test-Driven Development):
- Test odaklı geliştirme, güvenli refactoring ve yeni özellik eklemeyi mümkün kılar
- Öncelik, hızlı ve bağımlılıksız unit test'lerde olmalı; yavaş ve kırılgan end-to-end test'ler ise en aza indirilmelidir
- DDD (Domain-Driven Design):
- İş alanı modeline odaklanır, ancak altyapı ve framework bağımlılıklarını azaltmak önemlidir
- Olay tabanlı mimari:
- Mikroservisler arası mesaj tabanlı iletişimle karmaşıklığı yönetir
- Flask, Django, Celery gibi mevcut Python araçlarıyla nasıl entegre edileceğini düşünmek gerekir
Not: Bu kitapta ele alınan kalıpların çoğu monolitik mimarilere de uygulanabilir
- Bu kitabın amacı, Python'da TDD, DDD ve olay tabanlı servisleri destekleyen mimari kalıpları tanıtmak ve bunların nasıl uygulanacağını göstermektir
Bu kitabın hedef okuru
- Karmaşık Python uygulamalarıyla çalışmış geliştiriciler
- Mimari kalıplar veya DDD hakkında ön bilgi olmasa da olur
- Önce testi yazıp sonra uygulayan TDD tarzına aşina olmasanız da takip edebileceğiniz şekilde kurgulanmıştır
- Flask, SQLAlchemy, pytest, Docker, Redis gibi araçlar kullanılıyor, ancak bunlar zorunlu bilgi değil
- Amaç belirli bir teknoloji değil, teknolojiden bağımsız bir mimari tasarımdır
Öğrenilecek konuların özeti
Part 1
- Domain modelleme ve DDD (Bölüm 1, 2, 7)
- Dış bağımlılıklar olmadan domain modeli kurma yöntemi tanıtılıyor
- Hızlı unit test yazımı ve bunun veri bütünlüğüyle ilişkisi ele alınıyor
- Uygun Aggregate seçiminin nasıl yapılacağı açıklanıyor
- Repository, Service Layer, Unit of Work kalıpları (Bölüm 2, 4, 5)
- Kalıcılık katmanı soyutlanarak model dış bağımlılıklardan ayrılıyor
- Sistemin giriş noktası olarak service layer tasarımı ele alınıyor
- Flask API ya da CLI gibi ince giriş noktaları kurmak için uygun
- Test ve soyutlama üzerine değerlendirmeler (Bölüm 3, 5)
- Uygun soyutlama katmanını seçmenin ölçütleri ve rolü inceleniyor
- Daha yüksek soyutlama düzeyinde unit test yazarak test piramidini kurma yaklaşımı ele alınıyor
Part 2
- Olay tabanlı mimari (Bölüm 8–11)
- Domain Events, Message Bus, Handler kalıpları tanıtılıyor
- Sistem içi etkileşimler olaylar üzerinden tetikleniyor
- Olaylarla mikroservisler arası entegrasyonun nasıl yapılacağı açıklanıyor
- Komut (command) ile olay (event) arasındaki fark ayrıştırılıyor
- Tüm uygulama bir mesaj işleme sistemine dönüşüyor
- CQRS (Command-Query Responsibility Segregation) (Bölüm 12)
- Komut ve sorgu sorumluluklarını ayırarak yapısal verimlilik sağlama yaklaşımı tanıtılıyor
- Olay kullanımı olan ve olmayan uygulama örnekleri yer alıyor
- Bağımlılık enjeksiyonu (Bölüm 13)
- Açık ve örtük bağımlılıklar düzenleniyor
- Basit bir dependency injection framework'ü uygulanıyor
Ekler ve uygulama rehberi
- Mevcut projelere uygulama yöntemi (Epilog)
- Kalıpları mevcut sisteme uygulamak, basit örneklerden daha zordur
- Bunun için uygulama stratejileri ve başvuru kaynakları sunuluyor
- Kod alıştırmaları ve GitHub örnekleri
- Kitabın tüm içeriği tek bir örnek proje olarak sunuluyor
- Her bölüm için kod, GitHub branch'leri üzerinden veriliyor
- Çalışma yöntemi:
- Örnek uygulamayı doğrudan takip ederek geliştirmek
- Kalıpları kendi projenize uygulamayı denemek
- Her bölümdeki "Exercise for the Reader" ile pratik kod yazmak
İpucu: Her bölümün başında GitHub'daki ilgili branch'i checkout ederek, gerçekten çalışan kodla birlikte öğrenmeniz önerilir
2 yorum
Türkçe baskısı da mevcut: Python ile Mimari Desenlere Bakış
Hacker News görüşleri
Bu kitap mimari desenler konusunda adeta bir altın madeni. Konuyu anlaşılır kılması hoşuma gidiyor
Bu kitabın bazı bölümleri çok faydalı. Özellikle Python'a ya da belirli bir dile özgü olmayan kavramları ele aldığında
Python'u iyi bir glue language olarak görüyorum
Ben bir Typescript geliştiricisiyim ama bu kitap en sevdiğim mimari kitaplardan biri. Sürekli dönüp bakıyorum
Birkaç yıldır profesyonel olarak Python yazıyorum. Kotlin ve TypeScript'ten geldim; dil erişilebilir geldi ama gevşek bağlılık ve test edilebilirlik sağlamakta zorlandım
Gerçekten harika Python programlama kitaplarından biri. Koddaki statik tiplemenin olmaması biraz üzücüydü ama bu yazarın bilinçli bir tercihiydi
Bu harika kaynağı paylaştığınız için teşekkürler
Bu kitabın karton kapak baskısını 2,5 ya da 3 yıl önce okudum. Çok keyifliydi. Testleri birinci sınıf konu olarak ele alıyor ve her eklemeyle birlikte içeriği sürekli güncelliyor
Polylith'ten hiç bahsedilmemiş. Bunun ilgili olup olmadığını merak ediyorum
Bu kitap harika bir okumaydı. 3 yıl önce C#/.NET DDD ortamında çalışıyordum; şimdi bu kavramlara Python'da yeniden dönerken öz kısmı daha rafine bir şekilde görüyorum