این مدل C4, که توسط سیمون براون ایجاد شده است، روشی ساده، سلسلهمراتبی و دوستداشتنی برای توسعهدهندگان برای نمایش معماری نرمافزار است. این مدل از چهار سطح انتزاعی (که به همین دلیل «C4» نامیده میشود) برای توصیف یک سیستم از نمای کلی تا جزئیات سطح کد استفاده میکند:
- زمینه سیستم (سطح 1) – دید کلی: سیستم و کاربران یا وابستگیهای خارجی آن.
- کانتینرها (سطح 2) – انتخابهای فناوری سطح بالا و مسئولیتها.
- اجزاء (سطح 3) – بلوکهای ساختاری منطقی اصلی درون یک کانتینر.
- کد (سطح 4) – جزئیات اختیاری سطح کلاس یا ساختار کد.
این مدل توسط سه نوع دیگر از نمودارها پشتیبانی میشود:
- چشمانداز سیستم
- پویا
- نصب و راهاندازی
این مدل وابسته به نمادگذاری نیست (شما میتوانید هر ابزار نمودارسازی را استفاده کنید) و بر روی شفافیت، هماهنگی و جزئیات مناسب برای مخاطب تمرکز دارد. به دلیل جلوگیری از نمودارهای معماری پیچیده و شبیه به کره خاکستری و توانایی مقیاسپذیری از طرحهای سیاهبرد تا مستندات خودکار، بهطور گسترده مورد استفاده قرار میگیرد.
برای این مطالعه موردی هدفمند, ما از مثال استاندارد موجود در وبسایت رسمی C4 استفاده میکنیم: سیستم بانکداری اینترنتی برای شرکت فیکشنی «بیگ بانک plc». هدف کسبوکار این است که مشتریان فردی بتوانند حسابهای خود را مشاهده کنند و پرداختهای آنلاین انجام دهند در حالی که با سیستمهای اصلی بانک موجود یکپارچه شوند.
ما از هر سطح با:
- هدف و مخاطب
- عناصر کلیدی + مسئولیتها
- رابطهها
- یک نمودار C4 آمادهاستفاده نمودار PlantUML C4(PlantUML از سینتکس C4 پشتیبانی میکند و در اکثر نمایشگرهای مارکدوان به زیبایی نمایش داده میشود)
- دلیل و تصمیمات کلیدی
- چگونه این نمودار به ذینفعان کمک میکند
مرحله ۱: تعیین دامنه و ایجاد نمودار زمینه سیستم (سطح ۱)
هدف: نشان دادن اینکه سیستم بانکداری اینترنتی جدید چگونه در دنیا جای میگیرد. مخاطب: ذینفعان کسبوکار، افراد غیرفنی، اعضای جدید تیم.
عناصر (از مثال رسمی):
- مشتری بانکداری شخصی (فرد) – مشتری با یک یا چند حساب بانکی شخصی.
- سیستم بانکداری اینترنتی (سیستم نرمافزاری) – سیستم جدیدی که در حال ساخت آن هستیم.
- سیستم بانکداری اصلی (سیستم نرمافزاری، موجود) – ماشین اصلی که دادههای مشتری، حسابها و تراکنشها را مدیریت میکند.
- سیستم ایمیل (سیستم نرمافزاری، خارجی) – سرویس ایمیل ساده AWS (AWS SES) برای ارسال تأییدیهها.
رابطهها:
- مشتری → استفاده میکند از → سیستم بانکداری اینترنتی (برای مشاهده حسابها و انجام پرداختها)
- سیستم بانکداری اینترنتی → استفاده میکند از → سیستم بانکداری اصلی (برای دادههای حساب و پرداختها)
- سیستم بانکداری اینترنتی → ایمیل ارسال میکند از طریق → سیستم ایمیل
اینجا یک نمودار زمینه C4 PlantUML:

