सी4 मॉडल: कोड के लिए ‘गूगल मैप्स’ की तरह सॉफ्टवेयर आर्किटेक्चर को दृश्याकृत करना

“सी4 मॉडल टीमों को सॉफ्टवेयर आर्किटेक्चर को स्पष्ट, एकसमान और सही स्तर की विस्तार से समझाने में मदद करता है।”
— सिमन ब्राउन

सी4 मॉडल (संदर्भ, कंटेनर, घटक, कोड) सॉफ्टवेयर आर्किटेक्चर के दस्तावेजीकरण के लिए एक पदानुक्रमिक, ज़ूम करने योग्य ढांचा है। इसका डिज़ाइन इस तरह किया गया है कि यहडेवलपर-अनुकूलएजाइल-संगत, औरपढ़ने योग्य — भारी, स्थिर ‘बॉक्स और लाइन’ डायग्रामों से आगे बढ़ना।

यह टीमों को यह करने में सक्षम बनाता है:

  • तकनीकी और गैर-तकनीकी स्टेकहोल्डर्स के बीच आर्किटेक्चर को प्रभावी ढंग से संचारित करना।

  • एक स्थिर, संस्करण-नियंत्रित दस्तावेज़ीकरण बनाए रखना।

  • पर ध्यान केंद्रित करेंजो महत्वपूर्ण हैप्रत्येक स्तर के अबस्ट्रैक्शन पर।


🔍 सी4 मॉडल के मूल अभिन्नताएँ

The Ultimate Guide to C4 Model Visualization with Visual Paradigm's AI Tools - ArchiMetric

स्तर अवधारणा उद्देश्य
स्तर 1: संदर्भ प्रणाली और लोग प्रणाली का उपयोग कौन करता है? यह अपने वातावरण के साथ कैसे बातचीत करती है?
स्तर 2: कंटेनर डिप्लॉय करने योग्य इकाइयाँ उच्च स्तर के तकनीकी घटक क्या हैं (एप्लिकेशन, डेटाबेस, एपीआई)?
स्तर 3: घटक तार्किक समूहन कंटेनर के अंदर कार्यक्षमता की संरचना कैसे होती है?
स्तर 4: कोड (वैकल्पिक) क्लासेज, इंटरफेस, विधियाँ कार्यान्वयन विवरण — आमतौर पर IDEs द्वारा उत्पन्न किए जाते हैं।

✅ मुख्य सिद्धांतकेवल आवश्यकता होने पर ही जूम इन करें।विस्तृत शुरू करें, फिर नीचे की ओर जाएँ।


🧩 मुख्य तत्व और संबंध

तत्व विवरण उदाहरण
व्यक्ति मानव क्रियाकलाप या उपयोगकर्ता ग्राहकप्रशासकतृतीय पक्ष का API
सॉफ्टवेयर प्रणाली मूल्य प्रदान करने वाली प्रणाली इंटरनेट बैंकिंग प्रणाली
कंटेनर डिप्लॉय करने योग्य इकाई (रनटाइम या डिप्लॉय करने योग्य) वेब एप्लिकेशन, माइक्रोसर्विस, डेटाबेस, सर्वरलेस फंक्शन
घटक संबंधित कार्यक्षमता का तार्किक समूह प्राधिकरण मॉड्यूलभुगतान प्रोसेसरमेनफ्रेम फेसेड
संबंध तत्वों के बीच सरल भाषा में संबंध "उपयोग करता है""कॉल करता है""पढ़ता/लिखता है""पर निर्भर है"

💬 उपयोग करें प्राकृतिक भाषा संबंधों के लिए। “कनेक्ट करता है” जैसे अस्पष्ट शब्दों से बचें।


📊 प्लांटयूएमएल उदाहरणों के साथ सी4 मॉडल स्तर

📌 सभी उदाहरणों में उपयोग किया गया है सी4-प्लांटयूएमएल लाइब्रेरी संगतता और स्वचालन के लिए।


1. सिस्टम संदर्भ आरेख (स्तर 1)

कौन सिस्टम का उपयोग करता है? यह किन बाहरी सिस्टमों के साथ बातचीत करता है?

🎯 दर्शक: गैर-तकनीकी हितधारक, उत्पाद मालिक, निदेशक।

@startuml
!include https://static.visual-paradigm.com/plantuml-stdlib/C4-PlantUML/master/C4_Context.puml
LAYOUT_WITH_LEGEND()
title इंटरनेट बैंकिंग के लिए सिस्टम संदर्भ आरेख

