از کسی در صنعت ساختمان بخواهید که به صورت بصری با معماری یک ساختمان ارتباط برقرار کند و نقشه های سایت، پلان های طبقه، نماهای ارتفاعی، نماهای مقطعی و نقشه های جزئیات به شما ارائه می شود. در مقابل، از یک توسعهدهنده نرمافزار بخواهید که معماری نرمافزار یک سیستم نرمافزاری را با استفاده از نمودارها به اشتراک بگذارد و احتمالاً با یک آشفتگی از جعبهها و خطوط مواجه خواهید شد... نمادهای ناسازگار (کدگذاری رنگ، اشکال، سبکهای خط و غیره)، نامگذاری مبهم. ، روابط بدون برچسب، اصطلاحات عمومی، انتخاب های فناوری از دست رفته، انتزاعات مختلط و غیره.
به عنوان یک صنعت، ما زبان مدلسازی یکپارچه (UML)، ArchiMate و SysML را داریم، اما پرسیدن اینکه آیا اینها راه موثری برای برقراری ارتباط با معماری نرمافزار ارائه میدهند اغلب بیربط است، زیرا بسیاری از تیمها قبلاً آنها را به نفع جعبههای بسیار سادهتر کنار گذاشتهاند. خطوط" نمودارها کنار گذاشتن این زبانهای مدلسازی یک چیز است، اما شاید در رقابت برای چابکی، بسیاری از تیمهای توسعه نرمافزار توانایی برقراری ارتباط بصری را از دست دادهاند.
یک مدل C4 معماری نرم افزار را در سطوح مختلف جزئیات توصیف یا تعریف می کند. مدل C4 مجموعه ای از نمودارها است که زمینه، کانتینرها، اجزا و کد یک نرم افزار را نشان می دهد. سلسله مراتب این نمودارها به مخاطبان مختلف اجازه می دهد تا معماری نرم افزار را در سطح جزئیات مورد نیاز خود درک کنند.
میتوانید از یک مدل C4 برای میکروسرویسها استفاده کنید، تا نشان دهید که چگونه میخواهید یک سیستم بسازید، یا یک سیستم موجود را توصیف کنید. نمودارهای C4 یک چارچوب جایگزین و ساده شده در مقایسه با نمودارهای UML هستند و می توانند چندین سیستم را توصیف کنند، برخلاف نمودارهای معماری AWS خاص، نمودارهای معماری GCP یا نمودارهای معماری Azure.
مدل C4 توسط نویسنده Software Architecture for Developers، Simon Brown ساخته شده است.
چهار نوع مدل C4 وجود دارد که هر کدام برای مخاطبان متفاوتی است و دارای سطح متفاوتی از جزئیات است. اینها زمینه، ظرف، اجزا و نمودارهای کد هستند که مدل معماری نرم افزار شما را می سازند.
سطح 1: نمودارهای زمینه
نمودارهای زمینه کلی ترین توصیفی هستند که سیستم شما چه کاری انجام می دهد، چه کسی از آن استفاده خواهد کرد و با چه سیستم های دیگری تعامل خواهد داشت. یک نمودار زمینه به شما کمک می کند تا محدوده پروژه خود را توصیف کنید و به شما کمک می کند تا مشخص کنید کاربر چه کسی است و چه مشکلی را می خواهید حل کنید.
سطح 2: نمودارهای کانتینر
نمودار ظرف اولین گام را برای توصیف سیستم نرم افزاری برداشته و API ها، برنامه های کاربردی، پایگاه های داده و میکروسرویس هایی را که سیستم از آنها استفاده خواهد کرد نشان می دهد. هر یک از این برنامه ها یا خدمات با یک ظرف نمایش داده می شوند و تعاملات بین آنها در سطح بالایی نشان داده می شود.
سطح 3: نمودارهای مؤلفه
یک گام عمیقتر از نمودار کانتینر، نمودار مؤلفه گروههای کد را در یک کانتینر به تفصیل شرح میدهد. این مؤلفه ها انتزاعی از پایگاه کد شما را نشان می دهند.
این نوع نمودار با نمودار مؤلفههای UML قابل مقایسه است، اما برای ایجاد نمودار معماری نرمافزار، از مجموعهای از «قوانین» کمتر دقیقتر پیروی میکند.
سطح 4: نمایش کد با نمودارهای کلاس
آخرین سطح به جزئیات زیادی نیاز دارد تا نشان دهد چگونه کد یک جزء واحد در واقع پیاده سازی می شود. برای انجام این کار، میخواهید یک نمودار کلاس UML یا نمودار رابطه موجودیت بسازید که مؤلفه را توصیف میکند.
برای ایجاد این نقشهها از کد شما، ابتدا به مجموعهای از انتزاعات مشترک نیاز داریم تا زبانی فراگیر ایجاد کنیم که بتوانیم از آن برای توصیف ساختار ایستا یک سیستم نرمافزاری استفاده کنیم. مدل C4 ساختارهای ایستا یک سیستم نرم افزاری را از نظر کانتینرها، اجزا و کد در نظر می گیرد. و مردم از سیستم های نرم افزاری که ما می سازیم استفاده می کنند.
پیوند نمودار چشم انداز سیستم
مدل C4 نمای ایستا از یک سیستم نرم افزاری واحد را ارائه می دهد، اما در دنیای واقعی، سیستم های نرم افزاری هرگز در انزوا زندگی نمی کنند. به همین دلیل، و به ویژه اگر مسئولیت مجموعه ای از سیستم های نرم افزاری را بر عهده دارید، اغلب مفید است که بفهمید چگونه همه این سیستم های نرم افزاری با هم در محدوده یک سازمان قرار می گیرند. برای انجام این کار، به سادگی نمودار دیگری را اضافه کنید که "در بالای" نمودارهای C4 قرار دارد تا چشم انداز سیستم را از منظر فناوری اطلاعات نشان دهد. مانند نمودار زمینه سیستم، این نمودار می تواند مرزهای سازمانی، کاربران داخلی/خارجی و سیستم های داخلی/خارجی را نشان دهد.
اساساً این یک نقشه سطح بالا از سیستمهای نرمافزاری در سطح سازمانی است که برای هر سیستم نرمافزاری مورد علاقه، یک بررسی C4 دارد. از منظر عملی، نمودار چشم انداز سیستم در واقع فقط یک نمودار زمینه سیستم بدون تمرکز خاص بر روی یک سیستم نرم افزاری خاص است.
پیوند دیاگرام پویا
یک نمودار پویا زمانی میتواند مفید باشد که میخواهید نشان دهید چگونه عناصر در یک مدل استاتیک در زمان اجرا برای پیادهسازی یک داستان کاربر، استفاده از کیس، ویژگی و غیره با یکدیگر همکاری میکنند. نمودار همکاری"). این شبیه به یک نمودار توالی UML است، اگرچه امکان آرایش آزاد عناصر نمودار با فعل و انفعالات شماره گذاری شده را برای نشان دادن ترتیب می دهد.
پيوند نمودار استقرار
یک نمودار استقرار به شما امکان می دهد نشان دهید که چگونه سیستم های نرم افزاری و/یا کانتینرها در مدل استاتیک به زیرساخت نگاشت می شوند. این نمودار استقرار بر اساس یک نمودار استقرار UML است، اگرچه برای نشان دادن نگاشت بین کانتینرها و گره های استقرار کمی ساده شده است. یک گره استقرار چیزی شبیه زیرساخت فیزیکی (به عنوان مثال یک سرور فیزیکی یا دستگاه)، زیرساخت مجازی سازی شده (مانند IaaS، PaaS، یک ماشین مجازی)، زیرساخت کانتینری (مانند یک ظرف Docker)، یک محیط اجرا (به عنوان مثال یک سرور پایگاه داده، Java EE) است. سرور وب/برنامه، Microsoft IIS) و غیره. گره های استقرار را می توان تودرتو کرد.
همچنین ممکن است بخواهید گره های زیرساختی مانند سرویس های DNS، متعادل کننده های بار، فایروال ها و غیره را شامل کنید.
اگرچه نمودارهای مثال بالا با استفاده از نماد "جعبه ها و خطوط" ایجاد شده اند، نمودارهای اصلی را می توان با استفاده از UML با استفاده مناسب از بسته ها، مؤلفه ها و کلیشه ها نشان داد. نمودارهای UML به دست آمده معمولاً فاقد همان درجه متن توصیفی هستند، زیرا افزودن چنین متنی با برخی از ابزارهای UML ممکن نیست (یا آسان است).
و در اینجا چند توصیه در رابطه با نمادگذاری وجود دارد.
نمودارها
هر نمودار باید عنوانی داشته باشد که نوع و محدوده نمودار را توصیف کند (به عنوان مثال "نمودار زمینه سیستم برای سیستم نرم افزار من").
هر نمودار باید دارای یک کلید/افسانه باشد که نماد مورد استفاده را توضیح دهد (مانند اشکال، رنگها، سبکهای حاشیه، انواع خطوط، سر فلشها و غیره).
کلمات اختصاری و اختصارات (کسب و کار/دامنه یا فناوری) باید برای همه مخاطبان قابل درک باشد یا در کلید/افسانه نمودار توضیح داده شود.
عناصر
نوع هر عنصر باید به صراحت مشخص شود (به عنوان مثال شخص، سیستم نرم افزار، ظرف یا جزء).
هر عنصر باید توصیف کوتاهی داشته باشد، تا دیدگاهی "در یک نگاه" از مسئولیت های کلیدی ارائه شود.
هر کانتینر و جزء باید دارای فناوری مشخص شده باشد.
روابط
هر خط باید نشان دهنده یک رابطه یک طرفه باشد.
هر خط باید برچسب گذاری شود، برچسب با جهت و هدف رابطه (مثلاً وابستگی یا جریان داده) سازگار باشد. سعی کنید تا آنجا که ممکن است با برچسب مشخص باشید، به طور ایده آل از کلمات منفرد مانند "استفاده می کند" اجتناب کنید.
روابط بین کانتینرها (معمولاً این ارتباطات بین فرآیندی را نشان می دهد) باید دارای یک فناوری/پروتکل باشد که به صراحت برچسب گذاری شده باشد.
مدل C4 بهعنوان راهی برای کمک به تیمهای توسعه نرمافزار برای توصیف و برقراری ارتباط معماری نرمافزار، هم در طول جلسات طراحی اولیه و هم هنگام مستندسازی گذشتهنگر یک پایگاه کد موجود، ایجاد شد. این راهی است برای ایجاد نقشه هایی از کد شما، در سطوح مختلف جزئیات، به همان روشی که از چیزی مانند نقشه های گوگل برای بزرگنمایی و بزرگنمایی منطقه ای که به آن علاقه دارید استفاده می کنید.
اگرچه هدف اصلی آن معماران و توسعهدهندگان نرمافزار است، مدل C4 راهی را برای تیمهای توسعه نرمافزار فراهم میکند تا به طور کارآمد و مؤثر معماری نرمافزار خود را در سطوح مختلف از جزئیات، گفتن داستانهای مختلف برای انواع مختلف مخاطب، هنگام انجام طراحی قبلی یا گذشتهنگر، به اشتراک بگذارند.
مدل C4 یک رویکرد "اول انتزاعی" برای نمودارسازی معماری نرم افزار است که بر اساس انتزاعیاتی است که نشان می دهد معماران و توسعه دهندگان نرم افزار چگونه در مورد نرم افزار فکر می کنند و می سازند. مجموعه کوچکی از انتزاعات و انواع نمودارها، یادگیری و استفاده از مدل C4 را آسان می کند. لطفاً توجه داشته باشید که نیازی به استفاده از هر 4 سطح نمودار نیست. فقط آنهایی که ارزش اضافه می کنند - نمودارهای System Context و Container برای بسیاری از تیم های توسعه نرم افزار کافی است.
منابع:
https://c4model.com/
https://www.gliffy.com/blog/c4-model
https://www.youtube.com/watch?v=x2-rSnhpw0g
https://www.youtube.com/watch?v=Ym9nhVZs89o
https://en.wikipedia.org/wiki/C4_model
https://engineering.linecorp.com/en/blog/diagramming-software-architecture-using-c4-model-and-c4-plantuml/
«این مطلب، بخشی از تمرینهای درس معماری نرمافزار در دانشگاه شهیدبهشتی است»