logo
  • 0
Image

Pratik DDD ve Spring Modulith: Sürdürülebilir Yazılım Mimarisi-Modüler Monolotic

₺ 500.00₺ 200.00
Ürün Açıklaması
Bu kitap, şu an piyasadaki **"Mikroservis mi Monolit mi?"** kavgasına teknik ve pratik bir çözüm getirdiği için çok değerli bir kaynak olacaktır. Senior geliştiriciler teoriden çok, **"mevcut kaosu nasıl düzeltebileceklerine"** odaklanırlar.

**“Pratik DDD ve Spring Modulith: Sürdürülebilir Yazılım Mimarisi"** kitabı için detaylı bölüm ağacı (Table of Contents):

---

# Kitap: Sürdürülebilir Modüler Monolit

## Kısım 1: Temeller ve Zihniyet Değişimi
*Bu kısım, kod yazmaya başlamadan önce geliştiricinin mimari bakış açısını "Layered Architecture"dan (Controller-Service-Dao) "Domain Centric" yapıya çevirmeyi hedefler.*

**Bölüm 1: Büyük Çamur Topu (Big Ball of Mud) Sorunsalı**
* Monolitik uygulamalar neden zamanla yönetilemez hale gelir?
* "Dağıtık Monolit" (Distributed Monolith) tuzağı: Mikroservislerin yanlış uygulanması.
* Modüler Monolit nedir? Mikroservislerden farkı ve avantajları.
* Cognitive Load (Bilişsel Yük) yönetimi: Bir geliştirici tüm sistemi bilmek zorunda mı?

**Bölüm 2: Domain-Driven Design (DDD) - Pratik Bir Özet**
* Strategic Design: Bounded Context (Sınırlandırılmış Bağlam) nedir?
* Tactical Design: Aggregate, Entity, Value Object ve Domain Event kavramları.
* Ubiquitous Language (Ortak Dil): İş birimi ile aynı dili konuşmak neden önemli?
* Context Mapping: Modüller birbirleriyle nasıl ilişki kurmalı?

---

## Kısım 2: Spring Modulith ile Uygulama
*Bu kısım, kütüphanenin teknik detaylarına ve kodlama pratiklerine odaklanır.*

**Bölüm 3: Spring Modulith'e Giriş ve Yapılandırma**
* Proje iskeletini oluşturmak.
* Paket yapısı standartları: Teknik katmanlar yerine fonksiyonel paketler.
* `@Modulith` anotasyonu ve temel konfigürasyon.

**Bölüm 4: Sınırları Çizmek ve Korumak (Encapsulation)**
* Java'nın erişim belirleyicileri (public/package-private) neden yetersiz kalıyor?
* **Named Interface Pattern:** Modülün dışa açılan API'sini belirlemek.
* İçsel (Internal) sınıfları gizlemek.
* Döngüsel Bağımlılıklar (Circular Dependencies) ve onlardan kurtulma yolları.

**Bölüm 5: Mimariyi Test Etmek (Verification)**
* "Mimari, PowerPoint slaytlarında kalmamalıdır."
* `ApplicationModules.of(Main.class).verify()` ile mimariyi CI/CD pipeline'ında doğrulamak.
* İstenmeyen bağımlılıkları build aşamasında yakalamak (Fail Fast).

---

## Kısım 3: Modüller Arası İletişim (En Kritik Kısım)
*Senior geliştiricilerin en çok zorlandığı "Transaction yönetimi" ve "Veri tutarlılığı" konuları buradadır.*

**Bölüm 6: Senkron İletişim ve Servis Çağrıları**
* Bir modül diğerini ne zaman doğrudan çağırmalı?
* Dependency Injection sınırları.
* DTO (Data Transfer Object) kullanımı: Domain objelerini dışarı sızdırmamak.

**Bölüm 7: Event-Driven Mimari ve Gevşek Bağlılık**
* `ApplicationEventPublisher` ve `@ApplicationModuleListener` kullanımı.
* Senkron vs Asenkron Event işleme.
* Event Sourcing'e girmeden Event-Driven tasarım yapmak.

**Bölüm 8: Transactional Outbox ve Event Tutarlılığı**
* "Event kaybolursa ne olur?" sorunu.
* **Spring Modulith Event Publication Registry:** Out-of-the-box Outbox pattern.
* Eventlerin veritabanına kaydedilmesi ve otomatik retry mekanizmaları.
* Harici sistemlere (Kafka/RabbitMQ) güvenli mesaj iletimi.

---

## Kısım 4: Test, Dokümantasyon ve Gözlenebilirlik
*Sürdürülebilirlik için kodun kalitesi ve anlaşılabilirliği.*

**Bölüm 9: Modüler Entegrasyon Testleri**
* `@SpringBootTest` neden yavaştır ve kaçınılmalıdır?
* `@ApplicationModuleTest` ile izole modül testleri yazmak.
* Bootstrap mode: Sadece ilgili modül ağacını ayağa kaldırmak.

