5 puan yazan GN⁺ 2025-03-29 | 2 yorum | WhatsApp'ta paylaş
  • "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

 
xguru 2025-03-29

Türkçe baskısı da mevcut: Python ile Mimari Desenlere Bakış

 
GN⁺ 2025-03-29
Hacker News görüşleri
  • Bu kitap mimari desenler konusunda adeta bir altın madeni. Konuyu anlaşılır kılması hoşuma gidiyor

    • Ancak pratikte bu desenler karmaşıklık ve performans sorunları yaratabiliyor. Özellikle Django gibi zaten güçlü görüşlere sahip framework'ler kullanıldığında
    • Hem büyük hem küçük şirketlerde Python kullandım. Katı mimari desenler kullanan büyük şirketlerde kod "temiz" oluyor ama fazla karmaşık ve yavaş kalıyordu
    • Buna karşılık desenleri görmezden gelen büyük şirketlerde kod gerçekten dağınıktı ama üretkenlik yüksekti. Kod dağınık olsa da okunabiliyor, anlaşılabiliyor ve değiştirilebiliyordu
    • Belki bu biraz benimle ilgili ama ben biçimsiz kod kullanan şirketlerde daha üretkendim. Temiz kod tartışmalarından kaçınabiliyordum
  • Bu kitabın bazı bölümleri çok faydalı. Özellikle Python'a ya da belirli bir dile özgü olmayan kavramları ele aldığında

    • Ama başka kısımlarında sorunlar var. Deneyimi az geliştiriciler her şeyi aynı anda uygulamaya çalıştığında riskli olabilir
    • Örneğin repository deseni genel olarak faydalıdır ama kitabın örnekleri dahil birçok durumda sadece karmaşıklık ekler
    • Servis katmanı ve unit of work, karmaşık uygulamalarda faydalıdır ama küçük servislerden oluşan sistemlerde gereğinden fazla şişebilir
    • Tasarım desenleri de diğer araçlar gibi ne zaman kullanılıp ne zaman kullanılmayacağını anlamayı gerektirir. Kitap bu konuda tavsiye veriyor ama bunun daha fazla vurgulanması gerekirdi
  • Python'u iyi bir glue language olarak görüyorum

    • Dayatılmış OOP düşünce tarzına karşı bir uyarı. Her şeye encapsulation ve inheritance zorlamaya karşı bir uyarı
    • SOLID, temiz kodlama, temiz mimari, GoF desenleri ve Uncle Bob'a karşı bir uyarı
    • Emirsel ya da fonksiyonel akışı izleyip mümkün olduğunca az OOP kullanıyorum
    • Python kullanırken nesnelerden ve desenlerden uzak bir deneyim istiyorum
    • Bu kitabın değersiz olduğu anlamına gelmiyor. Desenleri öğrenmek için faydalı. Ama her şeyi doğrudan gerçek programlamaya uydurmaya çalışmamak gerekir
  • Ben bir Typescript geliştiricisiyim ama bu kitap en sevdiğim mimari kitaplardan biri. Sürekli dönüp bakıyorum

    • Testler için sahte unit of work / service desenini neredeyse dini bir bağlılıkla kullanıyorum. Üçüncü taraf servisleri taklit etmeye yardımcı oluyor
    • Event'leri domaine özgü şekilde adlandırmayı öneriyorum. Bu, ekip arkadaşlarına açıklaması zahmetli olan kısımları çözüyor
    • Cosmic Python'ın tamamen çevrimiçi açık olması bağlantı vermeyi kolaylaştırıyor. Genel olarak mükemmel ve ufuk açıcı bir kaynak
  • 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

    • Bir çalışma arkadaşımın önerisiyle bu kitabı aldım ve baştan sona okudum. Karmaşık Python kod tabanlarında karmaşıklığı nasıl yöneteceğimi anlamama yardımcı oldu
    • Tüm desenleri takip etmiyorum ama olasılıkları ve diğer paradigmalarla edindiğim deneyimi Python'a nasıl uygulayabileceğimi öğrendim
    • Kesinlikle tavsiye ederim. Değerli bir kitap
  • 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

    • Testlerin hazır olması, yazmasının kolay olması ve güncellemesinin kolay olması geliştirme sürecini daha keyifli hale getiriyor. Sorunları görmek için kodu elle çalıştırmaya daha az ihtiyaç duyuluyor
    • Event odaklı bölüm ilginçti ama şu anki işimde uygulamak için pratik değildi
  • 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

    • Bu tür konularla ilgileniyorsanız kesinlikle tavsiye ederim