@startuml
!include https://static.visual-paradigm.com/plantuml-stdlib/C4-PlantUML/master/C4_Context.puml
LAYOUT_TOP_DOWN()
LAYOUT_WITH_LEGEND()
title نمودار زمینه سیستم (سطح ۱) برای سیستم بانکداری اینترنتی
Person(customer, "مشتری بانکداری شخصی", "مشتری با یک یا چند حساب بانکی شخصی.")
System(internet_banking_system, "سیستم بانکداری اینترنتی", "سیستم جدید برای مشاهده حسابها و انجام پرداختها.")
System(core_banking_system, "سیستم بانکداری اصلی", "ماشین اصلی موجود که دادههای مشتری، حسابها و تراکنشها را مدیریت میکند.")
System_Ext(email_system, "سیستم ایمیل", "سرویس ایمیل ساده AWS (AWS SES) برای ارسال تأییدیهها.")
Rel(customer, internet_banking_system, "استفاده میکند از")
Rel(internet_banking_system, core_banking_system, "استفاده میکند از")
Rel(internet_banking_system, email_system, "ایمیل ارسال میکند از طریق")
Lay_D(customer, internet_banking_system)
Lay_D(internet_banking_system, core_banking_system)
Lay_U(email_system, internet_banking_system)
@enduml دلیل و ارزش: این نمودار تکی بلافاصله پاسخ میدهد به «چه چیزی در حال ساخت هستیم و با چه کسانی ارتباط داریم؟» با نشان دادن صریح وابستگیهای خارجی، از گسترش دامنه جلوگیری میکند. ذینفعان کسبوکار آن را دوست دارند زیرا هنوز جزئیات فنی وجود ندارد.
مرحله ۲: نمودار کانتینر (سطح ۲)
هدف: به سیستم بانکداری اینترنتی زوم کنید و واحدهای اصلی قابل نصب/اجرا (کانتینرها) و انتخاب فناوری آنها را نشان دهید. مخاطب: مهندسان معماری، توسعهدهندگان ارشد، عملیات.
کانتینرها درون سیستم بانکداری اینترنتی:
- برنامه صفحه تکی (مرورگر اینترنت – جاوااسکریپت + آنگولار) – رابط کاربری کامل بانکداری اینترنتی.
- اپلیکیشن موبایل (دستگاه موبایل – ناتیو iOS/Android یا ریاکت نیتیو) – عملکرد محدود برای استفاده در حال حرکت.
- اپلیکیشن API (طرف سرور – جاوا + اسپرینگ بوت) – API JSON/HTTPS که توسط هر دو سمت جلویی استفاده میشود.
- پایگاه داده (پایگاه داده رابطهای – پستگریاسکیل) – دادههای جلسه، ترجیحات کاربر، خلاصههای حساب کش شده را ذخیره میکند (دادههای اصلی در مینفریم باقی میمانند).
رابطههای کلیدی (سیستمهای خارجی همانند سطح ۱):
- SPA و اپلیکیشن موبایل → تماس → اپلیکیشن API
- اپلیکیشن API ↔ پایگاه داده
- اپلیکیشن API → سیستم بانکداری اصلی و سیستم ایمیل
نمودار کانتینر C4 PlantUML:
@startuml
!include https://static.visual-paradigm.com/plantuml-stdlib/C4-PlantUML/master/C4_Container.puml
!include https://raw.githubusercontent.com/tupadr3/plantuml-icon-font-sprites/master/devicons/angular.puml
!include https://raw.githubusercontent.com/tupadr3/plantuml-icon-font-sprites/master/devicons/java.puml
!include https://raw.githubusercontent.com/tupadr3/plantuml-icon-font-sprites/master/devicons/postgresql.puml
LAYOUT_TOP_DOWN()
LAYOUT_WITH_LEGEND()
title نمودار کانتینر C4 برای سیستم بانکداری اینترنتی
Person(customer, "مشتری بانکداری شخصی", "مشتری با یک یا چند حساب بانکی شخصی.")
System_Boundary(internet_banking_system, "سیستم بانکداری اینترنتی", "سیستم جدید برای مشاهده حسابها و انجام پرداختها.") {
Container(spa, "برنامه صفحه تکی", "جاوااسکریپت + آنگولار", "رابط کاربری کامل بانکداری اینترنتی", $sprite="angular")
Container(mobile_app, "اپلیکیشن موبایل", "iOS/Android (ریاکت نیتیو)", "عملکرد محدود برای استفاده در حال حرکت", $sprite="react")
Container(api_app, "اپلیکیشن API", "جاوا + اسپرینگ بوت", "API JSON/HTTPS که توسط هر دو سمت جلویی استفاده میشود", $sprite="java")
ContainerDb(database, "پایگاه داده", "پستگریاسکیل", "دادههای جلسه، ترجیحات کاربر، خلاصههای حساب کش شده", $sprite="postgresql")
}
System(core_banking_system, "سیستم بانکداری اصلی", "مینفریم موجود که دادههای مشتری، حسابها و تراکنشها را مدیریت میکند.")
System_Ext(email_system, "سیستم ایمیل", "سرویس ساده ایمیل AWS (AWS SES) برای ارسال تأییدیهها.")
' روابط
Rel(customer, spa, "استفاده میکند از", "HTTPS")
Rel(customer, mobile_app, "استفاده میکند از", "HTTPS")
Rel(spa, api_app, "تماس میگیرد به", "JSON/HTTPS")
Rel(mobile_app, api_app, "تماس میگیرد به", "JSON/HTTPS")
Rel(api_app, database, "خواندن و نوشتن به", "JDBC/SQL")
Rel(api_app, core_banking_system, "پرس و جو / بهروزرسانی", "JSON/HTTPS")
Rel(api_app, email_system, "ارسال ایمیل از طریق", "HTTPS")
' نکات چیدمان (اختیاری – به PlantUML کمک میکند تا عناصر را بهتر چیده شود)
Lay_D(customer, internet_banking_system)
Lay_D(internet_banking_system, core_banking_system)
Lay_U(email_system, internet_banking_system)
@enduml
دلیل: ما الگوی مدرن SPA + پایهگاه API برای وب را انتخاب کردیم، اپلیکیشن موبایل ناتیو برای عملکرد، و پایگاه داده سبکوزن نگه داشتیم (بیشتر دادهها در مینفریم قدیمی زندگی میکنند). این نمودار منبع واحد واقعی برای تصمیمات فناوری سطح بالا است و به تیمهای DevOps در برنامهریزی زیرساخت کمک میکند.
مرحله ۳: نمودار مؤلفه (سطح ۳)
هدف: به یک کانتینر (معمولاً پیچیدهترین آن – اپلیکیشن API) زوم کنید و مؤلفههای منطقی اصلی آن را نشان دهید. مخاطب: تیمهای توسعه.
مثال: مؤلفههای داخل اپلیکیشن API:
- کنترلر حسابها (Spring MVC)
- کنترلر احراز هویت
- کنترلر بازنشانی رمز عبور
- اجزای امنیتی (مدیریت احراز هویت، JWT و غیره)
- اجزای مدیریت حساب (هماهنگکننده فراخوانیها به سیستم بانکی اصلی)
- اجزای اطلاعرسانی ایمیلی
نمودار جزئیات C4 PlantUML (متمرکز بر کاربرد API):

