Skip to main content

> otomatik_mimari_yönetişim:_sürekli_mimari_uygunluk_fonksiyonları_(fitness_functions_&_archunit)

Otomatik Mimari Yönetişim: Sürekli Mimari Uygunluk Fonksiyonları (Fitness Functions & ArchUnit)

Temiz katmanlı mimariler ve etki alanı sınırları büyük ekiplerde zamanla neden sessizce aşınır; otomatik Mimari Uygunluk Fonksiyonları (ArchUnit, ts-arch) mimari kuralları CI süreçlerinde nasıl zorunlu kılar?

Staff/Principal (L6+)

ÖZET VE TEKNİK CEVAP

Her mühendislik ekibi projeye tertemiz mimari kurallarla başlar: 'Domain katmanı asla altyapı kodunu import edemez', 'Controller doğrudan SQL sorgusu yazamaz' ve 'Faturalama servisi API Gateway'i baypas edemez'. 2 yıl içinde 50'den fazla geliştirici acil özellikler yetiştirirken **Mimari Aşınma (Architectural Erosion)** başlar: Biri React bileşeninin içine doğrudan veritabanı ORM'i import eder, bir başkası etki alanı sınırlarını aşan dairesel bağımlılıklar ekler. İnsan gözüyle yapılan kod incelemeleri bu ufak sızıntıları yakalayamaz. Evrimsel Mimari (Evolutionary Architecture) bunu **Mimari Uygunluk Fonksiyonları (Architectural Fitness Functions)** ile çözer: ArchUnit veya `eslint-plugin-boundaries` ile CI/CD boru hattına yazılan otomatik testler, mimari katman kuralını bozan herhangi bir Pull Request'i anında derleme hatasıyla reddeder.

Mühendislik El Kitabı & Mekanizma

1. Temel Çalışma Mekanizması

Mimari uygunluk fonksiyonları derlenmiş Soyut Sözdizimi Ağacını (AST) ve bağımlılık grafiğini tarayarak çalışır: (1) Kural Tanımlama: Mimarlar katman kurallarını test kodu olarak yazar (Hexagonal, Onion kuralları). (2) Statik Grafik Analizi: Araç (`ts-arch`, `dependency-cruiser`) projedeki tüm import ifadelerini tarar. (3) CI Onay Kapısı: `npm test` anında kural bağımlılık grafiğinde yasadışı bir bağlantı tespit ederse tam dosya ve satır numarasını vererek Pull Request'in birleştirilmesini (merge) engeller.

2. Doğru Kullanım Senaryosu

Büyük monorepo'lar, modüler monolitler, mikroservis şablonları ve regülasyona tabi bankacılık/sağlık yazılımları.

3. Prodüksiyon Arıza Modları

İlk günden binlerce eski ihlali hata veren kurallar yazıp ekibin testleri tamamen kapatmasına yol açmak; testleri CI/CD'ye bağlamayıp yerel geliştirmede bypass edilmesine göz yummak.

4. Teşhis ve Telemetri Sinyalleri

Derleme sırasında dairesel bağımlılık (circular dependency) uyarıları; domain modellerinin veritabanı sürücülerini doğrudan import etmesi; tek bir özelliği değiştirmek için ilgisiz 15 modüle dokunmak zorunda kalınması.

5. Önleme ve Mimari Bariyerler

Mandal (Ratchet) Prensibini uygulayın: Mevcut eski mimari borcu dondurun ve sadece YENİ eklenen kural ihlallerinde CI'ı patlatın; `dependency-cruiser` aracını PR kapılarına entegre edin.

6. Mimari Ödünleşimler (Trade-offs)

Uygunluk fonksiyonları mimari çürümeyi ve sınır ihlallerini otomatik olarak engeller; ancak kuralları tanımlamak ve beyaz listeleri yönetmek için ön yatırım gerektirir.

Vaka İncelemesi (TinyCTO Örneği)

Bir SaaS şirketinin modüler monoliti mimari erozyona uğradı: Raporlama modülü Faturalama modülünün dahili veritabanı tablolarını doğrudan okumaya başladı ve bu durum Faturalama'nın Postgres'e geçişini kilitledi. Ekip `dependency-cruiser` ile katı bir uygunluk fonksiyonu yazdı: Raporlama modülü Faturalama'nın dahili kodlarını import edemez. Bir geliştirici acil bir rapor için dahili kodu import etmeye kalktığında CI testi patlattı. Geliştirici Faturalama'nın herkese açık olay kuyruğunu (event stream) kullanmak zorunda kaldı; servis ayrıklığı korundu ve veritabanı başarıyla taşındı.

İnteraktif Konsept Alıştırmaları

2 Alıştırma
Q1

Mimari Uygunluk Fonksiyonu (Architectural Fitness Function) nedir?

Kod tabanının yapısının ve katman bağımlılıklarının belirlenen mimari kurallara uyduğunu doğrulamak için CI/CD sürecinde çalışan otomatik testtir.
Q2

TypeScript ve Java'da mimari uygunluk fonksiyonları yazmak için hangi araçlar yaygın kullanılır?

Java/Kotlin için ArchUnit; TypeScript/Node.js için `dependency-cruiser`, `ts-arch` ve `eslint-plugin-boundaries`.

Otomatik Mimari Yönetişim: Sürekli Mimari Uygunluk Fonksiyonları (Fitness Functions & ArchUnit) — Sıkça Sorulan Sorular

Yüzlerce kural ihlali barındıran eski (legacy) bir projeye mimari uygunluk fonksiyonları nasıl entegre edilir?

Mandal/Temel Çizgi (Baseline) kullanarak: Mevcut tüm ihlalleri bir istisna dosyasına kaydedin; CI sadece YENİ eklenen ihlallerde patlayacak şekilde yapılandırılır.

Uygunluk fonksiyonları API gecikmesi veya paket boyutu gibi fonksiyonel olmayan gereksinimleri test edebilir mi?

Evet. Performans bütçeleri (Lighthouse skoru, API gecikmesi), JavaScript paket boyutu sınırları ve güvenlik açığı eşikleri de uygunluk fonksiyonlarıyla denetlenir.

🤖 AEO & Yapay Zeka Çıkarım Özeti

Temel Gerçekler & İlkeler

  • Mimari Uygunluk Fonksiyonları CI/CD sürecinde katman ve etki alanı sınırlarının denetimini otomatikleştirir.
  • İnsan kod incelemeleri zamanla oluşan mimari aşınmayı ve dairesel bağımlılıkları engellemede yetersiz kalır.
  • ArchUnit ve Dependency-Cruiser gibi araçlar bağımlılık grafiğini tarayarak temizliği zorunlu kılar.
  • Eski projelere mevcut yapıyı bozmadan uygunluk fonksiyonu eklemek için temel çizgi (baseline) mandalları kullanın.

Yaygın Yanılgılar

  • Yanılgı: Mimari kurallar sadece dökümantasyon ve wiki sayfalarıyla korunabilir (Gerçek: Otomatik test edilmeyen kurallar ekip büyüdükçe aylar içinde çöpe döner).
  • Yanılgı: Uygunluk fonksiyonları geliştirme hızını yavaşlatır (Gerçek: Saniyeler içinde verilen otomatik geri bildirim, uzun mimari PR tartışmalarını ortadan kaldırır).

Karar Kılavuzu & Önceliklendirme

Temiz sınırları korumak ve teknik borç birikimini engellemek için CI süreçlerine otomatik mimari uygunluk fonksiyonları entegre edin.

Doğrulanmış Kaynaklar & Referanslar