خوشبختانه این روزها توفیق اجباری پیش اومد با مدل C4 در معماری نرم افزار آشنا بشم و قصد دارم اینجا اون چیزی که فهمیدم رو به اشتراک بذارم. خوشحال میشم اگر اشکالی دیدید یا نظری داشتید در بخش نظرات منتقل کنید. در این پست قصد دارم بگم C4 از کجا اومده ؟ برای چی اومده؟ چه ویژگی هایی داره؟
آقای Brown می گوید: "معماری های طراحی شده در نمایش جزییات با هم تفاوت دارند و هر وقت یک طراحی رو در مقابل تیم های دیگه میزارم و ازشون میخوام تا چیزی که میفهمن رو توضیح بدن معمولا تیم ها اگر خود طراحان توضیح ندن نمیتونن معماری رو درک کنند."
آقای Brown دو تا مشکل اساسی در طراحی ها میدید:
شاید این سوال پیش بیاید آیا UML ( و دیگر راه های مدلسازی ) زبان مشترک نیستند ؟
آقای Brown در پاسخ می گوید اگر شما از UML استفاده میکنید و مشکلی ندارید از آن استفاده کنید اما واقعیت اینه که اکثر شرکت ها و تیم های برنامه نویسی (ازجمله تیم هایی که از متدولوژی توسعه agile استفاده می کنند) به دلیل پیچیده بودن پروژه و محدود بودن یا دلایل ترجیح میدن دیگر بجای UML از مستطیل های خط و دایره های خودساخته (مثل تصاویر بالا) استفاده کنند.
آقای Brown برای حل چالش های بالا مدل C4 را به عنوان راه حل ارائه داده که در ادامه بهش می پردازیم.
آقای Brown با بررسی سطوح مختلف در دیگر علوم مهندسی مدل C4 را بر پایه UML و معماری 4+1 پیشنهاد داد .در این مدل اقای مدل اقای Brown چهار سطح برای انتزاع (Abstractions) معرفی می کند. (۴ تا C)
که این چهار لایه شامل context , containers ,components, code میشود.
کسانی که فقط نیاز به دید کلی دارند باید معماری در سطح context به انها ارائه شود اگر جزییات بیشتر لازم بود میتوانیم به سطوح داخلی برویم این مثل یه نقشه که هر وقت جزییات بیشتر خواستیم میتونیم zoom کنیم.
طبق این نگاه سامانه نرم افزاری از تعدادی کانتینر تشکیل شده است (کانتینرها میتواند پایگاه داده یا هر برنامه مستقلی باشند مثل اپلیکیشن ها و برنامه های وب یا دسکتاپ و...) و هر کانتینر شامل یک یا تعداد بیشتر کامپوننت هست که با زبان برنامه نویسی پیاده سازی شده است.
بیاید جزییات این مدل رو در قالب یک مثال مرور کنیم: (هدف در این مثال طراحی یک اینترنت بانک با مدل C4 است)
در این نمودار سامانه ما در وسط قرار میگیرد و کاربران و سامانه های دیگه ای که با سامانه ما تعامل دارند و همیچنین نحوه تعامل نمایش داده میشوند. در مثال زیر مشتریان با سامانه در ارتباط هستند آنها میخواهند موجودی حساب خود را بررسی کنند یا از دیگر خدمات بانک بهرهمند شوند.همچین اینترنت بانک به سیستم ایمیل و زیر ساخت بانک نیازمند است و درخواست هایی به آنها ارسال می کند. این ارتباط ها بوسیله خطوط جهت دار با توضیحات محدود نمایش داده میشود، که در شکل زیر مشاهده میکنید.
در شکل رنگ ها نشاندهندۀ وضعیت سیستمها هستند؛ آبی به معنای درحال ساخت و خاکستری به معنای آماده برای استفاده است.
در این سطح باید زیر سامانه های اینترنت بانک را نمایش می دهیم در واقع سامانه اینرنت بانک را بزرگ می کنیم و داخل آن را می بینیم. هر سامانه از یک یا چندین کانتینر تشکیل شده . همونطور که گفتیم کانتینر میتونه هر نوع برنامه مستقلی یا پایگاه داده باشه. در این نمودار ارتباط میان کانتینر ها و تکنولوژی های انتخاب شده نمایش داده میشود.
در مثال ما سامانه اینترنت بانک (که با خط چین نمایش داده شده) شامل وب اپلیکشن، موبایل اپلیکیشن، صفحه اینترنتی ، API اپلیکیشن و پایگاه داده است که ارتباط میان آنها نمایش داده شده است.
در این مرحله میتوانیم هر یک از کانتینر ها بزرگ کنیم و بخش های مختلف رو مشاهده کنیم. در این نمودار بخش های مختلف هر کانتینر ، وابستگی ها و ارتباط میان بخش های مختلف و قابلیت های پیاده سازی شده در هر بخش رو میبینیم.
در مثال کانتینر API Application رو بزرگ کردیم و بخش های مختلف پیاده سازی شده برای این کانتینر رو میبینیم . در هر بخش قابلیت پیاده سازی شده بطور مختصر توضیح داده شده.
در نهایت در این سطح نحوه برنامه نویسی هر بخش رو نمایش میدهیم. در این مرحله میتوانیم برای نمایش از UML و relationship diagrams و ابزار های مشابه استفاده کنیم.
این نمودار رو میتوان با استفاده از ابزار هایی مثل IDE ها یا UML modelling بصورت خودکار ایجاد کرد. کشیدن این نمودار فقط برای توسعه دهندگان همان بخش توصیه میشود.
در مدلسازی C4 توصیه میشود :
۱. عنوان ها شفاف و قابل فهم باشد
۲. در سامانه ها و کانتینر ها توضحیات مختصری از هدف آنها نوشته شود.
۳. در بخش ها تکنولوژی و قابلیت های پیاده سازی شده نوشته شود.
۴. پیکان ها که رابطه یک طرفه نشان میدهند نوع ارتباط توضیح داده شود.
مدل C4 تلاشی برای کاهش شکاف در طراحی های معماری نرم افزار با الگویی ساده است. همچنین سعی میکند سطح بندی مختلف جزییات غیر ضروری و گیج کننده معماری را برای افراد مختلف درگیر با پروژه حذف کند. مدل C4 میخواهد تا معماری ها بدون توضیح طراحان برای همه قابل فهم باشند. C4 در جزییات استفاده از اشکال یا حتی تعداد سطح ها سختگیر نیست و اگر فکر میکنید با اضافه کردن سطح جدیدی میتوانید معماری را بهتر نمایش دهید حتما این کار را بکنید.
این مطلب، بخشی از تمرینهای درس معماری نرمافزار در دانشگاه شهید بهشتی است. که امیدوارم از آن استفاده کرده باشید.
https://www.youtube.com/watch?v=x2-rSnhpw0g
https://en.wikipedia.org/wiki/C4_model
https://www.youtube.com/watch?v=Ym9nhVZs89o