Дијаграм на интеракција во рамките на моделот MVC
**Model–view–controller** (обично познат како **MVC** ) е шаблон за дизајн на софтвер  најчесто користен за развој на кориснички интерфејси што ја дели логиката на поврзаната програма на три меѓусебно поврзани елементи. Ова е направено за да се одделат внатрешните претстави на информациите од начинот на презентирање и прифаќање на информацијата од корисникот.

Првично е наменет за десктоп графички кориснички интерфејси (**GUI**), но стана популарен со дизајнирање семрежни прилози и таму најмогу се користи. Популарните програмски јазици како JavaScript, Python, Perl, Object Pascal/Delphi, Ruby, PHP, Java, C#, Swift и Elixir имаат MVC рамки што се користат за развој на веб или мобилни апликации.

Компоненти
----------

Model - модел
Централната компонента на шаблонот. Тоа е динамична структура на податоци на апликацијата, независна од корисничкиот интерфејс. Ги претставува податоците што се во апликацијата односно ги моделира, ги дефинира бизнис правилата за менување и управување со податоците. Обични класи во кодот.
View - приказ
Задолжен е за тоа како ќе се прикажува апликацијата, корисничкиот интерфејс. Тоа се предлошки кој ќе генерираат HTML во прелистувач.
Controller - управувач
Прифаќа влез и го претвора во команди за моделот или приказот. Односно тоа е средината и е одговорен за комуникација. Знае да комуницира со model и view. Класи кој се состојат од методи.
Покрај поделбата на апликацијата на овие компоненти, шаблонот за дизајн model-view-controller ги дефинира интеракциите меѓу нив.

* Моделот е одговорен за управување со податоците на апликацијата. Тој прима кориснички влез од контролорот.
* Приказот(view) значи презентација на моделот во одреден формат.
* Контролорот реагира на влезот на корисникот и извршува интеракции на објектите на моделот на податоци. Контролорот го прима влезот, по избор го потврдува и потоа го пренесува влезот на моделот.

Како и кај другите шаблони за дизајн на софтвер, MVC го изразува „јадрото на решението" на проблемот, притоа дозволувајќи му да биде прилагоден за секој систем. Посебните дизајни на MVC може значително да се разликуваат од традиционалниот опис.

Историја
--------

Еден од основните согледувања во раниот развој на графички кориснички интерфејси, MVC стана еден од првите пристапи за опишување и имплементација на софтверски конструкции во однос на нивните одговорности.

Тригве Реенскауг го воведе MVC во Smalltalk -79 додека беше во посета на Истражувачкиот центар Xerox Palo Alto (PARC)  во 1970-тите. Во осумдесеттите години од минатиот век, Џим Алтоф и другите имплементираа верзија на MVC за библиотеката во класата Smalltalk-80. Само подоцна, еден напис во 1988 година во *„Патувањата за технологија на објекти"* (JOT) го изрази MVC како општ концепт.

Моделот MVC последователно еволуираше, доведувајќи до варијанти како hierarchical model–view–controller(HMVC),model–view–adapte(MVA), model–view–presenter(MVP)model–view–viewmodel(MVVM), и други кои го прилагодија MVC на различни контексти.

Употребата на моделот MVC во семрежни прилози експлодира во популарност по воведувањето на NeXT е WebObjects во 1996 година, која првично беше напишано во Objective-C (кои позајмиле во голема мера од Smalltalk) и помогна спроведуваат принципите MVC. Подоцна, моделот MVC стана популарен кај развивачите на Java кога WebObjects беше пренесен во Java. Подоцнежните рамки за Java, како што е Spring Framework (објавен во октомври 2002 година), ја продолжија силната врска помеѓу Java и MVC. Воведувањето на рамките Django (јули 2005 година, за Python) и Rails (декември 2005 година, за Ruby), и двајцата имаа силен акцент на брзото распоредување, ја зголеми популарноста на MVC надвор од традиционалното опкружување на претпријатијата во кое одамна е популарно. Веб-рамките на MVC сега имаат големи удели на пазарот во однос на веб- алатките што не се MVC.

Користење во семрежни прилози
-----------------------------

Иако првично беше развиен за десктоп компјутери, MVC е широко прифатен како дизајн за апликации на World Wide Web на главните програмски јазици. Создадени се неколку веб-рамки што го применуваат моделот. Овие софтверски рамки се разликуваат во нивните толкувања, главно во начинот на кој одговорностите на MVC се поделени помеѓу клиентот и опслужувачот.

Некои веб MVC рамки имаат тенок пристап на клиент кој го става речиси целиот модел, логиката на прегледот и контролорот на опслужувачот. Во овој пристап, клиентот испраќа барања за хиперврска или испраќања на форми до контролорот, а потоа добива целосно и тековно мрежно место (или друг документ) од приказот; моделот постои целосно на опслужувачот.

Поврзано
--------

* Проектирање на програмска опрема

Наводи
------

1. ↑
2. ↑  Reenskaug, Trygve; Coplien, James O. (20 March 2009). „The DCI Architecture: A New Vision of Object-Oriented Programming". *Artima Developer*. Архивирано од изворникот (html) на 23 March 2009. Посетено на 3 August 2019. More deeply, the framework exists to separate the representation of information from user interaction.
3. ↑  Burbeck (1992): "... the user input, the modeling of the external world, and the visual feedback to the user are explicitly separated and handled by three types of object."
4. ↑  Davis, Ian. „What Are The Benefits of MVC?". *Internet Alchemy*. Посетено на 2016-11-29.
5. ↑  Burbeck, Steve (1992) Applications Programming in Smalltalk-80:How to use Model–View–Controller (MVC)
6. ↑  Simple Example of MVC (Model–View–Controller) Architectural Pattern for Abstraction
7. ↑  Buschmann, Frank (1996) *Pattern-Oriented Software Architecture*.
8. ↑  Gamma, Erich et al. (1994) *Design Patterns*
9. ↑  Moore, Dana et al. (2007) *Professional Rich Internet Applications: Ajax and Beyond*: "Since the origin of MVC, there have been many interpretations of the pattern. The concept has been adapted and applied in very different ways to a wide variety of systems and architectures."
10. ↑  Model–View–Controller History. C2.com (2012-05-11). Retrieved on 2013-12-09.
11. ↑  Notes and Historical documents from Trygve Reenskaug, inventor of MVC.
12. ↑  "A note on DynaBook requirements", Trygve Reenskaug, 22 March 1979, SysReq.pdf.
13. ↑  Krasner, Glenn E.; Pope, Stephen T. (Aug–Sep 1988). „A cookbook for using the model–view controller user interface paradigm in Smalltalk-80". *The Journal of Object Technology*. SIGS Publications. **1** (3): 26–49. Also published as "A Description of the Model–View–Controller User Interface Paradigm in the Smalltalk-80 System" (Report), ParcPlace Systems; Retrieved 2012-06-05.
14. ↑  The evolution of MVC and other UI architectures from Martin Fowler.