🎮 چجوری معماری و ساختار نرم‌افزار رو مستند و نتقل کنیم؟

🎮 چجوری معماری و ساختار نرم‌افزار رو مستند و نتقل کنیم؟

یادگیری C4 Model با مثال واقعی - بخش اول


💡سناریو:

فرض کن یه نرم‌افزار داریم که هر چند ساعت‌یک‌بار میره وب‌سایت‌هایی که بهش معرفی کردیم رو بازدید میکنه، خبرهای تازه‌شون رو می‌خونه و بعد متنشون رو از طریق ollama با یک مدل‌زبانی خلاصه و چکیده می‌کنه؛ بعد به صورت روزانه یه خبرنامه مختصر و کاربردی می‌سازه و برای کاربرهایی که عضو شدن میفرسته. کاربرها هم میتونن مشخص کنن که از کدوم سایت‌ها خبر بگیرن، ساعت ارسال خبرنامه کی باشه، و اینجور چیزها!

(توی این مثال سیستممون وابستگی خارجی مثل سایت‌ها و سرور ایمیل هم داره)


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

تعداد المان‌های مورد استفاده در مدل C4 خیلی ساده و معدود است. در نتیجه خیلی سریع می‌شه یادگرفت.


1️⃣سطح اول: دیاگرام Context

در سطح context ما یه نگاه کلان به سیستم می‌اندازیم، اینکه نمای کلی و سیستم‌هایی که با سیستم ما در ارتباطن چجوری هستن.


- سیستم اصلی: News Summarizer

- کاربر: User (Subscriber)

- کاربر: User (Admin)

- سیستم‌های بیرونی:

- وب‌سایت‌های خبری

- سرویس Ollama

- سرویس SMTP Server


📇 ارتباط‌ها:

- سیستم خبرها رو از سایت‌های خبری میگیره.

- خبرها رو برای خلاصه‌سازی به Ollama میفرسته و جواب خلاصه‌شده میگیره.

- خبرنامه رو از طریق SMTP برای کاربرها میفرسته.


2️⃣سطح دوم: دیاگرام Container

سطح context رو به مثابه کشور فرض کنید و سطح container رو استان‌های داخل مرزهای کشور اون داستان ارتباطات با سیستم‌های بیرونی هم مثل استان‌های مرزی که ارتباط فیزیکی با کشورهای همسایه دارن (سیستم‌های بیرونی). حالا بیاین استان‌های درون این کشور رو یعنی containerها رو نگاه کنیم:


- کانتینر Scheduler: مسئول زمانبندی و اجرا کردن وظایف به‌صورت منظم

- کانتینر News Collector: جمع‌آوری اخبار از وبسایت‌ها

-کانتینر Ollama Client: ارتباط با ollama برای خلاصه‌سازی اخبار

- کانتینر Newsletter Generator: تولید خبرنامه

- کانتینر SMTP Client: ارسال خبرنامه‌ها

- کانتینر Database: نگهداری اطلاعات کاربرها، منابع خبری، تنظیمات، اخبار خلاصه شده


⚙️ دیاگرام C4 رو می‌تونیم هم با کد بسازیم (سینتکس PlantUML یا سینتکس structurizr یا...) البته هم با ترسیم می‌شه به کد رسید هم با کد به ترسیم بصری.


قسمت بعدی همین دو بخش رو با دیاگرام و کد مرور می‌کنیم. بخش‌های بعدی هم همین مسیر و سناریو رو برای دو تا C بعدی یعنی component و code. بعدش هم احتمالا ویدیو مرور همین داستان.


💬 موافقید با این مسیر؟