نموذج-عرض-متحكم

يُعدّ نمط MVC ( نموذج-عرض-متحكم ) نمطًا معماريًا برمجيًا [ 1 ] شائع الاستخدام في تطوير واجهات المستخدم ، حيث يقسم منطق البرنامج ذي الصلة إلى ثلاثة عناصر مترابطة. وهذه العناصر هي:
- النموذج ، التمثيلات الداخلية للمعلومات
- الواجهة ، وهي التي تعرض المعلومات للمستخدم وتستقبلها منه .
- وحدة التحكم ، والبرنامج الذي يربط بينهما. [ 2 ] [ 3 ]
كان هذا النمط يُستخدم تقليديًا في واجهات المستخدم الرسومية لأجهزة سطح المكتب ، ثم أصبح شائعًا في تصميم تطبيقات الويب . [ 4 ] تحتوي لغات البرمجة الشائعة على أطر عمل MVC التي تسهل تطبيق هذا النمط.
تاريخ
أصبحت MVC واحدة من الأفكار الأساسية في التطور المبكر لواجهات المستخدم الرسومية، وأصبحت واحدة من أوائل المناهج لوصف وتنفيذ هياكل البرمجيات من حيث مسؤولياتها . [ 5 ]
ابتكر تريغف رينسكاوغ نمط MVC أثناء عمله على لغة Smalltalk -79 كعالم زائر في مركز أبحاث زيروكس بالو ألتو (PARC) في أواخر سبعينيات القرن الماضي. [ 6 ] [ 7 ] [ 8 ] : 330 كان يطمح إلى نمط يُمكن استخدامه لهيكلة أي برنامج يتفاعل فيه المستخدمون مع مجموعة بيانات كبيرة ومعقدة . تكوّن تصميمه في البداية من أربعة أجزاء: النموذج ، والعرض، والعنصر، والمحرر. بعد مناقشة الأمر مع مطوري Smalltalk الآخرين ، استقر هو وبقية الفريق على النموذج، والعرض، والمتحكم بدلاً من ذلك. [ 6 ]
في تصميمهم النهائي، يُمثل النموذج جزءًا من البرنامج بشكلٍ بحت وبديهي. أما العرض فهو تمثيل مرئي للنموذج، حيث يسترجع البيانات منه لعرضها على المستخدم، ويُمرر الطلبات ذهابًا وإيابًا بين المستخدم والنموذج. ويُمثل المتحكم جزءًا تنظيميًا من واجهة المستخدم، حيث يُرتب ويُنسق عروضًا متعددة على الشاشة، ويستقبل مدخلات المستخدم، ويرسل الرسائل المناسبة إلى العروض التابعة له. ويتضمن هذا التصميم أيضًا محررًا كنوع متخصص من المتحكمات، يُستخدم لتعديل عرض معين، ويتم إنشاؤه من خلال ذلك العرض. [ 6 ]
يدعم Smalltalk-80 إصدارًا من نمط MVC مُتطورًا من هذا الإصدار. [ 6 ] يوفر هذا النمط فئاتview مجردة وفئات فرعية ملموسة متنوعة لكل منها، والتي تُمثل عناصر واجهة مستخدم عامة مختلفة . في هذا النمط، يُمثل عنصر واجهة المستخدم طريقة لعرض المعلومات للمستخدم، بينما يُمثل عنصر واجهة المستخدم طريقة لتفاعل المستخدم مع عنصر واجهة المستخدم . يرتبط عنصر واجهة المستخدم أيضًا بكائن نموذج، ولكن بنية هذا الكائن متروكة لمبرمج التطبيق . تتضمن بيئة Smalltalk-80 أيضًا "مُفتش MVC"، وهي أداة تطوير لعرض بنية نموذج وعرض ووحدة تحكم مُعينة جنبًا إلى جنب. [ 9 ]controllerViewcontrollerviewview
في عام ١٩٨٨، نشر اثنان من موظفي مركز أبحاث بالو ألك (PARC) مقالًا في مجلة تكنولوجيا الكائنات (JOT) قدّما فيه نموذج MVC كـ" نموذج ومنهجية برمجة " عامة لمطوري لغة Smalltalk-80. إلا أن مخططهما اختلف عن مخطط رينسكاوغ وآخرين، وكذلك عن المخطط الوارد في كتب Smalltalk-80 المرجعية. فقد عرّفا العرض بأنه يشمل أي جانب رسومي، بينما المتحكم هو كائن أكثر تجريدًا، وغير مرئي عمومًا، يستقبل مدخلات المستخدم ويتفاعل مع عرض واحد أو أكثر، ونموذج واحد فقط. [ ١٠ ]
تطور نمط MVC لاحقًا، [ 11 ] مما أدى إلى ظهور متغيرات مثل النموذج الهرمي - العرض - المتحكم (HMVC)، والنموذج - العرض - المحول (MVA)، والنموذج - العرض - العارض (MVP)، والنموذج - العرض - نموذج العرض (MVVM)، وغيرها التي قامت بتكييف MVC مع سياقات مختلفة.
ازداد استخدام نمط MVC في تطبيقات الويب بعد إطلاق WebObjects من شركة NeXT عام 1996، والذي كُتب في الأصل بلغة Objective-C (المستوحاة بشكل كبير من Smalltalk) وساهم في ترسيخ مبادئ MVC. لاحقًا، اكتسب نمط MVC شعبية واسعة بين مطوري Java بعد نقل WebObjects إلى Java . وواصلت أطر عمل Java اللاحقة، مثل Spring (الذي صدر في أكتوبر 2002)، تعزيز العلاقة الوثيقة بين Java ونمط MVC.
في عام ٢٠٠٣، نشر مارتن فاولر كتاب "أنماط هندسة تطبيقات المؤسسات" ، الذي قدم فيه نمط MVC حيث يستقبل "متحكم الإدخال" طلبًا، ويرسل الرسائل المناسبة إلى كائن النموذج، ويستقبل استجابة من كائن النموذج، ثم يمرر الاستجابة إلى العرض المناسب لعرضها. [ ٨ ] : ٥٦ وهذا قريب من النهج الذي اتبعه إطار عمل تطبيقات الويب Ruby on Rails (أغسطس ٢٠٠٤)، حيث يرسل العميل طلبات إلى الخادم عبر عرض داخل المتصفح ، ويتولى متحكم على الخادم معالجة هذه الطلبات، ويتواصل المتحكم مع كائنات النموذج المناسبة. [ ١٢ ] وقدّم إطار عمل Django (يوليو ٢٠٠٥، للغة Python ) نموذجًا مشابهًا "نموذج-قالب-عرض" (MTV)، حيث يسترجع العرض البيانات من النماذج ويمررها إلى القوالب لعرضها. [ 13 ] ظهر كل من Rails و Django لأول مرة مع التركيز الشديد على النشر السريع، مما زاد من شعبية MVC خارج بيئة المؤسسات التقليدية التي لطالما كانت شائعة فيها.
عناصر
نموذج
المكون المركزي لهذا النمط. وهو بنية البيانات الديناميكية للتطبيق ، المستقلة عن واجهة المستخدم. [ 14 ] يدير هذا المكون بيانات التطبيق ومنطقه وقواعده بشكل مباشر. في لغة Smalltalk-80، يُترك تصميم نوع النموذج بالكامل للمبرمج. [ 15 ] أما في WebObjects وRails وDjango، فيُمثل نوع النموذج عادةً جدولًا في قاعدة بيانات التطبيق . [ 16 ] [ 17 ] [ 18 ] يُعد النموذج أساسيًا للحفاظ على تنظيم البيانات واتساقها، ويضمن أن تتصرف بيانات التطبيق وفقًا للقواعد والمنطق المُحددين.
منظر
أي تمثيل للمعلومات مثل المخطط البياني أو الرسم التخطيطي أو الجدول. من الممكن عرض المعلومات نفسها بعدة طرق، مثل المخطط الشريطي للإدارة والجدول للمحاسبين .
في لغة Smalltalk-80، تُعدّ الواجهة مجرد تمثيل مرئي للنموذج، ولا تتعامل مع مدخلات المستخدم. [ 19 ] أما في WebObjects، فتمثل الواجهة عنصرًا كاملًا من عناصر واجهة المستخدم، مثل القائمة أو الزر، وتستقبل مدخلات من المستخدم. [ 20 ] ومع ذلك، في كل من Smalltalk-80 وWebObjects، صُممت الواجهات لتكون عامة الأغراض وقابلة للتركيب . [ 21 ] [ 22 ]
في إطارَي Rails وDjango، تؤدي قوالب HTML دورَ العرض ، لذا يُحدِّد العرض في نظامهما واجهة مستخدم داخل المتصفح بدلاً من تمثيل عنصر واجهة مستخدم بشكل مباشر. [ 23 ] [ 24 ] (يُطلق Django على هذا النوع من الكائنات اسم "قالب" لهذا السبب. [ 25 ] ) يُقلِّل هذا النهج من التركيز على العروض الصغيرة القابلة للتركيب؛ إذ يرتبط عرض Rails النموذجي بعلاقة مباشرة مع إجراء وحدة التحكم. [ 26 ]
تتواصل واجهات Smalltalk-80 مع كلٍ من النموذج والمتحكم، [ 27 ] بينما في WebObjects، تتواصل الواجهة مع المتحكم فقط، الذي بدوره يتواصل مع النموذج. [ 28 ] أما في Rails وDjango، فتستخدم المتحكم/الواجهة واجهة/قالب عند إعداد استجابة للعميل. [ 29 ] [ 30 ]
وحدة التحكم

