MVC MVP MVVM MVI

في عالم السوفتوير هتقابل أنماط تصميم زي MVC و MVP و MVVM و MVI.

خلينا ندردش شوية عن كل واحد فيهم ونشوف إيه الفرق بينهم وإزاي كل واحد بيأثر على طريقة كتابة الكود وتنظيمه.


📌 الـ MVC (Model-View-Controller)

ده من أقدم الأنماط اللي ظهرت، وبيستخدم لحد دلوقتي في مشاريع كتير في مجال الويب. الفكرة ببساطة إنك بتقسم الكود لـ 3 أجزاء:

⚡️ الـ Model: بيحتوي على البيانات والـ Business Logic.

⚡️ الـ View: الجزء المسؤول عن الـ UI وعرض البيانات للمستخدم.

⚡️ الـ Controller: المسؤول عن الربط ما بين الـ Model والـ View. يعني بياخد البيانات من الـ Model ويوديها للـ View علشان تظهر، وبياخد الـ Input من الـ View ويعمل Processing في الـ Model.


ده نمط بسيط ومناسب للتطبيقات اللي حجمها صغير أو متوسط. لكن لما المشروع يكبر أحيانًا الـ Controller بيبقى كبير ومعقد، وده بيخلي التعامل معاه صعب سواء التعديل أو الإضافة.


📌 الـ MVP (Model-View-Presenter)

الـ MVP بيعتبر تطوير شوية عن MVC، والفرق الرئيسي هنا هو إن الـ Presenter بياخد مكان الـ Controller.

⚡️ الـ Model: برضو بيحتوي على البيانات والـ Business Logic.

⚡️ الـ View: زي MVC، مسؤول عن عرض الـ UI.

⚡️ الـ Presenter: بيشتغل كـ "وسيط" بين الـ Model والـ View، لكن بعكس الـ Controller في MVC، الـ View في الـ MVP بيكون أكتر "غباءً" يعني الـ View مش بتعمل حاجة غير إنها تستعرض اللي الـ Presenter بيبعتُه.

الـ Presenter بيكون مفصول تمامًا عن الـ View، وده بيسهل اختبار الـ Presenter بشكل مستقل، وده اللي بيخلي MVP أكتر قابلية للاختبار.


📌 الـ MVVM (Model-View-ViewModel)

ده النمط الأكثر استخدامًا في التطبيقات الحديثة، خاصة في الموبايل و Desktop Applications. الفرق هنا إننا بنضيف عنصر جديد اسمه ViewModel:

⚡️ الـ Model: برضو زي ما هو، فيه البيانات والـ Business Logic.

⚡️ الـ View: بتمثل الـ UI.

⚡️ الـ ViewModel: المسؤول عن إدارة حالة الـ View والتعامل مع البيانات اللي هتظهر فيه. بيخلي الـ View "ذكية" لأنها بتراقب الـ ViewModel وتستجيب لأي تغييرات أوتوماتيك.


الجميل في MVVM إنه بيشتغل مع الـ Data Binding، يعني لما البيانات تتغير في الـ ViewModel، الـ View بتتحدث لوحدها. وده بيخلي الكود كويس وأسهل في الصيانة.


📌 الـ MVI (Model-View-Intent)

آخر نمط معانا هو MVI، وده نوعًا ما مختلف عن الباقيين. هنا الفكرة الأساسية هي إن كل حاجة في التطبيق عبارة عن "Intent"، يعني بتبدأ بنية (Intent) معينة، والـ View بتتحدث بناءً عليها.

⚡️ الـ Model: بيحتوي على الحالة الحالية للبيانات.

⚡️ الـ View: بتمثل الـ UI اللي بيعرض البيانات بناءً على الـ Model.

⚡️ الـ Intent: بيستخدم للتفاعل مع الـ Model وتحديث البيانات.


الـ MVI بيتناسب أكتر مع الـ Reactive Programming، يعني مناسب أكتر للتطبيقات اللي بتتعامل مع الـ Streams والـ Events بشكل متواصل زي تطبيقات الـ Chat أو الـ Real-Time Apps.


اختيارك للنمط المناسب بيختلف حسب نوع المشروع اللي شغال عليه وحجمه.

الـ MVC مناسب لو المشروع بسيط أو صغير، بينما الـ MVVM و MVI هيكونوا خيار أفضل لو بتشتغل على تطبيقات كبيرة أو معقدة.