نموذج عرض مقدم

تصغير| رسم تخطيطي يوضح نمط تصميم واجهة المستخدم الرسومية النموذج-العرض-المقدم (MVP)
**نموذج العرض التقديمي** ( **MVP** ) هو اشتقاق من النمط المعماري نموذج العرض المتحكم (MVC)، ويُستخدم غالبًا في بناء واجهات المستخدم.

في نمط MVP، يتولى *مقدم العرض* دور "الوسيط". في MVP، حيث تُنقل جميع منطق العرض التقديمي. 

## تاريخ
نشأ نمط البرمجة في أوائل التسعينيات في شركة Taligent ، وهي مشروع مشترك بين Apple وIBM وHewlett-Packard . MVP هو نموذج البرمجة الأساسي لتطوير التطبيقات في بيئة CommonPoint التي تعتمد على لغة C++ من Taligent.وقد تم لاحقًا نقل هذا النمط من خلال Taligent إلى لغة البرمجة Java وساهم كبير خبراء التقنية في الشركة، Mike Potel. في نشره على نطاق أوسع من خلال ورقة البحثية.

بعد توقف شركة Taligent في عام 1998، قام آندي باور وبلاير ماكجلاشان من فريق Dolphin Smalltalk بتكييف نمط MVP ليكون الأساس لإطار عمل واجهة المستخدم في Smalltalk . وفي عام 2006، بدأت شركة Microsoftبإدراج نمط MVP في وثائقها وأمثلتها المتعلقة ببرمجة واجهات المستخدم ضمن إطار عمل NET .  

تُناقش تطورات نمط MVP، وتعدد أشكاله، إضافة إلى علاقته بأنماط التصميم الأخرى مثل MVP بشكل مفصّل في مقالة كتبها مارتن فاولر وأخرى لديريك جرير. 

## ملخص
نمط MVP هو نمط معماري لواجهات المستخدم صُمّم لتسهيل إجراء الوحدة الآلية وتعزيز فصل الاهتمامات في منطق العرض التقديمي :

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

عادةً، يقوم تنفيذ العرض بإنشاء كائن المُقدم المحدد، مع تمرير مرجع إلى نفسه.. يوضح الكود C# التالي منشئ عرض بسيط:
```csharp
public class Presenter : IPresenter 
{
  public Presenter(IView view) 
  {
    // ...
  }
}

public class View : IView
{
  private IPresenter _presenter;

  public View()
  {
    _presenter = new Presenter(this);
  }
}
```
تختلف درجة المنطق المسموح بها في العرض باختلاف تطبيقات نمط نموذج العرض المقدم. في أقصى الحالات ، يكون العرض سلبيًا تمامًا، ويُحوّل جميع عمليات التفاعل إلى المُقدّم. في هذا الشكل، عندما يُفعّل المستخدم طريقة حدث في العرض، لا يقوم العرض بأي شيء سوى استدعاء طريقة في المقدم. يقوم مقدم العرض بعد ذلك باسترجاع البيانات من العرض من خلال الطرق التي تحددها واجهة العرض. وأخيرًا، يعمل مقدم العرض على النموذج ويقوم بتحديث العرض بنتائج العملية. تسمح الإصدارات الأخرى من model–view–presenter ببعض الحرية فيما يتعلق بالفئة التي تتعامل مع تفاعل أو حدث أو أمر معين. غالبًا ما يكون هذا أكثر ملاءمة للهندسة المعمارية المستندة إلى الويب، حيث قد يكون العرض، الذي يتم تنفيذه على متصفح العميل، هو المكان الأفضل للتعامل مع تفاعل أو أمر معين.

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

## التنفيذات

### شبكة
تدعم بيئة NET نمط النموذج العرض المقدّم MVP كما هو الحال في أي بيئة تطوير أخرى. يمكن استخدام نفس فئتي النموذج والمقدّم لدعم واجهات متعددة، مثل تطبيق ويب باستخدام ASP. أو تطبيق ويب NET أو تطبيق Windows Forms . يتبادل المقدّم المعلومات ويضعها من/إلى العرض من خلال واجهة يمكن الوصول إليها من خلال مكون الواجهة (العرض).

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

### جافا
في تطبيق Java ( AWT / Swing / SWT )، يمكن استخدام نمط النموذج و العرض والمقدّم MVP من خلال فئة واجهة المستخدم بتنفيذ واجهة عرض.

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

يتطلب تنفيذ نمط النموذج والعرض والمقدم (MVP) في Google Web Toolkit فقط أن تنفذ إحدى المكونات واجهة العرض. من الممكن اتباع نفس النهج باستخدام Vaadin أو إطار عمل Echo2 Web.

تتضمن أطر عمل Java ما يلي:

* جافا اف اكس
* إيكو 2
* مجموعة أدوات الويب من Google
* جيه فيس
* يتأرجح
* فادين
* زد كيه

### بي اتش بي
نظرًا لمرونة بيئة التشغيل الخاصة بـ PHP ، تتوفر خيارات واسعة لطرق التعامل مع منطق التطبيق. يتم ترك تنفيذ طبقة النموذج على مبرمج التطبيق النهائي.

تتضمن أطر عمل PHP ما يلي:

* كود إجنيتر
* لارافيل
* إطار العمل الصافي

## انظر أيضًا

* هندسة متعددة الطبقات
* نموذج - عرض - وحدة تحكم
* نموذج-عرض-عرضنموذج
* مقدم العرض أولاً (النهج البرمجي)

## المراجع



## روابط خارجية

* مثال على عرض النموذج من مشروع GWT.
* أفكار حول تنفيذ نموذج-عرض-مقدم في StackExchange

تصنيف:نماذج تصميم البرمجيات
تصنيف:هندسة البرمجيات
تصنيف:تطوير البرمجيات
تصنيف:معمارية الحاسوب
تصنيف:معمارية البرمجيات
تصنيف:برمجة