@startuml
!include https://static.visual-paradigm.com/plantuml-stdlib/C4-PlantUML/master/C4_Component.puml
LAYOUT_WITH_LEGEND()
title نمودار جزئیات سیستم بانکداری اینترنتی - کاربرد API
Container(spa, "برنامه صفحه تکی", "javascript و angular", "تمامی قابلیتهای بانکداری اینترنتی را به مشتریان از طریق مرورگر وب ارائه میدهد.")
Container(ma, "اپلیکیشن موبایل", "Xamarin", "مجموعهای محدود از قابلیتهای بانکداری اینترنتی را به مشتریان از طریق دستگاه موبایل ارائه میدهد.")
ContainerDb(db, "پایگاه داده", "ساختار پایگاه داده رابطهای", "اطلاعات ثبتنام کاربران، اعتبارات احراز هویت هششده، لاگهای دسترسی و غیره را ذخیره میکند.")
System_Ext(mbs, "سیستم بانکی اصلی", "تمامی اطلاعات بانکی اصلی مربوط به مشتریان، حسابها، تراکنشها و غیره را ذخیره میکند.")
Container_Boundary(api, "کاربرد API") {
Component(accounts, "کنترلر حسابها", "Spring MVC", "خلاصه و موجودی حسابها را به مشتریان ارائه میدهد.")
Component(auth, "کنترلر احراز هویت", "Spring MVC", "احراز هویت کاربر، مدیریت جلسه و تولید توکن را مدیریت میکند.")
Component(reset, "کنترلر بازنشانی رمز عبور", "Spring MVC", "به کاربران اجازه میدهد تا رمز عبور خود را از طریق ایمیل بازنشانی کنند.")
Component(security, "اجزای امنیتی", "Spring Bean", "احراز هویت، تولید توکن JWT و هش کردن رمز عبور را مدیریت میکند.")
Component(accountmgmt, "اجزای مدیریت حساب", "Spring Bean", "هماهنگکننده فراخوانیها به سیستم بانکی اصلی برای عملیات حسابها.")
Component(email, "اجزای اطلاعرسانی ایمیلی", "Spring Bean", "ایمیلهای بازنشانی رمز عبور و ایمیلهای تأیید حساب را از طریق SMTP ارسال میکند.")
Rel(accounts, security, "استفاده میکند")
Rel(auth, security, "استفاده میکند")
Rel(reset, security, "استفاده میکند")
Rel(accountmgmt, mbs, "استفاده میکند", "XML/HTTPS")
Rel(email, db, "خواندن", "JDBC")
}
Rel(spa, accounts, "استفاده میکند", "JSON/HTTPS")
Rel(spa, auth, "استفاده میکند", "JSON/HTTPS")
Rel(spa, reset, "استفاده میکند", "JSON/HTTPS")
Rel(ma, accounts, "استفاده میکند", "JSON/HTTPS")
Rel(ma, auth, "استفاده میکند", "JSON/HTTPS")
Rel(ma, reset, "استفاده میکند", "JSON/HTTPS")
@enduml
دلیل: این سطح نشان میدهد که مسئولیتها چگونه تقسیم میشوند (جدا سازی نگرانیها) و ورود کاربران جدید به پروژه را بسیار سریعتر میکند. شما فقط نمودارهای جزئیات را برای کانتینرها میکشید که به اندازه کافی پیچیده هستند تا این کار مفید باشد.
مرحله ۴: نمودار کد (سطح ۴) – اختیاری
هدف: نشان دادن ساختار داخلی یک جزء (نمودار کلاس، توالی و غیره). مخاطب: توسعهدهندگانی که روی این کد کار میکنند.
مثال برایکنترلر احراز هویتاجزاء – یک نمودار کلاس ساده UML در PlantUML:
@startuml
classDiagram
skinparam {
roundcorner 8
ArrowColor #444444
ArrowFontColor #444444
BorderColor #444444
Class {
BorderColor #1A237E
BackgroundColor #E8EAF6
FontColor #1A237E
}
}
class "AuthenticationController" {
+login(credentials)
+refreshToken()
}
class "JwtTokenProvider" {
+generateToken(user)
+validateToken(token)
}
class "UserRepository" {
+findByUsername()
}
AuthenticationController ..> JwtTokenProvider : "استفاده میکند"
AuthenticationController ..> UserRepository : "استفاده میکند"
@enduml
در پروژههای واقعی، اغلب سطح ۴ را نادیده میگیرید و به کد منبع واقعی ارجاع میدهید.
مرحله ۵: نمودارهای پشتیبان
نمودار پویا (مثال: جریان «مشاهده خلاصه حساب»)

