تدفقات البيانات أحادية الاتجاه: مقدمة إلى بنية MVI في نظام أندرويد

  • تطبيق تدفق بيانات أحادي الاتجاه لتقليل ترابط التعليمات البرمجية.
  • تقسيم المسؤوليات بين النموذج والعرض والمفسر لتحسين قابلية الصيانة.
  • مقارنة فنية بين نهجي MVI و MVVM وفقًا لاحتياجات المشروع.

تدفقات البيانات أحادية الاتجاه: مقدمة إلى بنية MVI في نظام أندرويد

إذا كنت مطور تطبيقات وتشعر بأنك متأخر قليلاً عن أحدث التوجهات، فلا تقلق، فهذا أمر طبيعي. وقد كثر الحديث مؤخراً عن... MVI (مترجم نموذج العرض)هذا نمط يكتسب شعبية لأنه يحاول إضفاء النظام على الفوضى التي تنشأ أحيانًا عندما تنمو التطبيقات وتصبح صعبة الإدارة.

يهدف هذا النهج أساسًا إلى جعل الكود أنظف وأسهل في الصيانةيمنع هذا الأمر تحوّل الأمور إلى فوضى عارمة من التبعيات. الفكرة هي أن المعلومات تتدفق في اتجاه واحد فقط، مما يوفر علينا الكثير من المتاعب عند تصحيح الأخطاء أو إضافة ميزات جديدة دون التأثير على ما يعمل بالفعل.

ما هو نمط MVI حقاً؟

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

المكون السري هو مترجميعمل هذا المكون كوسيط يستقبل إجراءات المستخدم، ويعالجها، ويُعلم النموذج بتحديث المعلومات. وبمجرد تغيير النموذج، يتم إخطار العرض وتحديثه. تدفق البيانات أحادي الاتجاه هذا هو المفتاح لمنع التطبيق من أن يصبح غير قابل للإدارة عندما يكون لدينا هياكل بيانات معقدة للغاية أو متداخلة.

تطبيق MVI في الكود: مثال عملي

لتجاوز الجانب النظري، تخيل أننا نريد إنشاء عداد بسيط في لغة كوتلن. في هذا السيناريو، سيكون لدينا فئة الدولة (الحالة) التي تخزن الرقم الحالي و أ فئة الأسهم (الفعل) يُعرَّف بأنه sealed class لتقييد ما يمكن أن يحدث في التطبيق.

  • العرض (النشاط الرئيسي): يشترك هذا العنصر في حالة ViewModel. عندما يضغط المستخدم على الزر، لا يغير العرض الرقم نفسه، بل يُفعّل إجراءً باستخدام طريقة مثل sendAction(Action.ButtonClicked).
  • نموذج العرض: هنا يكمن سرّ النجاح. يحتفظ نموذج العرض بـ MutableLiveData مع الدولة. عند تلقي الإجراء، استخدم الطريقة copy() لإنشاء حالة جديدة مع زيادة العداد، وبالتالي إخطار العرض.
  • النموذج: الأمر يتلخص في تحديد البيانات والإجراءات الممكنة، مع الحفاظ على منطق منفصل تمامًا من واجهة المستخدم الرسومية.

MVI مقابل MVVM: أيهما تختار؟

من الطبيعي أن نتساءل عما إذا كان MVI سيحل محل MVVM. والحقيقة هي أنهما ليسا متنافسين، بل أدوات مختلفة. يعتمد نمط MVVM على نمط المراقب بحيث يتم تحديث العرض تلقائيًا، وهو أمر رائع للتطبيقات البسيطة وسريعة التنفيذ.

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

في نهاية المطاف، يتيح لنا اعتماد MVI بناء التطبيقات قابل للتطوير وقويحيث تكون السيطرة على الدولة كاملة والترابط ضئيلاً، مما يسهل بشكل كبير العمل الجماعي وتطور البرمجيات على المدى الطويل.


أضف كمصدر مفضل