در مورد C4: لزوم یادگیری برای توسعه‌دهنده + وجوب یادگیر برای معمار نرم‌افزار!

Post Image

در مورد C4: لزوم یادگیری برای توسعه‌دهنده + وجوب یادگیر برای معمار نرم‌افزار!


*️⃣چرا C4 به وجود آمد؟

C4 به این دلیل معرفی شد که مدل‌های سنتی معماری نرم‌افزار مشکل داشتند. UML به‌عنوان یک راه‌حل استاندارد معرفی شد، اما استقبال از آن کم بود، چون:


- پیچیدگی زیادی داشت.

- ابزارهاش سخت و قدیمی بودند.

- در روش‌های Agile کمتر مورد استفاده قرار می‌گرفت.

- خیلی توسعه‌دهنده‌ها دوستش نداشتن یا بلد نبودن.


نتیجه این شد که تیم‌های نرم‌افزاری معمولاً از نمودارهای بی‌نظم و پراکنده در Confluence یا روی تخته‌های سفید استفاده می‌کردن که باعث عدم وضوح در معماری می‌شد. C4 به عنوان راهی برای ساده‌تر کردن مستندسازی معماری بدون نیاز به UML مطرح شد.


مفاهیم پایه C4

C4 مخفف چهار سطح از معماری نرم‌افزار است:


1️⃣سطح سیستم (System Context) – نشون می‌ده سیستم موردنظر در چه بستری قرار داره و چه افرادی یا سیستم‌هایی باهاش تعامل دارن.


2️⃣سطح کانتینر (Containers) – نرم‌افزار شامل چه برنامه‌ها (Web App, Backend) و دیتابیس‌هایی است. (ربطی به Docker نداره!)


3️⃣سطح کامپوننت (Components) – هر کانتینر از چه ماژول‌هایی تشکیل شده.


4️⃣سطح کد (Code Level) – جزئیات پیاده‌سازی کد در سطح کلاس‌ها و توابع.


مدل C4 مثل یک نقشه‌ی گوگل مپ برای معماری نرم‌افزار عمل می‌کنه که می‌تونیم از سطح کلی، زوم کنیم و به جزئیات دقیق‌تر برسیم.


نتیجه

در حقیقت C4 یک روش ساده ولی قدرتمند برای مستندسازی معماری نرم‌افزاره که مشکلات UML (بخوانید بدبختی‌ها) را نداره و به تیم‌ها کمک می‌کنه تا ساختار سیستم‌هاشون رو واضح و قابل‌درک مستند کنن. یادگیریش خیلی ساده و سریعه و زبون خوبی برای انتقال مفهومه (برای من چندین ساله که تبدیل شده به معادل notepad، ولی برای معماری). ابزارهای مختلفی مثل PlantUML براش هست و توی draw.io هم می‌تونید ترسیم کنید (یا mermaid یا با structurizr یا...)، البته لیست کامل ابزارها رو اینجا می‌تونید ببینید.


کوتاه نوشتم که خونده بشه و اگر دوست داشتید عمیق‌تر شیم روش...(⚙️)

وب‌سایت مرجع C4

به‌عنوان مثال اینجا یه اپلیکیشن ToDo رو می‌تونید ببینید (از سطح کلان تا جزئیات)


💬 شما چجوری مستند می‌کنید؟ چجوری طراحی سیستم رو منتقل می‌کنید؟