علیرضا حیدری | Alireza Heydari
علیرضا حیدری | Alireza Heydari
خواندن ۳ دقیقه·۳ سال پیش

چهار عدد C جهت نمایش بی‌نهایت! - توضیح مدل C4

احتمالا اگر دستی بر مهندسی نرم‌افزار داشته باشید با نمودارهای متنوعی جهت نمایش سیستم آشنایی دارید. یکی از نمودار‌هایی که جهت توصیف یک سیستم استفاده می‌شود نمودار UML است. تعریف آن را می‌توان به صورت زیر ارائه داد:
زبان مدل سازی یکپارچه (UML) یک زبان همه منظوره، توسعه ای و مدل سازی در زمینه مهندسی نرم افزار است.

نمونه‌ای از UML
نمونه‌ای از UML

این نمودار با کمک زبان خاصی که دارد جزئیات سیستم را نمایش می‌دهد. با کمک این جزئیات می‌توان اهداف و توانایی‌های سیستم را به افرادی که با جزئیات پروژه آشنا نیستند به اشتراک گذاشت.

اما مشکلی که این نوع از نمایش دارد کم نیست! این زبان جزئیات زیادی را در سطح کامپوننت ارائه می‌دهد و همچنین دید کلی‌ای را شامل نمی‌شود. همچنین زمان زیادی جهت بیان جزئیات آن صرف می‌شود و خیلی‌ها با آن ارتباط برقرار نمی‌کنند. همچنین تنها یک سطح از معماری را نمایش می‌دهد. براساس تحقیقی که سایمون براون به عنوان یکی از بررسی کنندگان معماری نرم‌افزار انجام داده از هر ۱۰ نفر ۱ نفر از UML جهت توصیف سیستم استفاده می‌کند.

با توجه به این مسائل شاید استفاده از مدل دیگری که بتواند دید بهتری بدهد و نمایش آن هم از جهت خواندن و هم از جهت طراحی راحت‌تر باشد بهینه‌تر باشد. مدلی که در این مطلب آن را بررسی خواهیم کرد مدل 4C است.

همانطور که از اسم پیداست این مدل از C4 به صورت زیر تشکیل شده است:

Context, Containers, Components, Code

این مدل سعی دارد تا با نمایش معماری در ۴ سطح مختلف برای مخاطبین مختلف و از دید بالا و کلی شروع کند و سپس به جزئیات بپردازد.

این معماری یک معماری abstraction-first است با این مفهوم که نشان دهد معماری و مهندسان نرم‌افزار چه ایده‌ای و دیدی در رابطه با سیستم دارند. مجموعه‌ای از این انتزاعات فهم این مدل را آسان‌تر می‌کند.

بگذارید تا با نمایش مثالی از این مدل یه دید کلی نسبت به آن داشته باشیم:

نمایش مثالی از مدل C4
نمایش مثالی از مدل C4

همانطور که در تصویر بالا مشاهده می‌کنید در نمودار اول دید کلی سیستم و ارتباط سیستم با سایر سیستم‌ها و کاربرانش نمایش داده شده و سپس در هر مرحله به جزئیات آن وارد می‌شود.

در ابتدا باید با چند مفهوم برای تعریف بقیه موارد پیش برویم.

مفاهیم اولیه:

افراد ( People ):

یک شخص نماینده یکی از کاربران انسانی سیستم نرم افزاری شما است.

سیستم نرم‌افزار ( Software System ):

یک سیستم نرم‌افزاری بالاترین سطح انتزاع است و چیزی را توصیف می‌کند که ارزشی را به کاربران خود ( انسان یا غیرانسان) ، ارائه می‌کند. این شامل سیستم نرم افزاری است که شما مدل سازی می کنید و سایر سیستم های نرم افزاری که سیستم نرم افزاری شما به آنها وابسته است (یا برعکس). در بسیاری از موارد، یک سیستم نرم افزاری متعلق به یک تیم توسعه نرم افزار است.

دیاگرام اصلی C4:

این دیاگرام، نمودار اصلی برای نمایش C4 است که شامل نمودار‌های زیر است:

System Context diagram:

در این نمودار نمایشی کلی از سیستم و ارتباطی که با بقیه قسمت‌ها دارد نمایش می‌دهیم. همچنین افراد ( People ) ای که با این سیستم در ارتباط هستند نمایش داده می‌شوند. هدف این دیاگرام نمایش کلی سیستم بدون نمایش جزئیات آن است تا بتوان با اشاره به آن هدف کلی سیستم را دریافت. در این قسمت تکنولوژی‌ها معرفی نمی‌شوند و در نمودارهای جزئی به آن اشاره می‌شود.


Container diagram:

در این نمودار پس از اینکه هدف سیستم و ارتباط آن با سایر سیستم‌ها مشخص شد به نمایش مشخصات container می‌پردازیم که تعریف آن به این صورت است که مانند یک single-page application و یا server-side web application به صورت مجزا قابل deploy است.

مثال‌هایی از container می‌تواند موارد زیر باشد:

  • desktop application
  • single-page application
  • mobile application
  • database schema
  • file system

این نمودار سطح بالایی از معماری را نمایش می‌دهد.

در این سطح می‌توان به بیان تکنولوژی‌های مورد استفاده پرداخت.


Component diagram:

در این مرحله از نمودار می‌توان هر container را ریزتر شد و به وظایف کامپوننت هر container پرداخت. هر container از یک یا چندین component تشکیل می‌شود.


Code diagram:

در این نمودار به بیان جزئیات کد هر کامپوننت می‌توان اشاره کرد.

  • در کنار این موارد می‌توان نمودارهای فرعی نیز برای C4 تعریف کرد تا اطلاعات بیشتری را به نمایش قرار داد.
    جهت مطالعه در رابطه با این موارد می‌توان به لینک‌های زیر مراجعه کرد:
  • https://c4model.com/
  • https://www.youtube.com/watch?v=x2-rSnhpw0g
  • https://www.youtube.com/watch?v=Ym9nhVZs89o


این مطلب، بخشی از تمرینهای درس معماری نرم‌افزار در دانشگاه شهیدبهشتی است.
#معماری_نرم_افزار_بهشتی


معماری_نرم_افزار_بهشتی
فارغ‌التحصیل دانشگاه امیرکبیر |‌ برنامه‌نویس فرانت کافه‌بازار/بلد
شاید از این پست‌ها خوشتان بیاید