روش C4، یکی از روش‌های مستندسازی معماری نرم‌افزار

یکی از جدی ترین چالش های پیش رو در زمینه توسعه نرم افزار، طراحی و مستندسازی معماری نرم افزار می‌باشد. مستنداتی که در برگیرنده همه جنبه‌ها و پیچیدگی‌های ذاتی معماري نرم افزار به شكلی يكپارچه باشد، از قابلیت فهم پایینی برخوردار بوده و ذینفعان بهره چندانی از آن نخواهند برد. برای فائق آمدن بر این مشکل، مستندسازی معماری نرم‌افزار به کمک مجموعه‌ای از دیدهای معماری انجام می‌پذیرد. منظور از مستندسازی معماری نرم‌افزار تولید مجموعه‌ای است از محصول‌هایی که یک معماری را به روشی که برای ذینفعان قابل فهم بوده و نشان دهد که معماری دغدغه‌هایشان را تامین می‌نماید، مستند کند. یکی از این روش‌ها جهت مستندسازی C4 است که در ادامه به جهت آشنایی، توضیح کلی در ارتباط با آن پرداخته خواهد شد.تاریخچه: آقای سایمون براون یک مشاور مستقل متخصص در حوزه معماری نرم‌افزار و نویسنده کتاب «معماری نرم‌افزار برای توسعه‌دهندگان» هم هست که مدل C4 توسط ایشون بین سال‌های 2006 تا 2011 بر روی ریشه‌های زبان مدل‌سازی واحد (UML) و مدل نمای معماری 4+1 ایجاد شد.مدل‌سازی C4 چیست؟ نمودارهای معماری نرم‌افزار راهی فوق‌العاده برای برقراری ارتباط با نحوه برنامه‌ریزی شما برای ایجاد یک سیستم نرم‌افزاری (طراحی اولیه) یا نحوه عملکرد یک سیستم نرم‌افزاری موجود ( براساس مستندات گذشته‌، اشتراک دانش و یادگیری) هستند. با این حال، به احتمال زیاد اکثر نمودارهای معماری نرم‌افزاری که دیده‌اید، ترکیبی بهم ریخته‌ از باکس‌ها و خطوط هستند. نمودارهای مبهم معماری نرم افزار منجر به ایجاد سوء تفاهم می‌شود که می تواند سرعت یک تیم خوب را کاهش دهد. در صنعت واقعاً باید در تلاش برای ایجاد نمودارهای معماری نرم افزاری بهتر باشیم. امروزه تیم‌ها تمایل دارند به نمودارهای موردی تکیه کنند که روی تخته سفید (شکل1) ترسیم می‌کنند یا با استفاده از ابزارهای نمودارسازی همه‌منظوره همچون Microsoft Visio کنار هم قرار دهند. روش C4 پس از سال‌ها تلاش توسط خالق آن برای همین منظور ابداع شد. C4 برگرفته از حروف اول 4 کلمه زیر است: ContextContainer Component Code شکل 1 - نمودارهای مبهم معماری بر روی تخته سفید بنابراین مدل C4 مجموعه ای از نمودارها است که زمینه، کانتینرها، اجزا و کد یک نرم افزار را نشان می‌دهد. سلسله مراتب این نمودارها به مخاطبان مختلف اجازه می‌دهد تا معماری نرم افزار را در سطح جزئیات مورد نیاز خود درک کنند. بنابراین مدل C4 مجموعه ای از نمودارها است که زمینه، کانتینرها، اجزا و کد یک نرم افزار را نشان می‌دهد. سلسله مراتب این نمودارها به مخاطبان مختلف اجازه می‌دهد تا معماری نرم افزار را در سطح جزئیات مورد نیاز خود درک کنند. توانند چندین سیستم را توصیف کنند، برخلاف نمودارهای معماری AWS خاص، نمودارهای معماری GCP یا نمودارهای معماری Azure. سطوح مدل C4: چهار نوع مدل C4 وجود دارد که هر کدام برای مخاطبان متفاوتی است و دارای سطح متفاوتی از جزئیات است. یک سیستم نرم افزاری از یک یا چند کانتینر که در اصطلاح میزبان کد یا داده است، و برای اینکه سیستم کار کند باید در حال اجرا باشد. هر کانتینر یک چیز یا محیط زمان اجرا به طور جداگانه قابل استقرار/اجرا است مانند برنامه های کاربردی وب، برنامه های موبایل، برنامه های کاربردی دسکتاپ، پایگاه های داده، سیستم‌های فایل و غیره تشکیل شده است که هر کدام شامل یک یا چند جزء/مولفه (گروه بندی عملکردهای مرتبط که در پشت یک رابط کاملاً تعریف شده محصور شده است. همه اجزای داخل یک کانتینر معمولاً در یک فضای پردازش یکسان اجرا می شوند.) است که به نوبه خود توسط یک یا چند عنصر کد پیاده سازی می شوند. به عنوان مثال کلاس ها، رابط ها، اشیاء، توابع و غیره.عکس 2- کلیاتی که مدل c4 دربرمیگیرد در یک نگاه کلی.سطح1 : نمودار زمینه سیستم نمودار زمینه سیستم، درواقع اصطلاحا یک big picture از کلیات سیستم شما را در بردارد. کلی ترین توصیفی هستند که سیستم شما چه کاری انجام می دهد، چه کسی از آن استفاده خواهد کرد و با چه سیستم‌های دیگری تعامل خواهد داشت. یک نمودار زمینه به شما کمک می کند تا محدوده پروژه خود را توصیف کنید و به شما کمک می کند تا مشخص کنید کاربر چه کسی است و چه مشکلی را می‌خواهید حل کنید. عکس 3 - شمایی از نمودار زمینه در یک سیستم بانکداری اینترنتی. سطح 2: نمودار کانتینر نمودار کانتینر اولین گام را برای توصیف سیستم نرم‌افزاری برداشته و API ها، برنامه‌های کاربردی، پایگاه‌های داده و میکروسرویس‌هایی را که سیستم از آنها استفاده خواهد کرد نشان می‌دهد. هر یک از این برنامه‌ها یا خدمات با یک کانتینر یا ظرف نمایش داده می‌شوند و تعاملات بین آنها در سطح بالایی نشان داده می‌شود. مخاطبان مورد نظر برای این نمودار؛ افراد فنی هم در داخل تیم توسعه و هم خارج از تیم توسعه (به عنوان مثال، عملیات/پشتیبانی) می‌باشد.عکس4- شمایی از نمودار کانتینر سطح 3: نمودار مولفه یک گام عمیق‌تر از نمودار کانتینر، نمودار مؤلفه گروه‌های کد را در یک کانتینر به تفصیل شرح می‌دهد. این مؤلفه ها انتزاعی از پایگاه کد شما را نشان می دهند. این نوع نمودار با نمودار مؤلفه‌های UML قابل مقایسه است، اما برای ایجاد نمودار معماری نرم‌افزار از مجموعه‌ای از «قوانین» کمتر دقیق‌تر پیروی می‌کند. مخاطب مورد نظر برای این نمودار؛ معماران و توسعه دهندگان نرم افزار می‌باشد.عکس5- شمایی از نمودار مولفهسطح 4: کد آخرین سطح به جزئیات زیادی نیاز دارد تا نشان دهد چگونه کد یک جزء یا مولفه واحد در واقع پیاده سازی می‌شود. برای انجام این کار، می‌خواهید یک نمودار کلاس UML یا نمودار رابطه موجودیت entity relationship بسازید که مؤلفه را توصیف می‌کند. جزئیات بیشتری در مورد طراحی عناصر معماری ارائه می دهد که می توانند به کد نگاشت شوند. مدل C4 در این سطح به نمادهای موجود مانند زبان مدل سازی یکپارچه (UML)،نمودارهای رابطه موجودیت (ERD) یا نمودارهای تولید شده توسط محیط های توسعه یکپارچه (IDE) متکی است.شکل 6 - نمایی از سطح کد از همان سیستم بانکداری اینترنتیخلاصه: در این نوشته سعی بر آن بود تا با مفهوم مستندسازی و جایگاه مدل c4 پرداخته شود، کلیاتی از آن بیان شد و اهمیت و مزیت و سطوح چهارگانه این مدل نیز بیان گردید. همچنین یک نمایی از هر سطح با مثال سیستم بانکداری اینترنتی آورده شد. مدل C4 معماری بصری مشترک و معماری تکاملی را در چارچوب تیم‌های چابک و اجایل تسهیل می‌کند.مراجع:https://civilica.com/inv/20455320/6321f6deeb0077155bb1cd5a9146249f/https://www.gliffy.com/blog/c4-modelhttps://learning-notes.mistermicheels.com/architecture-design/visualizing-architecture/c4-model/https://www.infoq.com/articles/C4-architecture-model/https://en.wikipedia.org/wiki/C4_modelhttps://civilica.com/doc/455181/این مطلب، بخشی از تمرینهای درس معماری نرم‌افزار در دانشگاه شهیدبهشتی است.مدل C4 معماری بصری مشترک و معماری تکاملی را در چارچوب تیم‌های چابک تسهیل می‌کند×