Responsive web design, HTML5, CSS3, IDE, API, React, Angular, веб-компоненты, БЭМ... Опытным фронтендерам эти слова давно знакомы. А как насчет таких классических архитектур как MVC, MVP или MVVM? Знаете ли вы, что такое MVP, и почему Angular.js построен на паттерне MVVM, а не MVC, хотя в этом фреймворке активно используется понятие "контроллер"? Чем эти три архитектуры отличаются друг от друга, и зачем, вообще, о них нужно знать фронтендеру?
В своем докладе я хочу рассмотреть эти три понятия как с теоретической (история, концепция, назначение), так и с практической точки зрения. На простых примерах я покажу, как можно организовать ту или иную архитектуру во фронтендовой части веб-приложения, а также рассмотрю некоторые архитектурные паттерны, которые позволяют увеличить читабельность и добавить модульность и переносимость кода.
32. MVC: controllers.js
function ListController() {
var model = new TasksModel() ;
var view = new ListView( model );
}
01.
02.
03.
view.addCreateTaskHandler(function(taskTitle) { ... });04.
view.addCheckedHandler(function(id) { ... });05.
06.
32
33. MVC: controllers.js
function ListController() {
view. addCreateTaskHandler (function(taskTitle) { ... });
view. addCheckedHandler (function(id) { ... });
}
01.
var model = new TasksModel();02.
var view = new ListView(model);03.
04.
05.
06.
33
64. Связывание данных
Это такой механизм, при котором изменение значения модели с любой
стороны (View или Model) моментально вступает в силу на другой.
64
75. Что выбрать
— Есть/можно использовать связывание данных: MVVM
— Нет/нельзя использовать связывание данных: MVP
— Нужна связь представления и данных: MVС
75
76. Хочу больше
— Wiki: архитектура ПО, MVC, MVP, MVVM, шаблоны проектирования
— [Хабр] Паттерны для новичков: MVC vs MVP vs MVVM
— [Хабр] И опять про MVC
— Addy Osmani: Understanding MVC And MVP [en]
— Learning JavaScript Design Patterns by Addy Osmani (ebook) [en]
— MVC в JavaScript
— Knockout.
— TodoMVC
76