وصف لمكونات (نموذج بيانات - عرض مرئي - متحكّم)
**(نموذج بيانات - عرض مرئي - متحكّم)** ‍(الإنجليزية: MVC إم في سي نموذج بيانات - عرض مرئي - متحكم) هو أحد أشهر أنماط المعماريات البرمجيّة وأكثرها شيوعًا بين تلك التي تُستخدم لتطوير برامج ذات واجهة مستخدم رسوميّة (عرض مرئي). تتمثّل هذه المعمارية بتقسيم البرنامج إلى ثلاث وحدات وظيفية رئيسية مستقلّة بأدوارها عن بعضها ولكنها مرتبطة ومتصلة تفاعليّاً فيما بينها. تهدف هذه المعماريّة إلى فصل طريقة تمثيل نماذج البيانات, أي دورة حياتها, والعمليات المنطقية المطلوبة التي تجري عليها داخل البرمجيّة عن طريقة عرض الشكل النهائي لهذه البيانات للمستخدم.

نبذة تاريخية
------------

ابتكر ترايغف رينسكاوغ هذا النمط المعماري خلال عمله على مشروع ابتكار وتطوير لغة البرمجة سمول توك-79 بصفته عالم مساعد في شركة مركز الأبحاث زيروز بالو ألتو في أواخر عام 1970. كان يهدف ترايغف بهذا النمط لبناء البرامج بالشكل الذي يستطيع فيه المستخدمون التفاعل مع البيانات مهما كانت ضخمة أو معقّدة. النسخة الأوليّة من هذه المعمارية كانت تحتوي على أربعة أجزاء رئيسيّة: (نموذج - عرض مرئي - شيء - معدِّل). ولكن وبعد التباحث مع المطوّرين العاملين على مشروع سمول توك إجتمعوا على أن يقتصر النمط على ثلاثة أجزاء فقط (نموذج - عرض - متحكّم) بدلاً من الأربعة السابقة.

في النسخة التالية من اللّغة (سمول توك-80) طُوِّرت المعمارية فأصبح العرض فيها أكثر تجريديّة والمتحكّم كذلك متمثّلاً بفئات برمجيّة وفئات فرعيّة أخرى تمثّل عناصر الواجهة الرسوميّة الفرعيّة. وبهذا الشكل يكون العرض المرئي أداة لعرض البيانات للمستخدم والمتحكم أداة للتفاعل معها. أيضًا فإنّ النموذج مرتبط بالعرض المرئي متمثّلاً بكائن عن فئة برمجيّة ويترك شكل وبنية هذا الكائن للمطوّر. كما أنّ هذه النسخة من اللّغة احتوت على أداة عرض في بيئة التطوير خاصَّتها تفيد المطوّرين في تصفّح شكل وبناء النموذج والعرض المرئي والمتحكّم جنبًا إلى جنب.

النموذج المعماري تطوّر بشكل متتابع فيما بعد واشتقّت عنه نماذج معماريّة أخرى ومنها: (نموذج بيانات - عرض مرئي - متحكّم, هرمي), (نموذج بيانات - عرض مرئي - محوّل), (نموذج بيانات - عرض مرئي - مزوّد), (نموذج بيانات - عرض مرئي - نموذج عرضي وسيط).

فيما بعد ازدادت تطبيقات الشبكة العالميّة التي تتبنى هذه المعماريّة في بنائها وتطويرها وكان ذلك بشكل خاص بعد إطلاق شركة نيكست لإطار العمل البرمجي ويب أوبجيكتز والذي كان قد تمت كتابته في بادئ الأمر بلغة أوبجيكتف-سي والذي كان مقتبس بشكل كبير من إطار العمل سمول توك وذلك عام 1996. لاحقاً, أصبحت المعماريّة أكثر شيوعاً بين المطوّرين الذين يستخدمون لغة جافا وذلك بعد أن تم توجيه تطوير إطار العمل ويب أوبجيكتز ليكون بلغة جافا. زاد الربط بين هذا النموذج المعماري ولغة جافا وذلك بعد إطلاق عدة إطارات عمل برمجيّة جديدة بلغة جافا وبخاصّة سبرينغ والذي أطلق في أكتوبر من العام 2002.

في العام 2003 قام المطور مارتين فولير بنشر كتاب *أنماط معمارية تطبيقات المشاريع* "Patterns of Enterprise Application Architecture" والذي قدم فيه نمط (نموذج - عرض - متحكّم) ويشرح كيفيّة عمل هذا النمط حيث يستقبل راصد للمدخلات الطلبات ومن ثمّ يرسلها إلى نموذج متمثّل بكائن برمجي ويعيد إرسالها إلى واجهة العرض المرئي الخاص بهذه البيانات. منهجية هذا النمط قريبة من تلك التي المتبعة في إطار العمل روبي أون ريلز (أغسطس 2004). أيضاً إطار العمل جانغو (جوليو 2005) والذي طور باستخدام لغة بايثن فإنّ نمط معماريّته أيضاً مشابهة (نموذج - قالب - عرض) حيث أنّ العرض هنا أشبه بالبديل عن المتحكّم فهو المسؤول عن جلب البيانات المطلوبة من النموذج ثمّ يقوم بتمريرها إلى القالب ليعرضها. كلى الإطارين ظهرا بشكل قوي ومحكم في بنائهما ممّا زاد في شعبيّة وانتشار هذا النمط المعماري وامتداده خارج  بيئة التطوير السابقة التي كان فيها لمدّة طويلة.

