همه چیز درباره مستندسازی معماری نرم افزار با روش C4

1: مقدمهامروزه صنعت نرم افزار با سرعت زیادی رو به رشد است و روز به روز بر تعداد کاربران حوزه نرم افزار اضافه می شود. اما آیا تا کنون به این نکته فکر کرده اید که این نرم افزار ها چگونه ساخته می شوند و از چه بخش های فنی تشکیل شده اند؟ به عنوان مثال یک وبسایت فروشگاهی را در نظر بگیرید. وقتی شما این سایت را باز می کنید، یک مجموعه ای از کد ها که توسط توسعه دهندگان مختلف توسعه داده شده اند اجرا می شوند تا این سایت به شما نمایش داده شود. این کد ها ممکن است توسط چندین توسعه دهنده مختلف نوشته شده باشند که در گذر زمان تغییر هم می کنند. این کد ها و نوه قرار گرفتن اجزای ان ها در کنار هم باید مستند سازی شود، به این دلیل که تغییرات در نرم افزار یک امر بسیار رایج است و تفاوتی که نرم افزار به عنوان مثال با رشته مهندسی عمران دارد همین تغییرات است! وقتی یک ساختمان ساخته می شود، ساخته شده و تمام شده و تا 30 سال و یا بیشتر به همان شکل و با همان اسکلت باقی می ماند. اما نرم افزار به علل مختلف، از جمله پیدایش نیاز های جدید از سوی مشتریان و پدیدار شدن تکنولوژی های جدید، تغییر می کند.مقایسه معماری نرم افزار و نقشه ساختمان2: معرفی کلی C4:روش C4 یک روش برای مستند سازی معماری نرم افزار است که به توسعه دهندگان نرم افزار کمک می کند تا بتوانند معماری کد های یک سیستم نرم افزاری را در سطوح مختلف توصیف کنند. نام این روش برگرفته از 4 نموداری است که این روش از آن ها برای مستند سازی یک نرم افزار استفاده می کند، این نمودار ها عبارت اند از: 1: Context Diagram (سطح اول) 2: Container Diagram (سطح دوم) 3: Component Diagram (سطح سوم) 4: Code Diagram (سطح چهارم)هر چه از سطح اول به پایین تر می آییم، به جزییات نزدیک تر می شویم. یعنی به عنوان مثال اگر Context Diagram یا همان نمودار مولفه را باز کنیم و جزیی تر به آن نگاه کنیم، به Container Diagram می رسیم و به همین ترتیب تا انتها. در واقع این روش این امکان را به ما می دهد که بتوانیم روی هر بخش از معماری نرم افزار زوم کنیم و به صورت جزیی تر به اجزای داخلی آن بخش پی ببریم. شکل زیر نمایانگر جزییات روابط بین این 4 نمودار است:سطوح مختلف نمودار های رویکرد C4در ادامه به تفصیل به توضیح هر کدام از این نمودار ها خواهیم پرداخت.1-2: Context Diagram:Context Diagram نمایانگر ارتباطات یک سیستم نرم افزاری با دنیای بیرون است. این دنیای بیرون می تواند شامل کاربران و یا سایر سیستم ها باشد. درک این نمودار برای افرادی که دارای دانش فنی نیستند هم بسیار راحت است. مثالی از این نمودار را در شکل زیر می بینیم:مثالی از نمودار Context یک سیستم نرم افزاری بانکیشکل فوق نمودار مولفه یک سیستم بانکداری اینترنی یا همان Internet Banking System است. این سیستم با سیستم های دیگری مانند سیستم ایمیل (E-mail System) و سیستم پردازنده مرکزی (Mainframe Banking System) در ارتباط است. همچنین با کاربرانی که مشتری نامیده می شود (Personal Banking Customer) نیز در ارتباط است.این نمودار همچنین نوع رابطه بین اجزا را نیز بیان می کند. به عنوان مثال سیستم بانکداری اینترنتی، از سیستم ایمیل برای ارسال ایمیل استفاده می کند. همچنین مشتریان به کمک سیستم بانکداری اینترنتی می توانند موجودی خود را ببیند و عملیات گوناگون مانند پرداخت انجام بدهند.2-2: Container Diagram:در سطح دوم، Container Diagram قرار دارد. بیایید ابتدا با مفهوم Container آشنا شویم. Container یک واحد مستقلی از یک سیستم نرم افزاری است که می تواند به صورت خودجوش و با اتکا بر خود اجرا شود. یک برنامه دسکتاپ یا یک برنامه موبایل نمونه هایی از Container هستند. حال وقت آن است که مثال بانکداری را در نظر بگیریم. اگر بخواهیم این نمودار را برای سیستم بانکداری اینترنتی ترسیم کنیم، به شکل زیر می رسیم:مثالی از نمودار Container برای سیستم بانکداری اینترنتیهمانطور که در شکل فوق مشخص است، Container هایی مانند اپلیکیشن موبایل (Mobile App) و اپلیکیشن یک صفحه ای (Single-Page Application) و اپلیکیشن وب (Web Application) و API Application و پایگاه داده (Database) در این سیستم وجود دارند. همچنین روابط بین این اجزا نیز نشان داده شده است. مثلا اپلیکیشن موبایل، به کمک API، از پایگاه داده اطلاعات را می خواند و به کاربر نمایش می دهد. گرپه هر کدام از این Container ها می توانند با سایر Context ها نیز در ارتباط باشند، مثلا API ها برای ارسال ایمیل از سیستم ایمیل استفاده میکنند.3-2: Component Diagram:در این نمودار جزییات هر کدام از Container ها نشان داده می شود و Container ها به اجزای ریز تر خرد می شوند و نشان داده می شود که هر Container از چه Component هایی ساخته شده است. همنین ارتباط هر Component با سایر Component ها و Container ها و سیستم ها و کاربران نشان داده می شود.برای مثال اگر بخواهیم Component Diagram سیستم بانکداری اینترنتی را رسم کنیم به شکل زیر می رسیم:مثالی از نمودار Component برای سیستم بانکداری اینترنتیبه عنوان مثال Reset Password Controller که یک مجموعه کد است که به کاربران این امکان را می دهد که رمز عبورشان را بازیابی کنند یک Component است که برای این کار از Security Component استفاده می کند. همچنین از این Component در اپلیکیشن موبایل جهت بازیابی رمز عبور استفاده می شود.3-2: Code Diagram:آخرین نمودار در روش C4، نمودار Code است. وقتی به جزییات هر Component نگاه می کنیم، به یک سری کد پی می بریم. در واقع هر Component از یک سری کد تشکیل شده است. در این مرحله از استاندارد UML کمک گرفته شده است. پیاده سازی کد ها را می توان به کمک نمودار ها مختلف UML مانند نمودار کلاس و یا ER به تصویر کشید. مثالی از نمودار Codeهمانطور که در شکل فوق مشخص است، در این نمودار جزییات کد زده شده داخل هر Component از جمله کلاس ها، واسط ها، اشیا، جداول پایکاه داده، توابع و ... به تصویر کشیده شده اند. 3: نتیجه گیری: معماری کلی نرم افزار باید یک مستند داشته باشد تا درک نرم افزار برای توسعه دهندگان جدید که به سر کار می آیند راحت تر باشد و از سمت دیگر، در مدت زمان آموزش و یادگیری معماری نرم افزار موجود صرفه جویی شود. یکی از این روش ها برای مستند سازی معماری نرم افزار روش C4 بود که جزییات این روش را با هم دیدیم. تجربه نشان داده است که داشتن مستندات در حوزه معماری نرم افزار در یک پروژه نرم افزاری می تواند کمک شایانی در وقت و هزینه بکند، پس یادگیری این موضوع امری مهم است.4: منابع: https://c4model.comhttps://www.infoq.com/articles/C4-architecture-modelhttps://en.wikipedia.org/wiki/C4_modelhttps://www.gliffy.com/blog/c4-modelاین مطلب، بخشی از تمرینهای درس معماری نرم‌افزار در دانشگاه شهیدبهشتی است.#معماری_نرم_افزار_بهشتی #معماری_نرم_افزار #نرم_افزار #مستند_معماری_نرم_افزار