java - نمط MVC على Android




design-patterns model-view-controller (14)

وحدة تحكم عرض النموذج (MVC)

وصف:

  • عندما نحتاج إلى مشاريع كبيرة رئيسية في تطوير البرمجيات ، يتم استخدام MVC بشكل عام لأنها طريقة عالمية لتنظيم المشاريع.
  • يمكن للمطورين الجدد التكيف بسرعة مع المشروع
  • يساعد في تطوير المشاريع الكبيرة والمنصة أيضا.

نمط MVC هو في الأساس هذا:

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

ميزة هامة لـ MVC: يمكننا تعديل إما أن النموذج أو العرض أو وحدة التحكم لا يزالان غير مؤثرين على النموذج الآخر

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

هل من الممكن تطبيق نموذج وحدة التحكم في العرض في Java for Android؟

أم أنها نفذت بالفعل من خلال الأنشطة؟ أم أن هناك طريقة أفضل لتنفيذ نمط MVC لنظام Android؟


أتفق مع JDPeckham ، وأعتقد أن XML وحده لا يكفي لتنفيذ جزء واجهة المستخدم من التطبيق.

ومع ذلك ، إذا كنت تعتبر النشاط جزءًا من العرض ، فسيكون تنفيذ MVC واضحًا تمامًا. يمكنك تجاوز Application (كما يتم إرجاعه بواسطة getApplication () في النشاط) ومن هنا يمكنك إنشاء وحدة تحكم تبقى طوال عمر التطبيق الخاص بك.

(بدلاً من ذلك ، يمكنك استخدام نمط المفرد كما هو موضح في وثائق التطبيق)


أفضل مورد وجدته لتنفيذ MVC على Android هو هذا المنشور :

لقد اتبعت نفس التصميم لأحد مشروعاتي ، وعملت بشكل رائع. أنا مبتدئ على Android ، لذا لا يمكنني القول أن هذا هو الحل الأفضل.

لقد قمت بإجراء تعديل واحد: قمت بإنشاء نموذج وحدة تحكم لكل نشاط في فئة التطبيق بحيث لا يتم إعادة إنشاء هذه الصور عند تغيير وضع عمودي - أفقي.


بعد بعض البحث ، فإن الإجابة الأكثر منطقية هي ما يلي:

تم بالفعل تنفيذ MVC في Android على النحو التالي:

  1. عرض = تخطيط والموارد وفصول مدمجة مثل Button مشتق من android.view.View .
  2. المراقب = النشاط
  3. نموذج = الطبقات التي تنفذ منطق التطبيق

(وهذا يعني عدم وجود منطق نطاق التطبيق في النشاط.)

الأمر الأكثر منطقية لمطور صغير هو اتباع هذا النمط وليس محاولة القيام بما قررت Google عدم القيام به.

ملاحظة: ملاحظة أنه يتم إعادة تشغيل النشاط أحيانًا ، لذلك لا يوجد مكان لبيانات النموذج (الطريقة الأسهل للتسبب في إعادة التشغيل هي حذف android:configChanges="keyboardHidden|orientation" من XML وتحويل جهازك).

تصحيح

قد نتحدث عن MVC ، ولكن سيكون الأمر كذلك لقول FMVC ، Framework - Model - View - Controller . يفرض إطار العمل (نظام تشغيل أندرويد) فكرته عن دورة حياة المكونات والأحداث ذات الصلة ، وعمليًا ، يتحمل المراقب المالي ( Activity / Service / BroadcastReceiver ) المسؤولية عن التعامل مع هذه الأحداث الإطارية (مثل onCreate () ). . هل يجب معالجة إدخال المستخدم بشكل منفصل؟ حتى إذا كان يجب ، لا يمكنك فصله ، كما تأتي أحداث إدخال المستخدم من Android.

على أي حال ، كلما قل الرمز الذي لم يتم تحديده على Android خاصتك في Activity / Service / BroadcastReceiver ، كان ذلك أفضل.


تمثل الإجراءات والمشاهدات والأنشطة على نظام التشغيل Android الطريقة المختبرة للعمل مع Android UI وهي تنفيذ للنموذج - view-viewmodel (MVVM) ، وهو نمط مماثل من الناحية الهيكلية (في نفس العائلة) -مراقب.

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


