Yazılım mimarisi nadiren tek bir "doğru" cevabı bulmakla ilgilidir. Belirli kısıtlar altında yapılan, dönemin bağlamı tarafından yönlendirilen bir dizi ödünleşimdir. Ancak, bir ekip yeni bir veritabanı teknolojisine geçiş yaptığında veya bir monoliti yeniden yapılandırdığında, bu seçimin ardındaki gerekçe genellikle kaybolur. Aylar sonra, yeni geliştiriciler eski kodlara bakar ve "Neden PostgreSQL yerine MongoDB'yi seçtik?" diye merak eder.
Burada Mimari Karar Kayıtları (ADR) devreye girer. Bir ADR, önemli bir mimari kararın yanı sıra bağlamını ve sonuçlarını yakalayan bir belgedir. Yazılımınızın evriminin bir geçmişini sunar ve gelecekteki bakım yapanlara sadece ne yapıldığını değil, neden yapıldığını sağlar.
Neden ADR'ler Önemlidir
Dokümantasyon olmadan, mimari bilgi topluluk içine hapsolur. Bu bilgi, şirketten ayrılabilecek kıdemli mühendislerin zihninde yaşar. ADR'ler bu bilgiyi demokratikleştirir. Takımların şunları yapmasına olanak tanır:
- Tasarımın evrimini izlemek: Sistemin zaman içinde nasıl değiştiğini anlamak.
- Karar yorgunluğunu azaltmak: Çözülmüş konuları yeniden tartışmaktan kaçınmak için geçmiş kararlara başvurmak.
- Onboarding'i (yeni personel eğitimi) iyileştirmek: Yeni ekip üyeleri teknik borcu ve tarihsel bağlamı hızlıca anlayabilir.
- Daha iyi incelemeleri kolaylaştırmak: Meslektaşlar, kişisel tercihlerden ziyade bağlama dayalı olarak kararları sorgulayabilir.
Standart ADR Formatı
Formatlar değişebilir, ancak Michael Nygard ve ADR.org tarafından popüler hale getirilen yaklaşım sağlam bir yapı sağlar. İyi bir ADR şunları içermelidir:
- Başlık: Kısa, benzersiz bir tanımlayıcı (örn. 001-postgres-kullan).
- Durum: Önerilen, Kabul Edilen, Kullanım Dışı veya Geçersiz Kılınmış.
- Bağlam: Teknik, örgütsel veya yasal kısıtlar dahil olmak üzere etkili olan itici güçler.
- Karar: Yapılan asıl değişiklik veya seçim.
- Sonuçlar: Ortaya çıkan, hem olumlu hem de olumlu olmayan ödünleşimler.
Pratik Uygulama
ADR'leri saklamak için en iyi yer, kaynak kodunuzun yanındadır; genellikle docs/adr adında bir dizinde. Bu, dokümantasyonun kodla birlikte sürüm kontrolünde tutulmasını sağlar ve dokümantasyonun geride kalmasını (drift) önler.
Markdown kullanarak bir ADR oluşturmak için aşağıdaki şablonu kullanın:
## 002-olay-kaynaklama-kabul
**Durum**: Kabul Edildi
**Tarih**: 2023-10-27
### Bağlam
Mevcut CRUD tabanlı mimarimiz denetim gereksinimleri ve mikro hizmetler arasında veri tutarlılığı konusunda zorlanıyor. Uyumluluk ve gerçek zamanlı analiz için bir iş varlığının durumundaki her değişikliği izlemek için bir yola ihtiyacımız var.
### Karar
Sipariş Yönetimi servisi için Olay Kaynaklamayı (Event Sourcing) benimseyeceğiz. Bir siparişin mevcut durumunu depolamak yerine, bir dizi olayı (örn. `SiparisOlusturuldu`, `UrunEklendi`, `SiparisGonderildi`) depolayacağız.
### Sonuçlar
* **Olumlu**: Tam denetim izi; CQRS uygulamak daha kolay; hata ayıklama için olayları yeniden oynatmayı destekler.
* **Olumsuz**: Durum yeniden yapılandırmasını işlemede artan karmaşıklık; okuma modellerinde nihai tutarlılık; ekip için öğrenme eğrisi.
Benimleme İçin En İyi Uygulamalar
ADR'lerin etkili olması için şu yönergeleri izleyin:
- Hafif tutun: Bir ADR bir özet olmalı, bir tez değil. Bir sayfadan daha fazla yazdığınızı fark ederseniz, detaylı teknik özelliklere bağlantı vermeyi düşünün.
- Proaktif olarak oluşturun: ADR'yi tasarım toplantınızda tartışın, ardından taslağını çıkarın. İşten sonra bırakmayın.
- İnceleyin: ADR'leri kod gibi muamele edin. Onları değiştiren çekme isteklerini (pull requests) inceleyin.
- Bağlantı kurun: Yeni bir ADR, eskisini geçersiz kılıyorsa, iki dosya arasında açıkça bağlantı kurun böylece soy ağacı belli olsun.
Sonuç
ADR'lerin uygulanması düşük çaba gerektiren, yüksek getirili bir uygulamadır. Yazılım mimarisini siyah bir kutudan şeffaf, öğrenilebilir bir disipline dönüştürür. Kararlarınızın bağlamını ve gerekçesini yakalayarak, ekibinizin bugün daha iyi kararlar vermesine ve yarın sisteminizi anlamasına olanak tanıyan dayanıklı bir bilgi tabanı oluşturursunuz. Küçük başlayın: yakın geçmişte yapılan büyük bir kararı seçin ve bugün bunun için bir ADR yazın.