Posts

Showing posts from July, 2022

Modular Monolith — Cheat Sheet

🎯 يعني إيه Modular Monolith؟ تطبيق واحد Deploy واحد Runtime واحد متقسم داخليًا لوحدات (Modules) مستقلة فكّر فيه: Microservices في الدماغ Monolith في التنفيذ 🧩 التقسيم الصح ❌ Controllers / Services / Repositories ✅ Business Capabilities Orders | Inventory | Billing | Users | Notifications كل Module: مسؤولة عن Business واحد مالكة منطقها وداتاها 📁 Folder Structure النموذجي Module ├─ Application (Use cases) ├─ Domain (Entities, Rules) ├─ Infrastructure (DB, Repos) ├─ API (Controllers) └─ Module.cs (Registration) 🔒 القواعد الذهبية ❌ مفيش Module تكلم DB بتاعة غيرها ❌ مفيش Classes مشتركة عشوائي ✅ التواصل يتم من خلال API أو Events فقط 🔁 طرق التواصل 1️⃣ Synchronous (Direct Call) Interface Dependency Injection In-memory Fast 📌 استخدمه: Core business Reads عمليات لازم ترجع فورًا ⚠️ عيبه: Strong Coupling Cascading Failures 2️⃣ Asynchronous (Messaging) Events / Commands Fire-and-forget Message Contracts 📌 استخدمه: Side Effects Integrations Fault Isolation ⚠️ عيبه:...
الـ Modular Monolith بيتعمل إزاي؟ (بـ Folder Structure + Diagram + شرح مصطلحات) أولًا: الـ Folder Structure (نضيف وعالوضع) نفترض إننا شغالين على سيستم E-Commerce بسيط: Plaintext /src ├─ /BuildingBlocks (الأساسيات اللي الكل بيستخدمها) │ ├─ /Messaging (شغل الربط) │ │ ├─ IEvent.cs │ │ ├─ IEventBus.cs │ │ └─ OutboxMessage.cs │ ├─ /Domain (القواعد العامة) │ │ └─ Entity.cs │ └─ /Infrastructure (التعامل مع الداتا) │ └─ DbContextBase.cs │ ├─ /Modules (قلب السيستم) │ ├─ /Orders (موديول الطلبات) │ │ ├─ OrdersModule.cs │ │ ├─ /Application (الـ Use Cases) │ │ ├─ /Domain (الـ Logic بتاع الـ Orders) │ │ │ ├─ Order.cs │ │ │ └─ Events │ │ │ └─ OrderPlacedEvent.cs │ │ ├─ /Infrastructure (الـ Database الخاصة بالـ Orders) │ │ │ └─ OrdersDbContext.cs │ │ └─ /API (الـ Controllers) │ │ │ ├─ /Inventory (موديول المخازن) │ │ ├─ InventoryModule.cs │ │ └─ ... (نفس التقسيمة) │ │ │ └─ /Notifica...