مكونات النمط المعماري
---------------------

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

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

**العرض المرئي**

الوحدة المسؤولة عن عرض البيانات للمستخدم عن طريق واجهة رسوميّة كجداول عرض البيانات أو مخطط بياني.

**المتحكّم**

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

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

1. ↑  "The DCI Architecture: A New Vision of Object-Oriented Programming". *web.archive.org*. 23 مارس 2009. مؤرشف من الأصل في 2009-03-23. اطلع عليه بتاريخ 2022-10-04.`{{استشهاد ويب}}`: صيانة الاستشهاد: BOT: original URL status unknown (link)
2. ↑  "Trygve/MVC". *folk.universitetetioslo.no*. مؤرشف من الأصل في 2022-11-05. اطلع عليه بتاريخ 2022-10-04.
3. ↑  Davis، Ian. "What Are The Benefits of MVC?". *Internet Alchemy*. مؤرشف من الأصل في 2022-10-09. اطلع عليه بتاريخ 2022-10-04.

|  |  |
| --- | --- |
| مشاريع شقيقة | في كومنز صور وملفات عن: نمط وعرض ومتحكم |

* أيقونة بوابةبوابة علم الحاسوب
* أيقونة بوابةبوابة تقانة المعلومات
* أيقونة بوابةبوابة برمجة الحاسوب

| * ع
* ن
* ت
 أنماط تصميم البرمجيات (برمجة) |
| --- |
| إنشائي (Creational) | 
* Abstract factory  ‏
* نمط تصميم الباني
* حقن التبعية
* نمط طريقة المصنع
* Lazy initialization
* Multiton
* Object pool  ‏
* Prototype
* اكتساب الموارد تهيئة
* النمط المفرد

 |
| هيكلي (Structural) | 
* نمط المحول
* نموذج التصميم جسر
* نموذج التصميم المجمع
* نموذج التصميم ديكور
* نمط\_التفويض
* نمط واجهة المبنى
* نموذج التصميم وزن الذبابة
* Front controller
* Marker interface  ‏
* Module
* نمط الوكيل
* Twin

 |
| سلوكي (Behavioral) | 
* Blackboard
* Chain of responsibility
* Command
* Interpreter
* نمط المكرر
* Mediator
* Memento
* Null object  ‏
* المراقب (نموذج تصميم)
* Servant
* Specification
* State
* نموذج الإستراتيجية
* Template method  ‏
* Visitor

 |
| وظيفي (Functional) | 
* مونويد
* Functor
* Applicative
* Monad
* Comonad
* Free monad
* HOF
* Currying
* Function composition  ‏
* Closure
* المولد

 |
| متزامن (Concurrency) | 
* Active object
* Actor
* Balking
* حاجز (حوسبة)
* Binding properties  ‏
* Coroutine
* Compute kernel
* Double-checked locking
* Event-based asynchronous  ‏
* ليف
* Futex
* Futures and promises
* Guarded suspension
* Immutable object
* Join
* Lock
* صيغة التراسل
* Monitor
* Nuclear
* Proactor
* Reactor
* Read write lock  ‏
* Scheduler
* STM
* Thread pool
* Thread-local storage

 |
| معماري (Architectural) | 
* \* ADR
* نمط التسجيل النشط
* نمط الوسيط
* نموذج الخادم والعميل
* هندسة البرمجيات بالمكونات
* DAO
* كائن نقل البيانات
* تصميم موجه بالمجال
* ECB
* ECS
* EDA
* Front controller
* Identity map  ‏
* Interceptor
* Implicit invocation
* عكس التحكم
* Model 2  ‏
* MOM
* Microservices
* MVA
* نمط وعرض ومتحكم
* MVP
* MVVM
* Monolithic
* عمارة متعددة الطبقات
* Naked objects
* ORB
* ند لند
* Publish–subscribe
* PAC
* رست
* بنية خدمية
* نمط محدد موقع الخدمة
* SN
* SBA
* Specification

 |
| توزيع سحابي (Cloud Distributed) | 
* Ambassador
* Anti-Corruption Layer
* Bulkhead
* Cache-Aside
* Circuit Breaker  ‏
* CQRS
* Compensating Transaction  ‏
* Competing Consumers
* Compute Resource Consolidation
* Event Sourcing
* External Configuration Store
* Federated Identity
* Gatekeeper
* فهرس قاعدة بيانات
* Leader Election  ‏
* نموذج الهيكلة والتجميع
* Materialized View  ‏
* Pipes
* Filters
* Priority Queue
* Publisher-Subscriber
* Queue-Based Load Leveling
* Retry
* Scheduler Agent Supervisor
* Sharding
* Sidecar
* Strangler
* Throttling
* Valet Key

 |
| أخرى | 
* Business delegate  ‏
* Composite entity  ‏
* Intercepting filter  ‏
* التحميل البطئ
* Mangler
* غرض مقلد
* Type tunnel  ‏
* Method chaining

 |
| كتب | 
* *خطط التصميم*
* *Enterprise Integration Patterns*
* *Code Complete*
* *POSA*

 |
| أشخاص | 
* كريستوفر الكسندر
* إريك جاما
* رالف جونسن
* John Vlissides
* غرادي بوتش
* كينت بيك
* وورد كانينغهام
* مارتن فاولر
* روبرت سيسيل مارتن
* Jim Coplien
* دوغلاس س. شميت
* Linda Rising

 |
| مجتمعات (Communities) | 
* The Hillside Group
* The Portland Pattern Repository  ‏

 |