يستقبل المدخلات ويحولها إلى أوامر للنموذج أو العرض. [ 31 ]
يتولى مُتحكم Smalltalk-80 معالجة أحداث إدخال المستخدم، مثل ضغطات الأزرار أو تحريك الفأرة. [ 32 ] في أي وقت، يرتبط كل مُتحكم بعرض ونموذج واحد، مع العلم أن كائن النموذج الواحد قد يتلقى إشارات من عدة مُتحكمات مختلفة. يتلقى مُتحكم واحد فقط، وهو المُتحكم "النشط"، إدخال المستخدم في أي وقت؛ ويتولى كائن مدير النوافذ العام مسؤولية تحديد المُتحكم النشط الحالي. إذا استدعى إدخال المستخدم تغييرًا في النموذج، يُرسل المُتحكم إشارة إلى النموذج للتغيير، ثم يكون النموذج مسؤولاً عن تحديث عروضه. [ 33 ]
في WebObjects، تتولى واجهات المستخدم معالجة مدخلات المستخدم، بينما يقوم المتحكم بالتنسيق بين واجهات المستخدم والنماذج. قد يكون هناك متحكم واحد فقط لكل تطبيق، أو متحكم واحد لكل نافذة. يوجد جزء كبير من منطق التطبيق في المتحكم. [ 34 ]
في Rails، تُرسل الطلبات الواردة إلى التطبيق على الخادم من العميل إلى "موجّه" (router)، الذي يربط الطلب بطريقة محددة في وحدة تحكم معينة. ضمن هذه الطريقة، تتفاعل وحدة التحكم مع بيانات الطلب وأي كائنات نموذجية ذات صلة، وتُعدّ استجابة باستخدام واجهة عرض (view). عادةً، لكل واجهة عرض وحدة تحكم مرتبطة بها؛ على سبيل المثال، إذا كان للتطبيق واجهة clientعرض، فمن الطبيعي أن يكون له Clientsوحدة تحكم مرتبطة بها أيضًا. مع ذلك، يُمكن للمطورين إنشاء أنواع أخرى من وحدات التحكم إذا رغبوا في ذلك. [ 35 ]
يُطلق Django على الكائن الذي يؤدي هذا الدور اسم "عرض" بدلاً من "متحكم". [ 30 ] عرض Django هو دالة تستقبل طلب ويب وتعيد استجابة ويب. وقد تستخدم قوالب لإنشاء الاستجابة. [ 36 ]
التفاعلات
بالإضافة إلى تقسيم التطبيق إلى نموذج ومكون عرض ومكون تحكم، فإن نمط تصميم MVC يحدد التفاعلات بين هذه المكونات الثلاثة : [ 37 ]
- يتولى النموذج مسؤولية إدارة بيانات التطبيق. ويتلقى مدخلات المستخدم من وحدة التحكم.
- يعرض هذا العرض النموذج بتنسيق معين.
- يستجيب المتحكم لمدخلات المستخدم وينفذ تفاعلات على عناصر نموذج البيانات. يستقبل المتحكم المدخلات، ويتحقق من صحتها اختيارياً، ثم يمررها إلى النموذج.
كما هو الحال مع أنماط البرمجيات الأخرى، يُعبّر نمط MVC عن "جوهر الحل" لمشكلة ما، مع إمكانية تكييفه مع كل نظام. [ 38 ] قد تختلف تصميمات MVC المحددة اختلافًا كبيرًا عن الوصف التقليدي الوارد هنا. [ 39 ]
تحفيز
كما كتب آلان كاي في عام 2003، كان الدافع الأصلي وراء نمط MVC هو السماح بإنشاء واجهة رسومية لأي كائن. [ 40 ] وقد تم توضيح ذلك بالتفصيل في كتاب ريتشارد باوسون " الأشياء المجردة" . [ 40 ]
كتب تريغف رينسكاوغ، مبتكر MVC في PARC، أن "MVC تم تصوره كحل عام لمشكلة تحكم المستخدمين في مجموعة بيانات كبيرة ومعقدة." [ 6 ]
في دليلهم الصادر عام 1991 بعنوان "داخل سمول توك" ، وصف أستاذا علوم الحاسوب في جامعة كارلتون، ويلف لالوند وجون بو، مزايا نمط MVC في سمول توك 80 على النحو التالي:
- استقلالية العرض والبيانات، على سبيل المثال، عرض نماذج متعددة في وقت واحد،
- عناصر واجهة المستخدم القابلة للتكوين، على سبيل المثال، استخدام عرض واحد كعرض فرعي لعرض آخر.
- أوضاع إدخال قابلة للتبديل، عن طريق استبدال وحدة تحكم بأخرى أثناء التشغيل ، و
- استقلالية معالجة المدخلات والمخرجات، من خلال المسؤوليات المنفصلة لوحدات التحكم والعروض. [ 41 ]
الاستخدام في تطبيقات الويب
على الرغم من أن نمط MVC طُوّر في الأصل لأجهزة الكمبيوتر المكتبية ، فقد اعتُمد على نطاق واسع كتصميم لتطبيقات الويب في لغات البرمجة الرئيسية . وقد تم إنشاء العديد من أطر عمل الويب التي تُطبّق هذا النمط. وتختلف هذه الأطر البرمجية في تفسيراتها، لا سيما في طريقة توزيع مسؤوليات MVC بين العميل والخادم . [ 42 ] اعتمدت أطر عمل MVC المبكرة على نهج العميل الخفيف ، حيث وُضعت معظم منطق النموذج والعرض والتحكم على الخادم. في هذا النهج، يُرسل العميل طلبات الارتباط التشعبي أو نماذج الإرسال إلى وحدة التحكم، ثم يتلقى صفحة ويب كاملة ومُحدّثة (أو أي مستند آخر) من العرض؛ بينما يوجد النموذج بالكامل على الخادم. [ 42 ] سمحت أطر العمل اللاحقة بتنفيذ مكونات MVC جزئيًا على العميل، باستخدام Ajax لمزامنة البيانات.
انظر أيضاً
مراجع
- ↑ "مبادئ العمارة النظيفة للعم بوب مارتن" . يوتيوب . 15 ديسمبر 2015.
- ↑ رينسكاوغ، تريغف؛ كوبلين، جيمس أو . (20 مارس 2009). "معمارية DCI: رؤية جديدة للبرمجة الكائنية التوجه" . مطور أرتيما . مؤرشف من الأصل في 23 مارس 2009. تم الاسترجاع في 3 أغسطس 2019.
وبشكل أعمق، يهدف هذا الإطار إلى فصل تمثيل المعلومات عن تفاعل المستخدم.
- ↑ بوربيك (1992): "... يتم فصل مدخلات المستخدم، ونمذجة العالم الخارجي، والتغذية الراجعة البصرية للمستخدم بشكل صريح ومعالجتها بواسطة ثلاثة أنواع من الكائنات."
- ↑ ديفيس، إيان. "ما هي فوائد نموذج MVC؟" . كيمياء الإنترنت . تم الاسترجاع في 29-11-2016 .
- ↑ تاريخ نموذج العرض المتحكم (M-View-Controller ). C2.com (2012-05-11). تم الاطلاع عليه بتاريخ 2013-12-09.
- 1 2 3 4 5 ملاحظات ووثائق تاريخية من تريغف رينسكاوغ، مخترع MVC.
- ↑ "ملاحظة حول متطلبات DynaBook"، Trygve Reenskaug، 22 مارس 1979، SysReq.pdf .
- 1 2 فاولر، مارتن (2003). أنماط هندسة تطبيقات المؤسسات . بيرسون للتعليم، المحدودة. ISBN 0-321-12742-0.
- ↑ غولدبيرغ، أديل (1984). سمول توك-80: بيئة البرمجة التفاعلية . أديسون-ويسلي. ISBN 0-201-11372-4.
- ↑ كراسنر، جلين إي.؛ بوب، ستيفن تي. (أغسطس-سبتمبر 1988). "دليل استخدام نموذج واجهة المستخدم MVC في لغة Smalltalk-80" . مجلة تكنولوجيا الكائنات . 1 (3). منشورات SIGS: 26-49 .نُشر أيضًا بعنوان " وصف نموذج واجهة المستخدم Model-View-Controller في نظام Smalltalk-80 " (تقرير)، أنظمة ParcPlace؛ تم استرجاعه في 2012-06-05.
- ↑ تطور نمط MVC وهياكل واجهة المستخدم الأخرى من مارتن فاولر.
- ↑ "أدلة روبي أون ريلز" . تم الاطلاع عليه في 19 مارس 2022 .
- ↑ "أسئلة وأجوبة حول Django: يبدو أن Django إطار عمل MVC، لكنك تسمي وحدة التحكم "عرضًا"، والعرض "قالبًا". لماذا لا تستخدم الأسماء القياسية؟" . تم الاطلاع عليه في 19 مارس 2022 .
- ↑ بوربيك، ستيف (1992) برمجة التطبيقات في سمول توك-80: كيفية استخدام نموذج العرض المتحكم (MVC)
- ↑ لالوند، ويلف ر.؛ بو، جون ر. (1991). داخل سمول توك . الولايات المتحدة الأمريكية: برنتيس هول. ص 8. ISBN 0-13-467309-3
يمكن أن يكون النموذج أي كائن دون قيود
. - ↑ نظرة عامة على نظام WebObjects (PDF) . كوبرتينو، كاليفورنيا: شركة أبل كمبيوتر، مايو 2001. ص 28.
في WebObjects، يقوم النموذج بإنشاء والحفاظ على تطابق بين فئة كائن المؤسسة والبيانات المخزنة في قاعدة بيانات علائقية.
- ↑ "أساسيات Active Record" . أدلة Rails . تم الاطلاع عليه في 27 أكتوبر 2022.
سيؤدي هذا إلى إنشاء
نموذج، مرتبط بجدول المنتجات في قاعدة البيانات
.Product - ↑ "النماذج" . وثائق Django . تم الاطلاع عليه في 27 أكتوبر 2022.
بشكل عام، يرتبط كل نموذج بجدول قاعدة بيانات واحد.
- ↑ لالوند، ويلف ر.؛ بو، جون ر. (1991). داخل سمول توك . الولايات المتحدة الأمريكية: برنتيس هول. ص 8. ISBN 0-13-467309-3.
يُعدّ العرض مسؤولاً عن توفير تمثيل مرئي للكائن.
- ↑ نظرة عامة على نظام WebObjects (PDF) . كوبرتينو، كاليفورنيا: شركة أبل كمبيوتر، مايو 2001. ص 28.
تمثل كائنات العرض الأشياء المرئية على واجهة المستخدم (النوافذ، على سبيل المثال، أو الأزرار).
- ↑ لالوند، ويلف ر.؛ بو، جون ر. (1991). داخل سمول توك . الولايات المتحدة الأمريكية: برنتيس هول. ص 8. ISBN 0-13-467309-3[
MVC] يسمح باستخدام طرق العرض كأجزاء للتجميع في وحدات أكبر؛ ويمكن إنشاء أنواع جديدة من طرق العرض باستخدام طرق العرض الموجودة كطرق عرض فرعية.
- ↑ نظرة عامة على نظام WebObjects (ملف PDF) . كوبرتينو، كاليفورنيا: شركة أبل للكمبيوتر، مايو 2001. ص 28.
تميل كائنات العرض إلى أن تكون قابلة لإعادة الاستخدام بشكل كبير، وبالتالي توفر الاتساق بين التطبيقات.
- ↑ "نظرة عامة على عرض الإجراءات" . أدلة ريلز . تم الاطلاع عليه في 27 أكتوبر 2022.
تُكتب قوالب عرض الإجراءات باستخدام لغة روبي المضمنة في علامات ممزوجة بلغة HTML.
- ↑ "القوالب" . وثائق Django . تم الاطلاع عليه في 27 أكتوبر 2022. يحتوي القالب على الأجزاء الثابتة من مخرجات HTML المطلوبة بالإضافة إلى بعض
الصيغ الخاصة التي تصف كيفية إدراج المحتوى الديناميكي.
- ↑ "أسئلة وأجوبة حول Django: يبدو أن Django إطار عمل MVC، لكنك تسمي وحدة التحكم "عرضًا"، والعرض "قالبًا". لماذا لا تستخدم الأسماء القياسية؟" . تم الاطلاع عليه بتاريخ 27 أكتوبر 2022 .
- ↑ "نظرة عامة على عرض الإجراءات" . أدلة ريلز . تم الاطلاع عليه في 27 أكتوبر 2022.
عادةً، تتشارك العروض اسمها مع إجراء وحدة التحكم المرتبط بها...
- ↑ لالوند، ويلف ر.؛ بو، جون ر. (1991). داخل سمول توك . الولايات المتحدة الأمريكية: برنتيس هول. ص 9. ISBN 0-13-467309-3...
تعرف الواجهة بشكل صريح على النموذج ووحدة التحكم.
- ↑ نظرة عامة على نظام WebObjects (ملف PDF) . كوبرتينو، كاليفورنيا: شركة أبل للكمبيوتر، مايو 2001. ص 28.
يعمل كائن التحكم كوسيط بين كائنات النموذج وكائنات العرض في التطبيق.
- ↑ "نظرة عامة على واجهة الإجراءات" . أدلة ريلز . تم الاطلاع عليه بتاريخ ٢٧ أكتوبر ٢٠٢٢.
في ريلز، تتم معالجة طلبات الويب بواسطة وحدة تحكم الإجراءات وواجهة الإجراءات. عادةً، تهتم وحدة تحكم الإجراءات بالتواصل مع قاعدة البيانات وتنفيذ عمليات CRUD عند الضرورة. ثم تتولى واجهة الإجراءات مسؤولية تجميع الاستجابة.
- ١ ٢ "أسئلة وأجوبة حول Django: يبدو أن Django إطار عمل MVC، لكنكم تسمون وحدة التحكم "عرضًا"، والعرض "قالبًا". لماذا لا تستخدمون الأسماء القياسية؟" . تم الاطلاع عليه في ٢٧ أكتوبر ٢٠٢٢.
في Django، يصف "العرض" البيانات المعروضة، لكن العرض عادةً ما يُفوِّض إلى قالب، يصف كيفية عرض البيانات.
- ↑ مثال بسيط لنمط MVC (نموذج-عرض-متحكم) المعماري للتجريد
- ↑ لالوند، ويلف ر.؛ بو، جون ر. (1991). داخل سمول توك . الولايات المتحدة الأمريكية: برنتيس هول. ص 8. ISBN 0-13-467309-3يتولى
المتحكم مسؤولية التفاعل بين المستخدم والنموذج/العرض. وهو يفسر أحرف لوحة المفاتيح بالإضافة إلى حركات الماوس والنقر.
- ↑ لالوند، ويلف ر.؛ بو، جون ر. (1991). داخل سمول توك . الولايات المتحدة الأمريكية: برنتيس هول. ص 11. ISBN 0-13-467309-3.
- ↑ نظرة عامة على نظام WebObjects (ملف PDF) . كوبرتينو، كاليفورنيا: شركة أبل للكمبيوتر، مايو 2001. ص 28.
- ↑ "نظرة عامة على عرض الإجراءات" . أدلة ريلز . تم الاطلاع عليه في 27 أكتوبر 2022.
عادةً، تتشارك العروض اسمها مع إجراء وحدة التحكم المرتبط بها...
- ↑ "كتابة طرق العرض" . وثائق Django . تم الاطلاع عليه بتاريخ 27 أكتوبر 2022 .
- ^ بوشمان ، فرانك (1996) هندسة البرمجيات الموجهة نحو الأنماط .
- ↑ جاما، إريك وآخرون (1994) أنماط التصميم
- ↑ مور، دانا وآخرون (2007) تطبيقات الإنترنت الغنية الاحترافية: أجاكس وما بعدها : "منذ نشأة نمط MVC، كانت هناك العديد من التفسيرات لهذا النمط. وقد تم تكييف المفهوم وتطبيقه بطرق مختلفة تمامًا على مجموعة واسعة من الأنظمة والهياكل."
- 1 2 آلان كاي (23 مايو 2003). "هل لغة Squeak كائنية التوجه حقًا ؟" . قائمة بريد مؤسسة Squeak . تم الاطلاع عليه بتاريخ 26 أكتوبر 2021 .
- ↑ لالوند، ويلف ر.؛ بو، جون ر. (1991). داخل سمول توك . المجلد 2. الولايات المتحدة الأمريكية: برنتيس هول. الصفحات 8-9 . ISBN 0-13-467309-3.
- 1 2 ليف، أفراهام؛ رايفيلد، جيمس ت. (سبتمبر 2001). تطوير تطبيقات الويب باستخدام نمط تصميم النموذج/العرض/المتحكم . مؤتمر IEEE للحوسبة الموزعة للكائنات المؤسسية. الصفحات 118-127 .
فهرس
- النمط المعماري (علوم الحاسوب)
- أنماط تصميم البرمجيات
