این مدل C4, که توسط سیمون براون ایجاد شده است، روشی ساده، سلسله مراتبی و دوستدار توسعهدهندگان برای نمایش معماری نرمافزار است. این مدل از چهار سطح انتزاعی (که به همین دلیل «C4» نامیده میشود) برای توصیف یک سیستم از نمای کلی تا جزئیات سطح کد استفاده میکند:
-
زمینه سیستم (سطح 1) – دید کلی: سیستم و کاربران یا وابستگیهای خارجی آن.
-
کانتینرها (سطح 2) – انتخابهای فناوری سطح بالا و مسئولیتها.
-
اجزاء (سطح 3) – بلوکهای ساختاری منطقی اصلی درون یک کانتینر.
-
کد (سطح 4) – جزئیات اختیاری سطح کلاس یا ساختار کد.
این مدل توسط سه نوع دیگر از نمودارها حمایت میشود:
-
چشمانداز سیستم
-
پویا
-
نصب و راهاندازی
این مدل وابسته به نمادگذاری نیست (شما میتوانید هر ابزار نمودارسازی را استفاده کنید) و بر روی شفافیت، هماهنگی و جزئیات مناسب مخاطب تمرکز دارد. به دلیل جلوگیری از نمودارهای معماری «کره بزرگ خاکستری» و مقیاسپذیری از طرحهای سیاهبرد تا مستندات خودکار، به طور گسترده مورد پذیرش قرار گرفته است.
برای این مطالعه موردی هدفمند, ما از مثال استاندارد موجود در وبسایت رسمی C4 استفاده میکنیم: سیستم بانکداری اینترنتی برای شرکت فیکشنی «بیگ بانک plc». هدف کسبوکار این است که مشتریان شخصی بتوانند حسابهای خود را مشاهده کنند و پرداختهای آنلاین انجام دهند در حالی که با سیستمهای اصلی بانک موجود یکپارچه شوند.
ما از هر سطح با:
-
هدف و مخاطب
-
عناصر کلیدی + مسئولیتها
-
رابطهها
-
یک نمودار C4 آماده استفاده نمودار C4 PlantUML(PlantUML از سینتکس C4 پشتیبانی میکند و در اکثر نمایشگرهای مارکداون به زیبایی نمایش داده میشود)
-
دلیل و تصمیمات کلیدی
-
چگونه این نمودار به ذینفعان کمک میکند
مرحله ۱: تعیین محدوده و ایجاد نمودار زمینه سیستم (سطح ۱)
هدف: نشان دادن اینکه سیستم جدید بانکداری اینترنتی چگونه در دنیا جای میگیرد. مخاطب: ذینفعان کسبوکار، افراد غیرفنی، اعضای جدید تیم.
عناصر (از مثال رسمی):
-
مشتری بانکداری شخصی (فرد) – مشتری با یک یا چند حساب بانکی شخصی.
-
سیستم بانکداری اینترنتی (سیستم نرمافزاری) – سیستم جدیدی که ما در حال ساخت آن هستیم.
-
سیستم بانکداری اصلی (سیستم نرمافزاری، موجود) – ماشین اصلی که دادههای مشتری، حسابها و تراکنشها را مدیریت میکند.
-
سیستم ایمیل (سیستم نرمافزاری، خارجی) – سرویس ایمیل ساده آمازون وِب سرویس (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 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 که توسط هر دو طرف جلویی استفاده میشود.
-
پایگاه داده (پایگاه داده رابطهای – پستگریاسکیل) – دادههای جلسه، ترجیحات کاربر، خلاصههای حساب کش شده را ذخیره میکند (دادههای اصلی در سیستم اصلی باقی میمانند).
رابطههای کلیدی (سیستمهای خارجی همانند سطح 1):
-
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()
عنوان نمودار کانتینر C4 برای سیستم بانکداری اینترنتی
شخص(مشتری، “مشتری بانکداری شخصی”, “مشتری با یک یا چند حساب بانکی شخصی.”)
مرز سیستم(internet_banking_system، “سیستم بانکداری اینترنتی”, “سیستم جدید برای مشاهده حسابها و انجام پرداختها.”) {
کانتینر(spa، “برنامه صفحه تکی”, “جاوااسکریپت + آنگولار”, “رابط کاربری کامل بانکداری اینترنتی”, $sprite=”angular”)
کانتینر(mobile_app، “اپلیکیشن موبایل”, “iOS/Android (ریاکت ناتیو)”, “عملکرد محدود برای استفاده در حال حرکت”, $sprite=”react”)
کانتینر(api_app، “برنامه API”, “جاوا + اسپرینگ بوت”, “API JSON/HTTPS که توسط هر دو طرف جلویی استفاده میشود”, $sprite=”java”)
ContainerDb(database, “پایگاه داده”, “PostgreSQL”, “دادههای جلسه، ترجیحات کاربر، خلاصههای حساب ذخیرهشده”, $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 در برنامهریزی زیرساخت کمک میکند.
مرحله 3: نمودار مؤلفهها (سطح 3)
هدف: به یک کانتینر (معمولاً پیچیدهترین آن – برنامه 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
nmudarDiagram
skinparam {
گوشههای گرد ۸
رنگ پیکان #444444
رنگ فونت پیکان #444444
رنگ حاشیه #444444
کلاس {
رنگ حاشیه #1A237E
رنگ پسزمینه #E8EAF6
رنگ فونت #1A237E
}
}
کلاس “کنترلر احراز هویت” {
+ورود(credentials)
+تجدید توکن()
}
کلاس “ارائهدهنده توکن JWT” {
+تولید توکن(user)
+validateToken(token)
}
کلاس “UserRepository” {
+findByUsername()
}
AuthenticationController ..> JwtTokenProvider : “uses”
AuthenticationController ..> UserRepository : “uses”
@enduml
در پروژههای واقعی اغلب سطح ۴ را نادیده میگیرید و به کد منبع واقعی اشاره میکنید.
مرحله ۵: نمودارهای پشتیبان
نمودار پویا (مثال: جریان “مشاهده خلاصه حساب”)

@startuml
!include https://static.visual-paradigm.com/plantuml-stdlib/C4-PlantUML/master/C4_Deployment.puml
عنوان نمودار پویا برای مشاهده خلاصه حساب
شخص(customer, “مشتری بانکداری شخصی”) {
کانتینر(spa, “برنامه صفحه تکی”) {
کانتینر(api, “برنامه API”) {
کانتینرDb(db, “پایگاه داده”) {
سیستم_خارجی(coreBanking, “سیستم بانکداری اصلی”)
}
}
}
}
ارتباط(customer, spa, “۱. کلیک روی ‘حسابها’”, “”)
ارتباط(spa, api, “۲. GET /accounts”, “JSON/HTTPS”)
ارتباط(api, db, “۳. خواندن خلاصه کش شده”, “”)
ارتباط(api, coreBanking, “۴. دریافت آخرین دادهها”, “”)
ارتباط(api, spa, “۵. بازگرداندن JSON”, “”)
نمایش_ légenda()
@enduml
نمودار انتقال (نقشهبرداری فیزیکی سطح بالا):

@startuml
!include https://static.visual-paradigm.com/plantuml-stdlib/C4-PlantUML/master/C4_Deployment.puml
عنوان نمودار انتقال برای سیستم بانکداری اینترنتی
گره_انتقال(aws, “Amazon Web Services”, “ابر”) {
گره_انتقال(ec2, “گروه خودکار مقیاسدهی EC2”, “لینوکس”) {
کانتینر(api, “برنامه API”, “Java Spring Boot”)
}
گره_انتقال(rds, “RDS”, “PostgreSQL”) {
کانتینرDB(db, “پایگاه داده”)
}
}
گره_انتقال(customerDevice, “دستگاه مشتری”, “وب/موبایل”) {
کانتینر(spa, “برنامه صفحه تکی”)
کانتینر(mobile, “اپلیکیشن موبایل”)
}
سیستم_بیرونی(coreBanking, “سیستم بانکداری اصلی (ماشین اصلی داخلی)”)
ارتباط(spa, api, “تماس API انجام میدهد به”, “HTTPS”)
ارتباط(mobile, api, “تماس API انجام میدهد به”, “HTTPS”)
ارتباط_مخصوص(api, spa, “تحویل به مرورگر وب مشتری”)
ارتباط_مخصوص(api, mobile, “تحویل به اپلیکیشن موبایل”)
نمایش_ légend()
@enduml
چگونه از این مطالعه موردی در عمل استفاده کنیم
-
با یک کارگاه شروع کنید: متناظری را روی تخته سیاه رسم کنید.
-
با استفاده از PlantUML C4 به کانتینرها و اجزای مختلف بروید.
-
نمودارها را در مخزن کد (به عنوان کد!) نگه دارید تا بهروز بمانند.
-
مستندات زنده را به صورت خودکار تولید کنید.
این مثال دقیق سیستم بانکداری اینترنتی، مرجع رسمی است که توسط سیمون براون ایجاد شده و در هزاران سازمان جهانی استفاده میشود. با دنبال کردن این مراحل، اکنون یک توصیف معماری کامل و آماده بهرهبرداری دارید که هر کسی—از مدیرعامل تا توسعهدهنده جوان جدید—میتواند در سطح مناسب جزئیات آن را درک کند.
مقالههای نمودار C4
- راهنمای نهایی برای نمایش مدل C4 با استفاده از ابزارهای هوش مصنوعی ویژوال پارادایم: این راهنما توضیح میدهد که چگونه میتوان از ابزارهای مبتنی بر هوش مصنوعی برای خودکارسازی و بهبود نمایش مدل C4 برای طراحی سریعتر معماری نرمافزار استفاده کرد.
- استفاده از استودیو C4 هوش مصنوعی ویژوال پارادایم برای مستندسازی معماری بهینهشده: این مقاله به استفاده از یک استودیو بهبودیافته با هوش مصنوعی برای ایجاد مستندات معماری نرمافزار تمیز، مقیاسپذیر و قابل نگهداری میپردازد.
- راهنمای نهایی برای استودیو C4-PlantUML: تحول در طراحی معماری نرمافزار: این منبع به ترکیب خودکارسازی مبتنی بر هوش مصنوعی، شفافیت مدل C4 و انعطافپذیری PlantUML در یک ابزار قدرتمند تکیه میکند.
- راهنمای جامع استودیو C4 PlantUML مجهز به هوش مصنوعی ویژوال پارادایم: این راهنما ابزاری هدفمند را توصیف میکند که در اوایل سال ۲۰۲۵ عرضه شده و پیامدهای زبان طبیعی را به نمودارهای لایهای C4 تبدیل میکند.
- استودیو C4-PlantUML | تولیدکننده نمودار C4 مجهز به هوش مصنوعی: این مرور ویژگیها ابزاری مبتنی بر هوش مصنوعی را برجسته میکند که برای تولید نمودارهای معماری نرمافزار C4 از توضیحات متن ساده طراحی شده است.
- ایجاد و ویرایش نمودارهای مؤلفه C4 با کاربرد چتبات هوش مصنوعی ویژوال پارادایم: این آموزش نشان میدهد که چگونه میتوان از یک چتبات مجهز به هوش مصنوعی برای ایجاد و بهبود تدریجی معماری سطح مؤلفه در سیستمهای پیچیده استفاده کرد.
- تولیدکننده نمودار C4 مجهز به هوش مصنوعی: سطوح اصلی و دیدگاههای پشتیبان: این صفحه توضیح میدهد که چگونه تولیدکننده هوش مصنوعی از چهار سطح اصلی مدل C4—وضعیت، ظرف، مؤلفه و اجرا—پشتیبانی میکند تا مستندات جامعی ارائه دهد.
- تولیدکننده نمودار هوش مصنوعی: انتشار پشتیبانی کامل از مدل C4: این بهروزرسانی جزئیات ادغام ویژگیهای مبتنی بر هوش مصنوعی برای ایجاد خودکار نمودارهای سلسله مراتبی مدل C4 را ارائه میدهد.
- تولیدکننده هوش مصنوعی مدل C4: خودکارسازی کل چرخه مدلسازی: این منبع تأکید میکند که چگونه یک چتبات هوش مصنوعی تخصصی از پیامدهای مکالمهای برای تضمین یکدستی در مستندات معماری برای تیمهای DevOps استفاده میکند.
- بررسی جامع: چتباتهای هوش مصنوعی عمومی در برابر ابزارهای C4 ویژوال پارادایم: این مقایسه توضیح میدهد که چرا ابزارهای تخصصی مانند استودیو C4-PlantUML نتایج ساختاریتر و با کیفیت حرفهایتری نسبت به مدلهای زبانی عمومی ارائه میدهند.
This post is also available in Deutsch, English, Español, Français, English, Bahasa Indonesia, 日本語, Polski, Portuguese, Ру́сский, Việt Nam, 简体中文 and 繁體中文.













