C4 model: seviyeler, elemanlar ve ArqAtlas'taki karşılığı
C4 modelin amacı
Yazılım mimarisini anlatmanın en yaygın yollarından biri, herkesin kendi kutu-ok gösterimini kullandığı, birbirini tutmayan diyagramlardır. C4 model, Simon Brown'ın geliştirdiği; öğrenmesi kolay, geliştirici dostu bir yazılım mimarisi diyagramlama yaklaşımıdır (c4model.com).
Amacı, bir sistemi az sayıda kavramla ve farklı yakınlık seviyelerinde anlatmaktır: aynı elemanlar, farklı "zoom" seviyelerinde farklı kitlelere farklı hikâyeler anlatır. Teknik olmayan bir paydaşa genel resmi, bir geliştiriciye teknoloji detaylarını aynı modelden gösterebilirsiniz.
Bu ihtiyaç yeni değil: diyagramlar bir çizim aracında, dokümanlar ayrı bir wiki'de, kararlar ayrı bir klasörde tutulduğunda hiçbiri birbirinden haberdar olmaz ve bir servis yeniden adlandırıldığında her kopyanın elle güncellenmesi gerekir. C4 model bu soruna ortak bir gösterim standardı önerir; ArqAtlas ise bunu bir adım öteye taşıyıp gösterimin arkasındaki veriyi de tek bir modelde birleştirir.
Dört seviye: System Context, Container, Component, Code
C4 model adını, dört temel statik yapı diyagramından alır: System Context, Container, Component ve Code (c4model.com/diagrams). System Context diyagramı bir mimariyi dokümante etmeye başlamanın iyi bir yoludur: sisteminizi merkeze koyar, onu kullanan kişileri ve etkileşimde olduğu diğer sistemleri gösterir; teknik detay içermez ve teknik olmayan bir kitleye de sunulabilir (c4model.com/diagrams/system-context).
Container diyagramı bir seviye aşağı iner ve sistemin yüksek seviyeli şeklini, sorumlulukların dağılımını, temel teknoloji seçimlerini ve container'ların birbiriyle nasıl konuştuğunu gösterir. C4'te container terimi bir uygulama ya da veri deposu anlamına gelir: sunucu tarafı bir web uygulaması, tek sayfa bir istemci uygulaması, bir masaüstü ya da mobil uygulama, bir veritabanı şeması gibi (c4model.com/diagrams/container).
Component diyagramı bir container'ı açar ve içindeki bileşenleri, sorumluluklarını ve teknoloji/implementasyon detaylarını gösterir; hedef kitlesi mimarlar ve geliştiricilerdir (c4model.com/diagrams/component). Code diyagramı ise bir bileşenin sınıf ya da varlık düzeyinde nasıl uygulandığını gösterir; c4model.com bunu uzun ömürlü dokümantasyon için özellikle önermez, çünkü çoğu IDE bu detayı istendiğinde zaten üretebilir (c4model.com/diagrams/code).
c4model.com'un da belirttiği gibi component diyagramları yalnızca değer kattığında, ve mümkünse otomasyonla, oluşturulur (c4model.com/diagrams/component); code diyagramı ise isteğe bağlı bir detay seviyesidir ve çoğu zaman IDE gibi araçlardan istendiğinde elde edilebilir (c4model.com/diagrams/code).
Eleman türleri: Person, Software System, Container, Component
C4 modelin küçük bir eleman kümesi vardır ve bu, modeli öğrenmeyi kolaylaştırır (c4model.com/abstractions). Person, bir sistemle etkileşen kişiyi temsil eder: bir kullanıcı rolü, bir persona ya da adlandırılmış biri olabilir. Software System en üst seviyedeki yapıdır ve bir ya da daha fazla container'dan oluşur; her container bir ya da daha fazla component içerir, component'ler de kod elemanlarıyla uygulanır (c4model.com/abstractions).
ArqAtlas bu temel türlere iki eleman daha ekler: Data Store ve Queue. Bunlar C4'ün container kavramının somut örnekleridir; bir veritabanı ya da bir mesaj kuyruğu, mimaride kendi sorumluluğu olan birer container'dır. Ayrıca, sınırlarınızın dışındaki sistemleri işaretlemek için External System türü kullanılır; bu, C4'te harici (dış) bir Software System'in ArqAtlas'taki karşılığıdır. ArqAtlas'ta bir eleman oluştururken Person, Software System, Container, Component, Data Store, Queue ve External System türlerinden birini seçersiniz.
Elemanlar birbirine yönlü ilişkilerle bağlanır; her ilişkiye bir açıklama ve varsa kullanılan teknoloji ya da protokol eklenir. Elemanlar ayrıca hiyerarşiktir: bir Software System bir ya da daha fazla Container'a, bir Container bir ya da daha fazla Component'e ayrılabilir; bu hiyerarşi, çift tıklayarak bir seviye aşağı inmenizi mümkün kılan yapıdır.
Görünüm (view) ile model arasındaki fark
C4'te model ile diyagram (görünüm) farklı şeylerdir. Model, elemanları ve aralarındaki ilişkileri tutan tek doğruluk kaynağıdır. Görünüm ise modelin belirli bir kapsamını ve seviyesini gösteren bir kesittir; kendi verisini taşımaz, modelden seçtiği elemanları ve bunların yerleşimini tutar.
Bu ayrım pratikte şunu sağlar: aynı eleman, örneğin bir Order Service, hem bir Container görünümünde hem üç ayrı dokümana gömülü bir Component görünümünde yer alabilir. Elemanın adını bir kez değiştirdiğinizde onu gösteren her görünüm güncel kalır; çünkü hiçbiri kendi kopyasını tutmaz, hepsi aynı modele bakar.
ArqAtlas'ta bu ayrım Model Gezgini panelinde de görünür: panel modeldeki tüm elemanları, görünümlerden bağımsız olarak listeler. Bir elemanı Model Gezgini'nden seçip hangi görünümlerde, hangi dokümanlarda ve hangi kararlarda kullanıldığını görebilirsiniz.
Aynı ayrım, bir elemanı görünümden kaldırmakla modelden silmek arasındaki farkta da karşınıza çıkar: bir elemanı bir görünümden çıkarmak yalnızca o görünümü etkiler, elemanın kendisini ya da onu gösteren diğer görünümleri değiştirmez. Elemanı modelden silmek ise ayrı bir işlemdir ve önce onu kullanan görünümler, dokümanlar ve ADR'ler listelenip onayınız istenir.
ArqAtlas'ta C4 modeli
ArqAtlas, C4 modelini bu model/görünüm ayrımının üstüne kurulu bir ürün olarak uygular.
Model bir kez, görünümler türetilir
Bir System Context, Container ya da Component görünümü oluşturduğunuzda modele yeni bir kopya eklemezsiniz; var olan elemanları seçer, aralarındaki ilişkileri gösterirsiniz. Bir elemana çift tıklayıp bir alt seviyeye inebilir, System Context'ten Container'a, oradan Component'e geçebilirsiniz.
DSL ve görsel editör senkron çalışır
Modeli metin olarak (DSL) ya da görsel editörle düzenleyebilirsiniz; ikisi aynı modeli besler ve çift yönlü senkron kalır. Metindeki bir hata satır ve sütun numarasıyla işaretlenir; geçersiz metin modele hiç uygulanmaz.
Dokümana gömülü görünümler canlıdır
Markdown dokümanlarınıza bir görünümü gömdüğünüzde bu bir ekran görüntüsü değildir, modelin kendisidir. Model değiştikçe dokümandaki görünüm de güncellenir.
Mimari kararlar elemana bağlanır
Bir ADR yazıp onu etkilediği elemanlara bağlayabilirsiniz; o elemana tıklayan herkes, elemanın detay panelinde bu kararı görür.
Silmeden önce nerede kullanıldığını görürsünüz
Bir elemanı silmek istediğinizde, onu kullanan görünümler, dokümanlar ve ADR'ler listelenir; onay vermeden hiçbir şey silinmez.
Sonuç
C4 model, bir mimariyi az sayıda kavramla ve farklı yakınlık seviyelerinde anlatmanın bir yoludur. ArqAtlas bu yolu tek bir modelden besleyerek uygular; böylece diyagram, doküman ve karar birbirinden kopmaz. Kendi sisteminizin System Context görünümünü kurmak için bir hesap açmanız yeterli.