جدول المحتويات

في هندسة البرمجيات ، يعد نمط التصميم مشكلة شائعة الحدوث في تصميم البرمجيات. نمط التصميم ليس تصميما نهائيا يمكن تحويله مباشرة إلى كود تم حله.

تتمثل إحدى المشكلات الرئيسية في تطوير البرامج في الاقتران المحكم للكود ، أي حتى التغيير البسيط في جزء واحد من التعليمات البرمجية يؤدي إلى تعديل أو أخطاء في جزء آخر من التعليمات البرمجية. الكود ليس صديقا لاختبار الوحدة ، والكود غير قابل لإعادة الاستخدام.

مقدمة

حاليا ، تتوفر العديد من الأساليب المعمارية مثل MVP و FLUX و MVI و MVVM التي تحل المشكلات المذكورة أعلاه. يمكننا استخدام أي نهج للحفاظ على الكود الخاص بنا بشكل صحيح بحيث يعمل كل شيء بشكل جيد ، باختصار ، حياة مطور سعيدة. تتناول هذه المقالة نمط تصميم MVVM في android وكيف يمكننا حل المشكلات الحالية مع نمط تصميم MVVM.

المكون الرئيسي في نمط تصميم MVVM هو:

  1. عرض - إعلام ViewModel بإجراءات المستخدم
  2. ViewModel - يعرض تدفقات البيانات ذات الصلة بالعرض
  3. DataModel - تلخيص مصدر البيانات. يعمل ViewModel مع DataModel للحصول على البيانات وحفظها.

شرح موجز لنمط تصميم MVVM

قدمت Google مكونات بنية Android ، والتي تضمنت ViewModel بدلا من Presenter ، وبالتالي الدليل على أنه حتى Google تدعم MVVM.

عرض النموذج

ViewModels هي فئات بسيطة تتفاعل مع طبقة المنطق / النموذج وتعرض الحالات / البيانات وليس لديها أي فكرة عن من أو كيف سيتم استهلاك هذه البيانات. يشير العرض (النشاط) فقط إلى ViewModel وليس العكس ؛ هذا يحل مشكلة اقتران ضيق لدينا. يمكن أن تحتوي طريقة العرض الواحدة على مرجع إلى نماذج عرض متعددة.

➡️
public class MainViewModel extends ViewModel {public MainViewModel() {}public String getText() {return new DataModel().getText();}}View

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

تم تقديم النمط المعماري ModelView-ViewModel إلى Android مع ولادة مكتبة DataBinding. يمكنك تمكين ربط البيانات من app.gradle.

➡️
dataBinding{enabled = true}

Add these lines in-app.Gradle inside android{} tag. Then put your XML layout code under tag. This will generate a binding class, and you can access this class from the activity. You can see we can directly access the getText() method from XML.

➡️
<?xml version="1.0" encoding="utf-8"?><layout><data><variablename="mainViewModel"type="com.g.mvvmproject.MainViewModel" /></data><RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:app="http://schemas.android.com/apk/res-auto"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="match_parent"tools:context=".MainActivity"><TextViewandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:text="@{mainViewModel.text}"app:layout_constraintBottom_toBottomOf="parent"app:layout_constraintLeft_toLeftOf="parent"app:layout_constraintRight_toRightOf="parent"app:layout_constraintTop_toTopOf="parent" /></RelativeLayout></layout>

بعد عدم نشاط setContentView ، تقوم بتعيين مرجع لنموذج العرض.

➡️
public class MainActivity extends AppCompatActivity {private ActivityMainBinding mActivityMainBinding;private MainViewModel mainViewModel;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);mActivityMainBinding = DataBindingUtil.setContentView(this, R.layout.activity_main);mainViewModel = new MainViewModel();mActivityMainBinding.setMainViewModel(mainViewModel);}}

نموذج البيانات

يحتفظ DataModel ببيانات التطبيق. لا يمكنه التحدث مباشرة إلى العرض. بشكل عام ، يوصى بعرض البيانات على ViewModel من خلال الملاحظات.

➡️
public class DataModel {String text="Hello World ";public String getText() {return text + text;}}

مزايا استخدام نمط تصميم MVVM

  • يتم زيادة قابلية اختبار التعليمات البرمجية الخاصة بك.

في مقتطف الشفرة أدناه ، نختبر طريقة getText () في ViewModel. يمكنك السخرية من بياناتك والتحقق من النتيجة المتوقعة.

➡️
@RunWith(AndroidJUnit4.class)public class ExampleInstrumentedTest {@Testpublic void emailValidator_CorrectEmailSimple_ReturnsTrue() {String expected = "Hello World Hello World ";assertEquals(expected, new MainViewModel().getText());}}
  • تم فصل الرمز الخاص بك.
  • هيكل الحزمة أسهل للتنقل.
  • المشروع أسهل في الصيانة.
  • يمكن لفريقك إضافة ميزات جديدة بسرعة أكبر.

استنتاج

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

➡️
يمكن العثور على مثال بسيط لتطبيق MVVM هنا.

سرينيفاسا سيناث

سرينيفاسا سيناث