مدل C4 نوتیشنی برای نمایش و مدلسازی معماری یک نرمافزار است. افراد تا قبل از معرفی این مدل، از UML که پیچیده است یا اشکالی که روی بورد یا کاغذ رسم میشدند (که فقط برای افرادی که آن را رسم میکردند و (با کمی اغراق) فقط در همان روز قابل فهم بود) استفاده میکردند. برای درک بهتر این مدل ابتدا چند مثال میزنیم.
اگر از یک مهندس عمران بخواهید که در مورد ساختمانی که ساخته یا طراحی شده است توضیح دهد، بسته به شخصی که این سوال را مطرح میکند، نقشههای متفاوت با سطح جزئیات متفاوتی نمایش خواهد داد. مثلا برای افراد عادی که دانشی راجع به ساختمان ندارند، یک نقشهی بسیار سادهی یک طبقه، شامل اتاقها، آشپزخانه و غیره را نمایش خواهد داد که قابل فهم و درک باشد. اگر برای مهندسی مانند خودش شرح دهد، احتمالا نقشهای که جزئیات بیشتری از جمله اندازهها را هم دارد، نمایش خواهد داد. به همین ترتیب برای افراد مختلف نقشههای مختلف از جمله نقشهی لولهکشی، سیمکشی، نمای خارجی و غیره که سطح جزئیات هر یک متفاوت است را نمایش خواهد داد.
اجازه دهید مثال دیگری را شرح بدهم. اگر من به شما بگویم که که شهری به اسم Vintijan وجود دارد و شما نام این شهر را در برنامهی Maps جستوجو کنید، با این صحنه مواجه خواهید شد:
هنوز نمیدانیم این شهر کجاست. پس لازم است کمی zoom out کنیم.
خیلی بیشتر . . .
تا اینکه میبینیم که Vintijanشهری در کشور کرواسی در اروپا است. پس توانستیم با zoom out کردن، لایههای
مختلفی را مشاهده کنیم. تا لایهای zoom out کردیم که بتوانیم متوجه شویم این شهر کجاست.
با این توضیحات اگر از یک معمار نرم افزار بخواهیم که معماری نرمافزاری که طراحی کرده است را شرح دهد بسته به فردی که این سوال را از وی میپرسد، میتواند با استفاده از مدل C4 لایههای مختلفی را نمایش دهد. این مدل با استفاده از چهار لایه به شرح معماری نرمافزار میپردازد و توسط Simon Brown ساخته شده است. همانطور که از اسم این مدل پیدا است چهار لایه داریم که با C شروع میشوند:
همراه با مثالی که در سایت C4 توضیح داده شده است، این چهار لایه را شرح میدهیم. این مثال در مورد سیستم بانکی اینترنتی است.
در لایهی اول یعنی System Context به نمایش ارتباط بین سیستم ما و سیستمهای دیگر و کاربران مختلف پرداخته میشود. همانطور که مشاهده میکنید، باکسی که یک سر دایرهای دارد، کاربر است. باکسهای خاکستری، سیستمهای بانکی هستند که از قبل وجود دارند. باکس آبی رنگ هم سیستم مدنظر ما میباشد.
یکی از نکات مهم این مدل توضیح دادن در باکسهای نمایش داده شده میباشد. یکی از ایرادات وارد شده به UML عدم توانایی توضیح در المنتهای استفاده شده است.
در لایهی دوم یعنی Container، سیستممدنظرمان که در لایهی قبلی نمایش دادیم را باز میکنیم و ارتباط بین Containerها به همراه سیستمها و کاربرانی که در لایهی قبلی اطرافش بودند، نمایش میدهیم. Containerها واحدهای قابل اجرا (برنامهها) مانند برنامههای وب و یا منابع ذخیرهی داده مانند دیتابیسها هستند. به این نکته توجه کنید که اینجا منظور از Container داکر نیست!
در لایهی سوم یعنی Component، یکی از Containerها را بازتر میکنیم و ارتباط اجزای آن به همراه Containerها و سیستمها و کاربران اطرافش که در لایههای قبل حضور داشتند را نمایش میدهیم. در مثال زیر اجزای برنامهی API را میبینیم که شامل مواردی مانند sign in controller که از یک component امنیتی استفاده میکند، است.
لایهی چهارم و آخر Code است که خود سازندهی این مدل استفاده از آن را توصیه نمیکند مگر برای کدهای بسیار خاص. در این لایه کد یکی از componentها را نمایش میدهیم.
در نهایت میبینیم که مدل C4 یک ساختار لایهای دارد و بسته به نیاز میتوانیم یکی از لایههای آن را انتخاب کرده و نمایش دهیم. در لایهی اول دیدیم که ارتباط بین سیستم مدنظر ما و سیستمها و کاربران دیگر را نمایش میدهیم. در لایهی بعدی روی سیستم مدنظرمان zoom in میکنیم و Containerهای موجود در آن را نمایش میدهیم. در لایهی بعدی روی یکی از Containerها zoom in میکنیم و اجزای آن را نمایش میدهیم و در لایهی آخر کد یکی از componentها را نمایش میدهیم.
برای قابل فهم بودن چنین مدلی به یک کلید/راهنما هم برای اشکال به کار برده شده داریم. لازم به ذکر است که این مدل را میتوان با هر شکل و رنگی طراحی کرد ولی دو قاعده را باید رعایت کرد. اولین مورد همراه داشتن کلید/راهنما و دومین مورد این است که طراحی به گونهای باشد که با حذف رنگها نمودار همچنان قابل فهم باشد.
ممکن است این سوال پیش بیاید که برای رسم این مدل از چه ابزاری میتوان استفاده کرد. به گفتهی سازندهی این مدل از هر ابزاری برای رسم این مدل میتوان استفاده کرد ولی استفاده نکنید! چون این ابزارها عام منظوره هستند و کارآیی که شما به دنبال آن هستید را ندارند. به همین منظور ابزاری به نام Structrizr را پایهگذاری کرده است.
نوتیشنی که در رسم این مدل در هر لایه به کار میرود هم به صورت زیر میباشد:
این مطلب، بخشی از تمرینهای درس معماری نرمافزار در دانشگاه شهیدبهشتی است.