على الرغم من أن هذه المشاركة قديمة ، إلا أنني أود إضافة الرقمين التاليين للإبلاغ عن التطوير الأخير في هذا المجال لنظام Android:

android-binding - توفير إطار عمل يعمل على تجليد عناصر واجهة التعامل مع عرض android لنموذج البيانات. فهو يساعد على تنفيذ أنماط MVC أو MVVM في تطبيقات Android.

roboguice - RoboGuice يأخذ التخمين من التنمية. قم بحقن العرض أو الموارد أو خدمة النظام أو أي كائن آخر ، واترك RoboGuice يهتم بالتفاصيل.


في Android ، ليس لديك MVC ، ولكن لديك ما يلي:

  • يمكنك تعريف واجهة المستخدم الخاصة بك في ملفات XML المختلفة من خلال القرار ، والأجهزة ، إلخ.
  • يمكنك تحديد resources الخاصة بك في ملفات XML المختلفة حسب الإعدادات المحلية ، إلخ.
  • يمكنك توسيع ListActivity مثل ListActivity و TabActivity والاستفادة من ملف XML بواسطة inflaters .
  • يمكنك إنشاء العديد من الفئات التي ترغب فيها لمنطق عملك.
  • لقد تم بالفعل كتابة الكثير من Utils لك - DatabaseUtils، Html.

كان من المستغرب أن نرى أن أيا من المشاركات هنا أجاب على السؤال. فهي إما عامة جدًا أو غامضة أو غير صحيحة أو لا تتناول التنفيذ في Android.

في MVC ، طبقة العرض لا تعرف سوى كيفية إظهار واجهة المستخدم (UI). إذا كانت هناك حاجة إلى أي بيانات لهذا ، فإنها تحصل عليه من طبقة النموذج . لكن "العرض" لا يطلب من النموذج مباشرة العثور على البيانات ، فإنه يفعل ذلك من خلال المراقب المالي . لذلك ، تستدعي وحدة التحكم النموذج لتوفير البيانات المطلوبة للعرض. بمجرد أن تصبح البيانات جاهزة ، يقوم المراقب المالي بإعلام " العرض" بأن البيانات جاهزة ليتم الحصول عليها من الطراز . الآن يمكن للعرض الحصول على البيانات من النموذج .

يمكن تلخيص هذا التدفق على النحو التالي:

تجدر الإشارة إلى أن العرض يمكن أن يعرف عن توفر البيانات في النموذج إما من خلال وحدة التحكم - والمعروفة أيضًا باسم MVC السلبي - أو بمراقبة البيانات في النموذج عن طريق تسجيل الملاحظات إليه ، وهو MVC النشط .

في الجزء المتعلق بالتنفيذ ، من أول الأشياء التي تتبادر إلى الذهن هو ما يجب استخدام مكون android للعرض؟ Activity أو Fragment ؟

الجواب هو أنه لا يهم ، ويمكن استخدام كليهما. يجب أن يكون العرض قادرًا على تقديم واجهة المستخدم (UI) على الجهاز والرد على تفاعل المستخدم مع واجهة المستخدم. يوفر كل من Activity Fragment الطرق المطلوبة لذلك.

في نموذج التطبيق المستخدم في هذه المقالة ، استخدمت Activity طبقة العرض ، ولكن يمكن أيضًا استخدام Fragment .

التطبيق عينة كاملة يمكن العثور عليها في فرع "mvc" من بلدي ريبو جيث here .

لقد تعاملت أيضا مع إيجابيات وسلبيات بنية MVC في الروبوت من خلال مثال هنا .

لأولئك المهتمين ، لقد بدأت سلسلة من المقالات حول بنية التطبيق الروبوت here والتي أقارن فيها البنى المختلفة ، أي MVC ، MVP ، MVVM ، لتطوير تطبيقات الروبوت من خلال تطبيق عمل كامل.


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

  • نموذج: ما تقدم
  • عرض: كيفية تقديم
  • المراقب المالي: الأحداث ، وإدخال المستخدم