@startuml
!include https://static.visual-paradigm.com/plantuml-stdlib/C4-PlantUML/master/C4_Deployment.puml
title دیاگرام پویای نمایش خلاصه حساب کاربران شخصی
Person(customer, "مشتری بانکداری شخصی") {
Container(spa, "برنامه صفحه تکی") {
Container(api, "برنامه API") {
ContainerDb(db, "پایگاه داده") {
System_Ext(coreBanking, "سیستم بانکی اصلی")
}
}
}
}
Rel(customer, spa, "1. کلیک روی 'حسابها'", "")
Rel(spa, api, "2. GET /accounts", "JSON/HTTPS")
Rel(api, db, "3. خواندن خلاصه ذخیرهشده", "")
Rel(api, coreBanking, "4. دریافت آخرین دادهها", "")
Rel(api, spa, "5. بازگرداندن JSON", "")
SHOW_LEGEND()
@enduml دیاگرام نصب (نقشهبرداری فیزیکی سطح بالا):

@startuml
!include https://static.visual-paradigm.com/plantuml-stdlib/C4-PlantUML/master/C4_Deployment.puml
title دیاگرام نصب برای سیستم بانکداری اینترنتی
Deployment_Node(aws, "Amazon Web Services", "ابر") {
Deployment_Node(ec2, "گروه خودکار مقیاسدهی EC2", "لینوکس") {
Container(api, "برنامه API", "Java Spring Boot")
}
Deployment_Node(rds, "RDS", "PostgreSQL") {
ContainerDb(db, "پایگاه داده")
}
}
Deployment_Node(customerDevice, "دستگاه مشتری", "وب/موبایل") {
Container(spa, "برنامه صفحه تکی")
Container(mobile, "اپلیکیشن موبایل")
}
System_Ext(coreBanking, "سیستم بانکی اصلی (ماشین اصلی داخلی)")
Rel(spa, api, "تماسهای API انجام میدهد به", "HTTPS")
Rel(mobile, api, "تماسهای API انجام میدهد به", "HTTPS")
Rel_U(api, spa, "تحویل به مرورگر مشتری")
Rel_U(api, mobile, "تحویل به اپلیکیشن موبایل")
SHOW_LEGEND()
@enduml
چگونه از این مطالعه موردی در عمل استفاده کنیم
- با یک کارگاه شروع کنید: متناظری را روی تخته سیاه رسم کنید.
- با استفاده از PlantUML C4 به سمت مخازن و اجزا تکرار کنید.
- دیاگرامها را در مخزن کد (به عنوان کد!) نگه دارید تا بهروز بمانند.
- مستندات زنده را به صورت خودکار تولید کنید.
این مثال دقیق سیستم بانکداری اینترنتی، مرجع رسمی ایجاد شده توسط سیمون براون است و در هزاران سازمان جهانی استفاده میشود. با دنبال کردن این مراحل، اکنون یک توصیف کامل و آماده بهرهبرداری از معماری دارید که هر کسی — از مدیرعامل تا توسعهدهنده جدید — میتواند در سطح مناسب جزئیات آن را درک کند.
مقالههای دیاگرام C4
- راهنمای نهایی برای نمایش مدل C4 با استفاده از ابزارهای هوش مصنوعی Visual Paradigm: این راهنما توضیح میدهد که چگونه از ابزارهای پشتیبانیشده توسط هوش مصنوعی برای خودکارسازی و بهبود نمایش مدل C4 برای طراحی سریعتر معماری نرمافزار استفاده کنید.
- استفاده از Studio C4 هوش مصنوعی Visual Paradigm برای مستندسازی معماری بهبودیافته: این مقاله به استفاده از یک استودیو پیشرفته هوش مصنوعی برای ایجاد مستندات معماری نرمافزار تمیز، مقیاسپذیر و قابل نگهداری میپردازد.
- راهنمای نهایی برای Studio C4-PlantUML: تحول در طراحی معماری نرمافزار: این منبع به بررسی ترکیب خودکارسازی مبتنی بر هوش مصنوعی، شفافیت مدل C4 و انعطافپذیری PlantUML در یک ابزار قدرتمند واحد میپردازد.
- راهنمای جامع برای Studio C4 PlantUML پشتیبانیشده از هوش مصنوعی Visual Paradigm: این راهنما ابزاری هدفمند را توصیف میکند که در پایان سال ۲۰۲۵ منتشر شد و پیامهای زبان طبیعی را به دیاگرامهای لایهای C4 تبدیل میکند.
- استودیو C4-PlantUML | تولیدکننده دیاگرام C4 پشتیبانیشده از هوش مصنوعی: این مرور ویژگی، ابزاری مبتنی بر هوش مصنوعی را برجسته میکند که برای تولید دیاگرامهای معماری نرمافزار C4 از توصیفهای متن ساده طراحی شده است.
- تولید و ویرایش دیاگرامهای جزء C4 با چتبات هوش مصنوعی Visual Paradigm: این آموزش نشان میدهد که چگونه از یک چتبات پشتیبانیشده از هوش مصنوعی برای ایجاد و بهبود تدریجی معماری سطح جزء برای سیستمهای پیچیده استفاده کنید.
- تولیدکننده دیاگرام C4 پشتیبانیشده از هوش مصنوعی: سطوح اصلی و دیدگاههای پشتیبان: این صفحه توضیح میدهد که چگونه تولیدکننده هوش مصنوعی از چهار سطح اصلی مدل C4 — متناظری، مخزن، جزء و نصب — پشتیبانی میکند تا مستندات جامعی ارائه دهد.
- Generator نمودار هوش مصنوعی: انتشار پشتیبانی کامل از مدل C4: این بهروزرسانی جزئیات ادغام ویژگیهای مبتنی بر هوش مصنوعی برای ایجاد خودکار نمودارهای سلسله مراتبی مدل C4 را ارائه میکند.
- Generator مدل C4 هوش مصنوعی: خودکارسازی کل چرخه مدلسازی: این منبع توضیح میدهد که چگونه یک چتبات هوش مصنوعی تخصصی از پیامهای مکالمهای برای تضمین یکدستی در مستندات معماری برای تیمهای DevOps استفاده میکند.
- بررسی جامع: چتباتهای هوش مصنوعی عمومی در برابر ابزارهای C4 شرکت Visual Paradigm: این مقایسه توضیح میدهد که چرا ابزارهای تخصصی مانند C4 PlantUML Studio نتایج ساختاریافتهتر و با کیفیت حرفهایتری نسبت به مدلهای زبانی عمومی ارائه میدهند.
This post is also available in Deutsch, English, Español, Français, English and 日本語.






