نمودار های معماری، روشی برای برقراری ارتباط با نحوه ایجاد یک نرم افزار و یا نحوه عملکرد یک سیستم نرم افزاری موجود هستند. با این حال به احتمال زیاد، اکثر نمودار های معماری نرم افزاری که دیده اید، ترکیبی به هم ریخته از اشکال و خطوط هستند؛ یکی از عوارض ناگوار این نمودار های ناخوانا و شلوغ، این بوده است که بسیاری از تیم ها، تلاش های مستند سازی و نمودار سازی خود از جمله استفاده از UML را کاهش داده و یا متوقف کرده اند و به رسم نمودار های موردی روی تخته وایت برد و استفاده از ابزار هایی مانند Microsoft Visio روی آورده اند.
مستند سازی نرم افزار باید به گونه ای باشد که برای تمام ذی نفعان که هریک از دیدگاه مختلفی به سیستم نگاه می کنند، قابل درک باشد. درک نمودار های UML، به دلیل پیچیدگی زیاد، برای افرادی که با نماد های آن آشنا نبوده و دانش فنی در این زمینه ندارند، دشوار خواهد بود.
برای حل مشکلات ذکر شده، فردی به نام Simon Brown مدلی به نام C4 را ارائه کرد که در ادامه به شرح این مدل می پردازیم.
مدل C4، معماری نرم افزار را در سطوح مختلف جزئیات، توصیف می کند. این مدل برگرفته از ۴ کلمه ، Components ،Containers ،Context و Code بوده و شامل مجموعه ای از نمودار ها است که مفاهیم سیستم، کانتینر ها، مولفه ها و کد یک نرم افزار را نمایش می دهند. سلسله مراتب این نمودارها به مخاطبان اجازه می دهد که معماری نرم افزار را در سطح جزئیات مورد نیاز خود، درک کنند.
می توان از یک مدل C4 برای مایکرو سرویس ها، برای نمایش برنامه ریزی برای ساخت یک سیستم و یا توصیف یک سیستم موجود استفاده کنید. نمودار های C4، یک چارچوب جایگزین و ساده شده در مقایسه با نمودار های UML هستند و بر خلاف نمودار های معماری AWS، نمودار های معماری GCP و یا نمودار های معماری AZURE، می توانند چندین سیستم را توصیف کنند.
مدل C4 توسط Simon Brown، نویسنده کتاب "معماری نرم افزار برای توسعه دهندگان"، در طی سالهای 2006 تا 2011، بر پایه زبان مدلسازی واحد (UML) و مدل نمای معماری 4+1 ایجاد شد.
چهار نوع مدل C4 وجود دارد (شکل ۱) که هر کدام برای مخاطبان متفاوتی بوده و دارای سطح متفاوتی از جزئیات می باشند. مفاهیم سیستم (زمینه)،کانتینر ها، مولفه ها و نمودار های کد هستند که مدل معماری نرم افزار شما را می سازند.
در ادامه، 4 سطح مدل را معرفی کرده و برای یک سیستم بانکداری اینترنتی، نمودار های مرتبط را مشاهده می کنیم.
نمودار مفاهیم سیستم، کلی ترین و سطح بالا ترین توصیف از سه مورد زیر را ارائه می دهد:
یک نمودار زمینه به شما کمک می کند تا محدوده پروژه خود را توصیف کنید و مشخص کنید که کاربر چه کسی است و می خواهید چه مشکلی را حل کنید.
شکل ۲، نمودار سطح اول سیستم بانکداری اینترنتی را نمایش می دهد؛ مشتریان، خدماتی از جمله پرداخت قبوض و انتقال وجه را از این سیستم دریافت می کنند. سیستم های Mainframe و E-mail، با سامانه ما در ارتباط هستند؛ Mainframe، وظیفه ذخیره اطلاعات مشتریان را داشته و سیستم بانکداری، اطلاعات مورد نیاز را از این سیستم دریافت می کند.سیستم E-mail، ارتباط سامانه با مشتریان را فراهم می کند.
نمودار کانتینر، اولین گام برای توصیف سیستم نرم افزاری را برداشته و API ها، برنامه های کاربردی، پایگاه های داده و مایکرو سرویس هایی که سیستم از آن ها استفاده خواهد کرد را نشان می دهد. هر یک از این برنامه های کاربردی و یا سرویس ها، با یک کانتینر نمایش داده شده و تعاملات بین آن ها به صورت سطح بالا (High-Level) نشان داده می شود.
در شکل ۳، نمودار کانتینر سیستم بانکداری اینترنتی قابل مشاهده است. داخل باکسی که محدوده آن با خط چین مشخص شده است، کانتینر هایی قرار دارند که سیستم بانکداری از آن ها تشکیل شده است. در این نمودار، تکنولوژی های مورد استفاده برای ارتباط کانتینرها با یکدیگر و چگونگی تعامل سیستم بانکداری با سایر سیستمها و کاربران، قابل مشاهده است.
یک گام عمیق تر از نمودار کانتینر، نمودار مولفه است که گروه های کدِ قرار گرفته شده در یک کانتینر را شرح می دهد. این مولفه ها، انتزاعی از بیس کد نرم افزار را نشان می دهند.
این نوع نمودار، با نمودار مولفه UML قابل مقایسه است؛ با این تفاوت که نمودار مولفه UML، از مجموعه قوانین سخت گیرانه تری پیروی می کند.
شکل ۴، مؤلفههای کانتینر API سیستم بانکداری را نشان میدهد. مخاطبان این نمودار، معماران و توسعهدهندگان نرمافزار هستند و به کمک آن، در مورد معماری سیستم در سطوح پایین، تبادل اطلاعات می کنند.
آخرین سطح، به جزئیات زیادی نیاز دارد تا نشان دهد که چگونه کد یک مولفه، پیاده سازی می شود. برای نمودار این سطح، میتوان از نمودارهای UML، مانند نمودار کلاس استفاده کرد.شکل ۵، جزئیات پیاده سازی مؤلفه MainframeBankingSystemFacade و نمودار کلاس آن را نشان میدهد.
برای رسم نمودار های مدل C4، هیچ نشانه گذاری خاصی پیشنهاد نشده است و محدودیتی در این باره وجود ندارد، اما توصیه می شود که از نشانه گذاری های UML استفاده شود؛ تنها اهمیت این امر، انتقال درست و ساده مفاهیم به مخاطب است.
در شکل ۶، نشانه گذاری پیشنهادی آقای Brown آورده شده است.
روش های زیادی برای ایجاد نمودار های C4 وجود دارد که در ادامه به طور مختصر به بعضی از این روش ها می پردازیم:
مدل C4 یک چارچوب ساده و منعطف برای برقراری ارتباط با سطوح مختلف معماری نرم افزار است که بسته به نیازهای مختلف، می توان به صورت متفاوتی از آن استفاده کرد؛ به عنوان نمونه، معماران نرم افزار و توسعه دهندگان، از طریق نمودار های مولفه و یا نمودار های کانتینر با هم تبادل اطلاعات می کنند، اما برای نمایش ساختار کلی نرم افزار به مشتری و یا افرادی که دانش زیادی در حوزه فنی ندارند، از نمودار مفاهیم سیستم استفاده می کنیم. این مدل، مزایای زیادی دارد که برخی از آن ها در زیر آورده شده است:
مدل C4 در کنار مزایای زیادش، معایبی نیز دارد:
«این مطلب، بخشی از تمرینهای درس معماری نرمافزار در دانشگاه شهیدبهشتی است»
https://www.youtube.com/watch?v=x2-rSnhpw0g
https://www.infoq.com/articles/C4-architecture-model/
https://www.gliffy.com/blog/c4-model
https://betterprogramming.pub/modeling-software-architecture-with-c4-243eb1f240c7