فكّر أيضًا بهذه الطريقة: عند برمجة نموذجك ، لا داعي لأن يقلق النموذج بشأن العرض (أو رمز معين في النظام الأساسي). سيقول النموذج في طريقة العرض ، لا يهمني إذا كان العرض الخاص بك هو Android أو iOS أو Windows Phone ، هذا ما أحتاجه لتقديمه. سيتعامل العرض مع شفرة العرض الخاصة بالنظام الأساسي فقط.

وهذا مفيد بشكل خاص عند استخدام Mono لمشاركة النموذج لتطوير تطبيقات عبر النظام الأساسي.


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

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

إذا قمت بتحديد وجهات نظرك وتخطيطاتك في ملفات XML ، فقم بتحميل الموارد من مجلد res ، وإذا كنت تتجنب أكثر أو أقل اختلاط هذه الأشياء في شفرتك ، فإنك على أية حال تتبع نمط MVC.


نمط MVC الخاص بنظام Android هو (نوع) تم تنفيذه مع فئات Adapter الخاصة به. يستبدلون وحدة تحكم مع "محول". يوضح وصف حالات المحول:

يعمل كائن المهايئ كجسر بين محول Adapter والبيانات الأساسية لهذا العرض.

أنا أبحث فقط في هذا عن تطبيق Android الذي يقرأ من قاعدة بيانات ، لذلك لا أعرف مدى نجاحها حتى الآن. ومع ذلك ، يبدو الأمر وكأنه نموذج كيو تي في العرض - المندوب ، الذي يزعمون أنه خطوة من نمط MVC التقليدي. على الأقل على جهاز الكمبيوتر ، يعمل نمط كيو تي بشكل جيد.


وفقا لشرح أن فريق Xamarin أوضح (على MVC iOS "أعلم أنه يبدو غريبا ، ولكن انتظر لحظة"):

  • النموذج (البيانات أو منطق التطبيق) ،
  • طريقة العرض (واجهة المستخدم) و
  • وحدة تحكم (رمز خلف).

أستطيع أن أقول هذا:

النموذج على Android هو ببساطة كائن قابل للتجزئة. العرض هو تخطيط XML ، ووحدة التحكم هي (النشاط + جزء منه).

* هذا مجرد رأيي ، وليس من أي مورد أو كتاب.



Model-View-Controller في Android في حوالي عام 2011 ، عندما بدأ Android يزداد شيوعًا ، ظهرت أسئلة الهندسة المعمارية بشكل طبيعي. نظرًا لأن MVC كان أحد أشهر أنماط واجهة المستخدم في ذلك الوقت ، حاول المطورون تطبيقه على Android أيضًا.

النموذج يمثل الموديل مجموعة من الفئات التي تصف نموذج الأعمال التجارية ، أي نموذج العمل ، وكذلك عمليات الوصول إلى البيانات ، أي نموذج البيانات. كما يحدد قواعد الأعمال للبيانات التي تعني كيف يمكن تغيير البيانات والتلاعب بها.

عرض عرض يمثل مكونات واجهة المستخدم. وهي مسؤولة فقط عن عرض البيانات التي يتم تلقيها من وحدة التحكم كنتيجة لذلك. هذا أيضا يحول طراز (ق) في واجهة المستخدم.

المراقب المالي إن المراقب المالي مسؤول عن معالجة الطلبات الواردة. يتلقى مدخلات من المستخدمين عبر العرض ، ثم يعالج بيانات المستخدم بمساعدة النموذج ويمرر النتائج مرة أخرى إلى العرض. عادةً ما يعمل كمنسق بين العرض والطراز.

في كلمة آخرى

النماذج: مزودي المحتوى. مدراء البيانات التي هي الشكل الموصى به لمشاركة البيانات بين التطبيقات.

المشاهدات: الأنشطة. هذا هو مكون واجهة المستخدم الأساسي للتطبيق. يتم اشتقاق كل شاشة فردية من تطبيق Android من فئة نشاط Java (android.app.Activity). فهي حاويات لوجهات النظر (android.view.View).

وحدات التحكم: الخدمات. هذه مكونات الخلفية التي تتصرف مثل daemons UNIX وخدمات Windows. أنها تعمل بشكل خفي وتقوم بمعالجة مستمرة دون مراقبة.







model-view-controller