**Bölüm 10: Yaşayan Dokümantasyon (Living Documentation)**
* Koddan otomatik C4 Model diyagramları üretmek.
* PlantUML entegrasyonu.
* Modüller arası ilişki matrisinin (Canvas) oluşturulması.

---

## Kısım 5: Strateji ve Göç (Refactoring)
*Mevcut spagetti kodun nasıl kurtarılacağı.*

**Bölüm 11: Legacy Monolitten Modüler Yapıya Geçiş**
* Analiz: Mevcut kod tabanındaki "God Class"ları parçalama stratejileri.
* Önce test, sonra refactor: Güvenli bölge oluşturmak.
* Adım adım modül çıkarma (Extraction) teknikleri.

**Bölüm 12: Geleceğe Bakış: Modulith'ten Mikroservise**
* Bir modül ne zaman ayrı bir mikroservis olmalı? (Ölçeklenme, Ekip yapısı, Teknoloji farkı).
* Spring Modulith ile yazılmış bir modülü "kopyala-yapıştır" kolaylığında ayırıp Spring Boot servisi haline getirmek.

---

### Bu Taslağın Senior Developer İçin Değeri Nedir?
1. **Dogmatik Değil:** "Her şeyi mikroservis yap" demez, "Gerektiğinde yap, ama önce düzenle" der.
2. **Tool Odaklı Değil, Mimari Odaklı:** Spring Modulith'i anlatır ama aslında DDD prensiplerini öğretir.
3. **Gerçek Dünya Sorunları:** Transaction yönetimi (Bölüm 8) ve Legacy dönüşümü (Bölüm 11) kıdemli geliştiricilerin günlük hayatta en çok başını ağrıtan konulardır.

---

### Önsöz: Mimarinin Sarkaç Etkisi ve Kayıp Halka

Son on yılımızı, adeta bir sarkaç gibi iki uç arasında savrularak geçirdik.

Sarkacın bir ucunda, yıllar içinde devasa bir karmaşaya dönüşen, kimsenin dokunmaya cesaret edemediği, deploy etmesi saatler süren o korkutucu **Monolitler** vardı. "Spagetti kod" teriminin vücut bulmuş halleriydi. Onlardan kaçmak istedik.

Kurtuluş olarak sarkacın diğer ucuna, **Mikroservislere** koştuk. "Her şeyi bölelim," dedik. "Netflix yapıyorsa biz de yapmalıyız," dedik. Ancak bir süre sonra fark ettik ki; fiziksel sınırları ayırmak, mantıksal karmaşayı çözmüyordu. Eskiden tek bir bellek alanında (in-memory) çözdüğümüz basit problemleri, şimdi ağ gecikmeleri (network latency), dağıtık transactionlar ve nihai tutarlılık (eventual consistency) senaryolarıyla çözmeye çalışıyorduk.

Sonuç? Çoğu organizasyon için "Monolitik Cehennem"den kaçarken, "Dağıtık Monolit (Distributed Monolith)" bataklığına saplanmak oldu. Karmaşıklık yok olmamış, sadece yer değiştirmişti.

İşte bu kitap, sarkacın durması gereken o denge noktasını anlatmak için yazıldı: **Modüler Monolit.**

Yıllarca bize "Monolit kötüdür" dendi. Oysa kötü olan monolit değil, modülaritesi olmayan, sınırları ihlal edilmiş, disiplinsiz koddu. İyi bir yazılım mimarisi, kodun ayrı sunucularda çalışmasıyla değil; modüllerin birbirini ne kadar az tanıdığıyla (Loose Coupling) ve kendi işine ne kadar odaklandığıyla (High Cohesion) ölçülür.

**Neden Spring Modulith?**

Domain-Driven Design (DDD) prensiplerini yıllardır kitaplardan okuyoruz. "Bounded Context" kavramına hepimiz aşinayız. Ancak Java dünyasında, bu teorik sınırları kod seviyesinde zorlayan (enforce eden) standart bir araç eksikliği hep hissedildi. Paket yapısını kurmak yetmedi, çünkü bir `public` sınıfın yanlış yerden çağrılmasını engelleyecek bir derleyici (compiler) mekanizmamız yoktu.

Spring Modulith, işte bu "kayıp halka"dır.

Bu kitap size sadece yeni bir Spring kütüphanesini öğretmeyi amaçlamıyor. Bu kitap;
* Karmaşık iş kurallarını nasıl yöneteceğinizi,
* Sistemi dağıtmadan (distributed) önce, modüllerinizi nasıl doğru tasarlayacağınızı,
* Testlerinizi nasıl hızlandıracağınızı,
* Ve en önemlisi, **"Big Ball of Mud"**a dönüşmeyecek, sürdürülebilir bir mimariyi nasıl kuracağınızı anlatıyor.

Eğer siz de mikroservislerin operasyonel maliyeti altında ezilmeden, monolitin basitliğini ve modülerliğin disiplinini bir arada yaşamak isteyen kıdemli bir mühendisseniz, doğru yerdesiniz.

Gelin, kodumuzu tekrar kontrol altına alalım.

İyi okumalar.

Benzer Ürünler