C4 Modeli: Yazılım Mimarisini Katman Katman Çizmek
C4 modelinin ne olduğunu, bağlam, konteyner, bileşen ve kod düzeylerini, diyagramların nasıl çizildiğini ve UML'den farkını örnekle öğrenin.
C4 modeli nedir?
C4 modeli, bir yazılım sisteminin mimarisini farklı yakınlık düzeylerinde hiyerarşik diyagramlarla anlatma yaklaşımıdır. Simon Brown tarafından geliştirilmiştir. Harita benzetmesiyle anlatılır: önce ülke haritasına bakılır, sonra şehre, sokağa ve binaya yaklaşılır. Her düzey farklı bir izleyiciye ve farklı bir soruya hizmet eder.
C4 adı, düzeylerin İngilizce adlarının baş harfi olan C'lerden gelir: Context (bağlam), Containers (konteynerler), Components (bileşenler) ve Code (kod). Yaklaşım belirli bir çizim aracına ya da kesin bir gösterime bağlı değildir; kutular, oklar ve kısa açıklamalarla anlaşılır diyagramlar çizmeyi hedefler. Bu da onu ekip içi tasarım konuşmalarında ve dokümantasyonda pratik kılar.
C4 modelinin dört düzeyi
- Sistem bağlamı (Context): Sistem tek bir kutu olarak gösterilir. Çevresinde kullanıcılar ve konuştuğu diğer sistemler yer alır. Teknik olmayan paydaşlar da dahil herkesin anlayacağı düzeydir. Cevapladığı soru: sistem ne yapar, kim kullanır, hangi sistemlerle konuşur?
- Konteynerler (Container): Sistemin içine bir adım yaklaşılır. Konteyner, çalışan ve bağımsız dağıtılabilir bir birimdir: web uygulaması, API servisi, mobil uygulama, veritabanı, mesaj kuyruğu. Burada Docker konteyneri kastedilmez, daha genel bir çalışma birimi kastedilir. Seçilen teknolojiler ve konteynerlerin birbiriyle nasıl iletişim kurduğu görülür.
- Bileşenler (Component): Tek bir konteynerin içi açılır. Denetleyiciler, servis sınıfları, depo katmanı gibi mantıksal parçalar ve sorumlulukları gösterilir. Geliştiriciler ve mimarlar için önemli düzeydir.
- Kod (Code): En ayrıntılı düzeydir. Sınıf ve arayüz gibi yapılar gösterilir. Çoğunlukla elle çizilmez, araçlarla kodun kendisinden üretilir ve gerek duyulan yerlerde kullanılır.
Uygulamada ilk düzeyler birçok ekibin ihtiyacını karşılar.
C4 diyagramı nasıl çizilir?
İyi bir C4 diyagramının ortak özellikleri vardır:
- Her diyagramın bir başlığı olur ve hangi düzeyi gösterdiği yazılır.
- Her kutuda ad, tür ve kısa bir sorumluluk açıklaması bulunur. Konteyner düzeyinde teknoloji de belirtilir.
- Oklar tek yönlü olur ve üzerinde ilişkinin amacı yazar: "sipariş bilgisini gönderir", "ödemeyi doğrular" gibi.
- Renkler ve şekiller bir gösterim anahtarı (legend) ile açıklanır; anlam renge yüklenmez.
- Bir diyagramda tek bir düzey gösterilir. Konteyner diyagramına bileşen ayrıntısı karıştırılmaz.
Sistem bağlamı ve konteyner diyagramından başlayıp ihtiyaç varsa bileşen diyagramına inmek doğru sıradır. Dört düzeyin yanında yaklaşım, ek görünümler de önerir: dinamik diyagramlar belirli bir senaryodaki mesaj akışını, dağıtım diyagramları ise konteynerlerin hangi altyapıda çalıştığını gösterir.
Küçük bir örnek: çevrimiçi sipariş sistemi
Örneğin bir çevrimiçi sipariş sistemini ele alalım. Bağlam diyagramında merkezde sipariş sistemi bulunur; çevresinde müşteri, depo çalışanı, ödeme sağlayıcı ve kargo firması yer alır. Oklar müşterinin sipariş verdiğini, sistemin ödeme sağlayıcıdan onay istediğini gösterir.
Konteyner diyagramında sistemin içi açılır: müşterinin kullandığı web uygulaması, iş mantığını yürüten API servisi, siparişleri saklayan veritabanı ve olayları ileten bir mesaj kuyruğu. Her kutunun altında kullanılan teknoloji yazılıdır. Bileşen diyagramında yalnızca API servisinin içi açılır: sipariş denetleyicisi, stok kontrol servisi, ödeme entegrasyon bileşeni ve veritabanı erişim katmanı. Bu diyagramlar, yeni katılan bir geliştiriciye sistemi sunumun akışıyla anlatmak için yeterlidir.
C4 ile UML ve diğer yaklaşımların farkı
UML, nesne yönelimli tasarımı anlatan kapsamlı bir gösterim standardıdır ve çok sayıda diyagram türü içerir. C4 ise bir gösterim kuralı değil, çizimi düzenleme yaklaşımıdır: ne çizileceğini ve ne kadar yakınlaşılacağını söyler, kutu ve ok gibi basit öğeleri kullanır. Kod düzeyinde gerek duyulursa UML sınıf diyagramı bu düzey için kullanılabilir; bu yaklaşımlar birbirini dışlamaz.
Kurumsal mimari çerçeveleri iş mimarisi, veri ve altyapı gibi kurumun geneline bakar. C4 ise tek bir yazılım sisteminin yapısına odaklanır. Bu nedenle kurumsal mimari ile çakışmaz, onun altındaki ayrıntı düzeyini tamamlar.
Sık yapılan hatalar: • Tek diyagrama her şeyi sığdırmaya çalışmak. • Düzeyleri karıştırmak: bağlam diyagramında veritabanı tablosu göstermek gibi. • Diyagramı çizip güncellememek. Diyagramları kod olarak tanımlayan ve sürüm kontrolünde tutan araçlar, güncel kalmayı kolaylaştırır. • Okların anlamını belirtmemek.
Mindset kataloğundaki C4 Modeli ile Yazılım Mimarisi Görselleştirme eğitiminin modül başlıkları C4 yaklaşımı ve bağlam seviyesi, konteyner ve bileşen seviyeleri, ek görünümler ve sürdürülebilirliktir.
İlgili Mindset programı
C4 Modeli ile Yazılım Mimarisi Görselleştirme
Sık sorulan sorular
C4 modelinin adındaki C4 ne anlama gelir?
Düzeylerin İngilizce adlarının baş harfi olan C'leri ifade eder: Context, Containers, Components ve Code. Yani bağlam, konteynerler, bileşenler ve kod. Her düzey bir öncekinin içine yaklaşarak sistemi daha ayrıntılı gösterir.
C4 diyagramları için özel bir araç gerekir mi?
Gerekmez. Beyaz tahta, genel çizim araçları ya da kutu ve ok çizebilen herhangi bir uygulama yeterlidir. Diyagramları kod olarak yazıp otomatik çizen araçlar da vardır; bunların avantajı, diyagramın sürüm kontrolünde tutulabilmesi ve değişikliklerin izlenebilmesidir.
C4 modelinde konteyner Docker konteyneri midir?
Hayır. C4'te konteyner, çalışan ve bağımsız dağıtılabilir bir birimi ifade eder: web uygulaması, API servisi, veritabanı, mobil uygulama gibi. Bir Docker konteyneri bir konteyner olabilir ama kavram çalıştırma teknolojisinden bağımsızdır.
Her proje için dört düzeyin hepsi çizilmeli mi?
Hayır. Birçok ekip için bağlam ve konteyner diyagramları çok faydalıdır. Bileşen diyagramı yalnızca karmaşık ya da anlaşılması zor konteynerler için çizilir. Kod düzeyi diyagramlar nadiren elle üretilir. Önemli olan, okuyucunun ihtiyacına uygun düzeyi seçmek ve güncel tutmaktır.