آشنایی با مدل مستندسازی C4

اگر تابه‌حال در شاخۀ طراحیِ نرم‌افزار، چه به‌صورت انفرادی و چه گروهی فعالیت کرده باشید، حتماً عبارت «معماری نرم‌افزار» به گوشتان خورده است؛ شاید هم به‌صورت آکادمیک با آن آشنا شده باشید. فرقی نمی‌کند که دانش‌آموختۀ رشتۀ کامپیوتر باشید یا به‌صورت خودآموخته به این گرایش روی آورده باشید؛ درهرصورت باید ابزاری را شناخت که به کمکِ آن بتوان با پیچیدگی‌ها و پویایی محیطِ نرم‌افزارها مقابله نمود. امروزه نیازمندی‌های مشتریان دائماً درحال تغییر بوده و تمام افرادی که در طراحی یک نرم‌افزار دخیل هستند، حتی آنان که کدنویسی نمی‌کنند هم باید به معماری نرم‌افزار واقف باشند تا بتوانند به یک دیدگاهِ کلی دست یافته و نکات کلیدیِ آن را متوجه شوند. اینجاست که اهمیتِ دیاگرام‌ها و انتقال مفاهیم از طریق تصویر مشخص می‌شود. در این پست، مدلی به نام C4 معرفی خواهد شد که به کمک آن می‌توان مستندسازی گرافیکی انجام داد.مدلسازی دیداری معماری نرم‌افزارقبل از اینکه به مدل C4 بپردازیم، باید بدانیم که مدلسازی دیداری (گرافیکی) معماری نرم‌افزار چیست و چه کاربردهایی دارد. در ابتدای معرفی، ذکر این نکته ضروریست که در متونِ علمی و به‌خصوص روان‌شناسی اثبات شده است که انتقال اطلاعات به کمک شکل و به‌صورت گرافیکی فواید بسیاری دارد که از حوصلۀ این مطلب خارج است. اگر علاقه دارید که در این زمینه مطالعۀ بیشتری داشته باشید، کتاب جامعه‌شناسی و بازنمایی بصری نوشتۀ الیزابت چاپلین را به شما پیشنهاد می‌کنم.حالا که می‌دانیم انتقال داده‌ها به‌صورت دیداری چه فوایدی دارد، می‌توانیم از آن در معماری نرم‌افزار استفاده کنیم. مدلسازی دیداری معماری نرم‌افزار در واقع یک تکنیک جهت تبدیل ایده‌ها، داده‌ها، نکات کلیدی و دغدغه‌های یک نرم‎افزار به اشکالی است که ساده و قابل فهم باشند. استفاده کردن از این روش فواید متعددی دارد که از جملۀ آن‌ها می‌توان به افزایشِ درکِ مسئله، بهبودِ ارتباطاتِ میانِ افرادِ تیم، تشویق به همکاری و شناسایی حوزه‌های پیشرفت اشاره کرد.اما ترسیم دیاگرام‌ها باید از استانداردهای خاصی پیروی کند. معمولاً یکی از مشکلاتی که گریبان تیم‌های به اصطلاح «چابک» را می‌گیرد، همین عدم توجه به مستندسازی و استانداردها است. این نوع تیم‌ها معمولاً مستندسازی صحیح و کامل را فدای سرعت عمل و درخواست مشتری کرده و به ترسیم چند دیاگرام روی تختۀ وایت‌برد و استفاده از ابزارهایی مثل Visio اکتفا می‌نمایند. آقای ایونات بالوسین یک نوشتۀ مفید به‌نام هنرِ ترسیمِ دیاگرام‌های معماری منتشر نموده است که پیشنهاد می‌کنم در صورت علاقه، آن را مطالعه کنید. اینجاست که باید به روش‌هایی مثل C4 روی بیاوریم.مدل C4 چیست؟اکنون که متوجه شدیم مدلسازی دیداری فواید بسیاری دارد، به معرفی مدل C4 می‌پردازیم. اگر بخواهیم تعریف نسبتاً دقیقی از این مدل بیان کنیم، می‌توان گفت که مدل C4 معماری یک نرم‌افزار را از طریق نمایش چندین دیدگاه مختلف با تجزیۀ سیستم به مولفه‌ها و اِلِمان‌های مختلف و روابط میان آن‌ها، مستندسازی می‌کند. اگر کاملاً متوجه این جمله نشدید، جای نگرانی نیست چون در ادامه این تعریفِ ارائه شده، بیشتر توضیح داده می‌شود.برای ارائۀ تعریفی بهتر از مدل C4، آن را به چندین قسمت تقسیم می‌کنیم:عبارت C4 به چهار عنصر اشاره می‌کند: مفاهیم سیستمی (Context)، مولفه (Component)، کانتینر (Container) و کد (Code).مدل C4، یک ابزار برای مستندسازی معماری نرم‌افزار است؛ یعنی معماری نرم‌افزار را در چهار سطح مختلف تشریح می‌کند.این مدل، مجموعه‌ای از دیاگرام‌ها شامل مفاهیم سیستمی، مولفه‌ها، کانتینرها و کدهای مربوط به یک قسمت از نرم‌افزار را ارائه می‌کند. هر کدام از این دیاگرام‌ها اطلاعات مختلفی را نمایش می‌دهند که متناسب با نقش‌های خاصی در یک تیم است. پس هر کس می‌تواند به اطلاعات مورد نیاز خود دسترسی داشته باشد.می‌توان به مدل C4 از دیدگاه مجموعه‌ای از نقشه‌ها برای طراحی یک نرم‌افزار نگریست که می‌توان روی هرکدام از آن‌ها به اصطلاح Zoom نمود و سطح بیشتری از جزئیات را مشاهده کرد.شاید بهتر است این مدل به‌صورت دیداری نمایش داده شود. شکل زیر تمامی توضیحاتی که در پاراگراف بالا آمده را دربردارد. در ادامه سطوح مدل C4 بیشتر توضیح داده می‌شوند.شکل (1): نمای کلی مدل C4سطوح مدل C4همانطور که در قسمت قبلی ذکر شد، مدل C4 دارای چهار سطح است. هر کدام از این سطوح شامل دیاگرام‌های مختلفی هستند که متناسب با نقش‌های مختلف افراد یک تیم ترسیم می‌شوند. در این قسمت از یک مثال سیستم بانکداری الکترونیکی فرضی استفاده خواهد شد.سطح اول: دیاگرام مفاهیم سیستموقتی نرم‌افزاری طراحی می‌شود، مشخصاً باید ارتباطاتِ آن با سایر سیستم‌ها و افراد مشخص باشد. دیاگرام مفاهیم سیستم شامل چنین اطلاعاتی است. برای درک بهتر به شکل زیر توجه کنید که یک نمونه دیاگرام مفهوم سیستم بانکداری اینترنتی در آن نشان داده شده است. در چنین سیستمی مشتریان بانک با استفاده از بانکداری اینترنتی به اطلاعات خود دسترسی پیدا کرده و اقدام به ارسال یا دریافت پول می‌کنند. از طرف دیگر سیستم بانکداری اینترنتی وابسته به سیستم اصلیِ مستقر در بانک بوده و از سیستم ارسال ایمیل بانک برای اطلاع‌رسانی به مشتریان استفاده می‌کند. رنگ‌بندی عناصر نشان‌دهندۀ وضعیت سیستم‌ها (آبی: درحال ساخت و خاکستری: آماده) است.شکل (2): نمودار سطح اولسطح دوم: دیاگرام کانتینردر سطح دوم، جزئیات بیشتری از یک سیستم و کانتینرهای آن (نرم‌افزارها، پایگاه‌های داده، میکروسرویس‌ها و غیره) در سطح اول نمایش داده می‌شود. تصمیمات مربوط به تکنولوژی‌های مورد استفاده هم قسمتی از این دیاگرام هستند. شکل زیر، همان سیستم قبلی را در سطح دوم نمایش می‌دهد که در آن کل سیستم (داخل مستطیل خط‌چین) به‌صورت تجزیه شده به کانتینرها نمایش داده شده است؛ کانتینرها عبارتند از: نرم‌افزار تحتِ وبِ سرور، نرم‌افزار تک صفحه‌ای کاربر، اپلیکیشن موبایل، نرم‌افزار API سمت سرور و پایگاه داده.شکل (3): دیاگرام سطح دومسطح سوم: دیاگرام مولفهدر سطح سوم، جزئیات بیشتری از یک کانتینر نمایش داده می‌شود. منظور از جزئیات بیشتر، مولفه‌های واقعی هستند که گروهی از کدها در نرم‌افزار را نشان می‌دهند. شکل زیر یک دیاگرام مولفه مربوط به همان مثال قبلی را نشان می‌دهد که در آن نرم‌افزار API سمتِ سرور، به چهار مولفه تجزیه شده است. هرکدام از این مولفه‌ها، کنترل قسمتی از سیستم را برعهده دارند.شکل (4): دیاگرام سطح سومسطح چهارم: دیاگرام کدنهایتاً در سطح چهارم، جزئیات بیشتری از یک مولفه نمایش داده می‌شود. این دیاگرام نشان‌دهندۀ نحوۀ پیاده‌سازی (اینترفیس‌ها و کلاس‌ها) یک مولفۀ خاص است. مثلاً در شکل زیر، دیاگرام مثال قبلی مربوط به مولفۀ محیط بصری سیستم بانکداری اصلی را نشان می‌دهد.شکل (5): دیاگرام سطح پنجمنشانه‌گذاری مدل C4مدل C4 نشانه‌گذاری خاصی را پیشنهاد نمی‌دهد؛ یعنی برای ترسیم عناصر مختلف، معمار سیستم آزاد است تا از اشکال مختلفی استفاده کند. دیاگرام‌های نمونه‌ای که در بالا مشاهده کردید، همگی دارای نشانه‌گذاری فرضی بودند که هر کس می‌تواند آن‌ها را توسط ابزارهای مختلف، از کاغذ و قلم گرفته تا نرم‌افزارهای مختلف ترسیم کند. حتی می‌توان از نشانه‌گذاری‌های UML برای ترسیم دیاگرام‌های مدل C4 استفاده کرد.تنها استاندارد توصیه شده در مورد نشانه‌گذاری این مدل، ارائۀ یک نام، نوع عنصر، نوع تکنولوژی و توضیح کوتاه روی هر عنصر است. شاید عجیب به‌نظر برسد که این حجم از نوشته روی عناصر دیاگرام موجود باشد، اما وجود آن ضروری است؛ زیرا باعث رفع ابهام در مورد رفتار دیاگرام می‌شود. نکتۀ دیگری که در این مدل توصیه شده، وجود باکس راهنمای اشکال (شامل رنگ، نوع خطوط و غیره)، یکپارچگی اشکال در همۀ دیاگرام‌ها و وجود عنوان برای هر دیاگرام است.سخن پایانیمدل C4 یک روش ساده برای انتقال مفاهیم معماری نرم‌افزار در سطوحِ تجریدِ مختلف است که به کمک آن می‌توان مفاهیم متناسب با هر گروه از افراد را به آنان منتقل کرد. همچنین به دلیل سبک‌وزن بودن آن، می‌تواند ابزاری جهت شناسایی و یا طراحی مدل‌های معماری برای تیم‌های توسعۀ نرم‌افزاری با اهداف و دیدگاه‌های مختلف باشد.این مدل توسط آقای سایمون بروان توسعه داده شده که دو کتاب ارزشمند (مراجع 2 و 3) در این زمینه منتشر کرده است. اگر علاقه‌مند به کسب اطلاعات بیشتر در این زمینه هستید، پیشنهاد می‌کنم این کتاب‌ها را مطالعه کنید. همچنین با یک جستجوی ساده در سطح اینترنت یا مراجعه به وبسایت مدل C4، می‌توانید اطلاعات بیشتری راجع‌به سوالات مرتبط، چک لیست‌ها و سایر موارد مرتبط کسب کنید.این مطلب به‌عنوان پاسخ برای بخشی از تمرین‌های درس معماری نرم‌افزار در دانشگاه شهید بهشتی نوشته شده است که امیدوارم از آن استفاده برده باشید.مراجع[1] Balosin, I. (2017, August 4). The Art of Crafting Architectural Diagrams. InfoQ. https://www.infoq.com/articles/crafting-architectural-diagrams/ [2] Brown, S. (2018). Technical leadership and the balance with agility Software Architecture for Developers - Volume 1. LearnPub.[3] Brown, S. (2021). Visualize, document and explore your software architecture Software Architecture for Developers - Volume 2. LearnPub.[4] The C4 model for visualizing software architecture. (2021). Simon Brown. https://c4model.com/ [5] Chaplin, E. (1994). Sociology and Visual Representation (1st ed.). Routledge. Kang, J. (2021, March 18).[6] Diagramming software architecture using C4 model and C4-PlantUML. LINE ENGINEERING. https://engineering.linecorp.com/en/blog/diagramming-software-architecture-using-c4-model-and-c4-plantuml/ [7] What is a C4 Model? How to Make C4 Software Architecture Diagrams. (2021, June 21). Gliffy by Perforce. https://www.gliffy.com/blog/c4-model [8] Wikipedia contributors. (2021, July 9). C4 model. Wikipedia. https://en.wikipedia.org/wiki/C4_model