Person(customer, "ग्राहक", "एक व्यक्तिगत बैंकिंग ग्राहक")
System(banking_system, "इंटरनेट बैंकिंग सिस्टम", "ग्राहकों को खातों को देखने और भुगतान करने की अनुमति देता है")
System_Ext(mainframe, "मेनफ्रेम बैंकिंग सिस्टम", "सभी मुख्य बैंकिंग डेटा संग्रहीत करता है")

Rel(customer, banking_system, "उपयोग करता है")
Rel_R(banking_system, mainframe, "खाता जानकारी प्राप्त करता है")
@enduml

✅ फोकस: परिसर और सीमाएं सिस्टम के।


2. कंटेनर आरेख (स्तर 2)

मुख्य तकनीकी घटक क्या हैं और उनकी तकनीकें क्या हैं?

🎯 दर्शक: वास्तुकार, विकासकर्ता, डेवोप्स � ingineers।

@startuml
!include https://raw.githubusercontent.com/plantuml-stdlib/C4-PlantUML/master/C4_Container.puml

Person(customer, "ग्राहक", "एक व्यक्तिगत बैंकिंग ग्राहक")
System_Boundary(c1, "इंटरनेट बैंकिंग प्रणाली") {
    Container(web_app, "वेब एप्लिकेशन", "जावा, स्प्रिंग एमवीसी", "उपयोगकर्ता को सामग्री प्रदान करता है")
    Container(api_app, "एपीआई एप्लिकेशन", "जावा, स्प्रिंग बूट", "जीसन/एचटीटीपीएस के माध्यम से कार्यक्षमता प्रदान करता है")
    ContainerDb(db, "डेटाबेस", "संबंधित डेटाबेस", "उपयोगकर्ता डेटा संग्रहीत करता है")
}

System_Ext(mainframe, "मेनफ्रेम बैंकिंग प्रणाली", "सभी मुख्य बैंकिंग डेटा संग्रहीत करता है")

Rel(customer, web_app, "उपयोग करता है", "एचटीटीपीएस")
Rel(web_app, api_app, "कॉल करता है", "जीसन/एचटीटीपीएस")
Rel(api_app, db, "पढ़ता/लिखता है", "जेडबीसी")
Rel(api_app, mainframe, "उपयोग करता है", "एक्सएमएल/एचटीटीपीएस")
@enduml

✅ फोकस: तकनीकी चयनडेप्लॉयमेंट सीमाएंडेटा प्रवाह.


3. घटक आरेख (स्तर 3)

एपीआई एप्लिकेशन का आंतरिक रूप से संरचना कैसे है?

🎯 दर्शक: विकासकर्ता, तकनीकी नेता, टीम नेता।

@startuml
!include https://static.visual-paradigm.com/plantuml-stdlib/C4-PlantUML/master/C4_Component.puml
LAYOUT_WITH_LEGEND()
title इंटरनेट बैंकिंग में एपीआई एप्लिकेशन के घटक आरेख

Container(api_app, "एपीआई एप्लिकेशन", "जावा, स्प्रिंग बूट")
ContainerDb(db, "डेटाबेस", "संबंधित डेटाबेस")
System_Ext(mainframe, "मेनफ्रेम बैंकिंग प्रणाली")

Container_Boundary(api_boundary, "एपीआई एप्लिकेशन") {
    Component(sign_in, "लॉग इन कंट्रोलर", "एमवीसी कंट्रोलर", "उपयोगकर्ताओं को लॉग इन करने की अनुमति देता है")
    Component(security, "सुरक्षा घटक", "स्प्रिंग सुरक्षा", "प्रमाणीकरण का प्रबंधन करता है")
    Component(mainframe_facade, "मेनफ्रेम फेसेड", "डीएओ", "मेनफ्रेम के साथ संचार करता है")

    Rel(sign_in, security, "उपयोग करता है")
    Rel(security, db, "पढ़ता/लिखता है")
    Rel(sign_in, mainframe_facade, "उपयोग करता है")
    Rel(mainframe_facade, mainframe, "उपयोग करता है")
}
@enduml

✅ फोकस: आंतरिक संरचनाजिम्मेदारियांनिर्भरताएं.


4. कोड आरेख (स्तर 4 – वैकल्पिक)

कार्यान्वयन विवरण: क्लासेस, इंटरफेस, विधियाँ।

🎯 दर्शक समूह: डेवलपर्स, कोड समीक्षक।

⚠️ हाथ से बनाने की सलाह नहीं दी जाती है — स्वचालित आरेखण उपकरणों का उपयोग करके IDEs (जैसे, IntelliJ, VS Code) द्वारा सबसे अच्छा बनाया जाता है।

उदाहरण (सरलीकृत):

@startuml
class SignInController {
  +signIn()
  +validateCredentials()
}

class SecurityComponent {
  +authenticate()
  +generateToken()
}

class MainframeFacade {
  +fetchAccountData()
  +sendTransaction()
}

SignInController --> SecurityComponent : उपयोग करता है
SecurityComponent --> Database : पढ़ता/लिखता है
MainframeFacade --> MainframeAPI : उपयोग करता है
@enduml

✅ सर्वोत्तम प्रथा: स्वचालित करें इस स्तर को इन उपकरणों के साथ स्वचालित करें जैसे PlantUML + IDE प्लगइन्स.


✅ सर्वोत्तम प्रथाएँ और मुख्य सिद्धांत

सिद्धांत यह क्यों महत्वपूर्ण है
पुनरावृत्तिक सुधार संदर्भ के साथ शुरू करें → विवरण केवल आवश्यकता होने पर जोड़ें। अत्यधिक दस्तावेजीकरण से बचें।
आरेख को कोड के रूप में स्टोर करें .puml फ़ाइलें Git में। संस्करण प्रबंधन, CI/CD, सहयोग और अंतर देखने की सुविधा प्रदान करता है।
एक प्रतीक सूची शामिल करें हमेशा प्रतीकों, रंगों और प्रथाओं की व्याख्या करें (उदाहरण के लिए, लाल = बाहरीनीला = आ inter nal).
संचार पर ध्यान केंद्रित करें आरेखों पर ध्यान केंद्रित करें सूचना देना, प्रभावित करने के लिए नहीं। सरलता > पूर्णता।
“सिस्टम लैंडस्केप” आरेखों का उपयोग करें संगठन के भीतर कई प्रणालियों के बीच अंतरक्रिया कैसे होती है, इसका प्रदर्शन करें।
“डायनामिक” आरेखों का उपयोग करें रनटाइम व्यवहार (उदाहरण के लिए, लॉगिन प्रवाह) दिखाने के लिए क्रमबद्ध आरेख जोड़ें।
जिम्मेदारी से सीमा निर्धारित करें एक कंपोनेंट आरेख को सीमित किया जाना चाहिए एकल कंटेनर के भीतर। कंटेनरों को मिलाएं नहीं!

🛠 उपकरण और पारिस्थितिकी तंत्र

  • PlantUML + C4-PlantUML पुस्तकालय – मुफ्त, पाठ-आधारित, संस्करण नियंत्रित।

  • विजुअल पैराडाइमलुसिडचार्टड्रॉ.आईओ – टेम्पलेट्स के माध्यम से C4 का समर्थन करें।

  • IDE प्लगइन्स – कोड से C4 आरेख स्वचालित रूप से उत्पन्न करें (उदाहरण के लिए, इंटेलजी + प्लांटयूएमएल प्लगइन)।

  • CI/CD एकीकरण – बिल्ड पाइपलाइनों के हिस्से के रूप में आरेख उत्पन्न करें।


📚 संदर्भ और अधिक पढ़ने के लिए


🎯 अंतिम विचार

C4 मॉडल पूर्ण आरेख बनाने के बारे में नहीं है — यह बात के सही स्तर पर विवरण के साथ उचित कहानी कहने के बारे में हैसही स्तर पर विवरण के साथ सही कहानी कहना.

इसका उपयोग करें:

  • नए डेवलपर्स को तेजी से शामिल करें।

  • टीमों को सिस्टम सीमाओं पर समन्वय करें।

  • जर्गन के बिना स्टेकहोल्डर्स के साथ संचार करें।

  • कोड के साथ-साथ आर्किटेक्चर दस्तावेज़ीकरण को विकसित करें।


✅ प्रो टिप: एक से शुरू करेंसिस्टम संदर्भआरेख। फिर, अपनी टीम की आवश्यकताओं के अनुसार मॉडल को बढ़ाएं — जैसे एक सड़क एक समय में नक्शा बनाना।


मुझे बताएं अगर आप चाहते हैं:

  • इस गाइड का डाउनलोड करने योग्य PDF संस्करण

  • Git में C4 आरेखों के साथ एक टेम्पलेट रिपॉजिटरी

  • कोड से C4 आरेख बनाने के लिए स्वचालन स्क्रिप्ट

  • अन्य मॉडलों के साथ तुलना (उदाहरण के लिए, 4+1 दृश्य, जैक्ज़मैन)

खुशी से आरेख बनाइए! 🖥️📘