SlideShare a Scribd company logo
1 of 104
Download to read offline
Model View
Madness
By Mike Wilcox
May 2013
What is MVC?
Maybe a picture will help...
What is MVC?
What is MVC?
What is MVC?
What is MVC?
What is MVC?
What is MVC?
What is MVC?
What is MVC?
What is MVC?
What is MVC?
MVC Defined…?
MVC Defined…?
Traditional MVC is the View observes the Model which is
updated by the Controller
MVC Defined…?
Is this the only way to do it?
Traditional MVC is the View observes the Model which is
updated by the Controller
MVC Defined…?
Is this the only way to do it?
No
Traditional MVC is the View observes the Model which is
updated by the Controller
MVC Defined…?
Is this the only way to do it?
No
Does Controller read/write the Model
Traditional MVC is the View observes the Model which is
updated by the Controller
MVC Defined…?
Is this the only way to do it?
No
Does Controller read/write the Model
Yes
Traditional MVC is the View observes the Model which is
updated by the Controller
MVC Defined…?
Is this the only way to do it?
No
Does Controller read/write the Model
Yes
Does Controller read/write the View?
Traditional MVC is the View observes the Model which is
updated by the Controller
MVC Defined…?
Is this the only way to do it?
No
Does Controller read/write the Model
Yes
Does Controller read/write the View?
Maybe
Traditional MVC is the View observes the Model which is
updated by the Controller
MVC Defined…?
Is this the only way to do it?
No
Does Controller read/write the Model
Yes
Does Controller read/write the View?
Maybe
Does View read/write the Model?
Traditional MVC is the View observes the Model which is
updated by the Controller
MVC Defined…?
Is this the only way to do it?
No
Does Controller read/write the Model
Yes
Does Controller read/write the View?
Maybe
Does View read/write the Model?
Possibly
Traditional MVC is the View observes the Model which is
updated by the Controller
Now that we
understand MVC...
Why MVC?
Why MVC?
Separates development between Data, Code and UI
Why MVC?
Separates development between Data, Code and UI
Each layer can be developed independently
Why MVC?
Separates development between Data, Code and UI
Each layer can be developed independently
Minimizes turnaround time
Why MVC?
Separates development between Data, Code and UI
Each layer can be developed independently
Minimizes turnaround time
Less overlap between developers and designers
Why MVC?
Separates development between Data, Code and UI
Each layer can be developed independently
Minimizes turnaround time
Less overlap between developers and designers
Views can be swapped out for Mobile, desktop, apps,
etc
Why MVC?
Separates development between Data, Code and UI
Each layer can be developed independently
Minimizes turnaround time
Less overlap between developers and designers
Views can be swapped out for Mobile, desktop, apps,
etc
BLAH BLAH BLAH!
Let’s all work together!
Let’s all work together!
Validation
UI/UX
Styling
Business
Logic
Let’s all work together!
Validation
UI/UX
Styling
Business
Logic
Merge Hell
MVC History
MVC History
MVC History
Created in the late 70s by the famous Xerox Parc
labs, for their Smalltalk system
MVC History
Created in the late 70s by the famous Xerox Parc
labs, for their Smalltalk system
First attempts to do serious UI work on any kind of
scale
MVC History
Created in the late 70s by the famous Xerox Parc
labs, for their Smalltalk system
First attempts to do serious UI work on any kind of
scale
Interfaces in the 70s were not very gooey.
MVC History
Created in the late 70s by the famous Xerox Parc
labs, for their Smalltalk system
First attempts to do serious UI work on any kind of
scale
Interfaces in the 70s were not very gooey.
MVC was developed as a UI pattern - not an
application structure
MVC History
MVC History
As Smalltalk developed in the 80's and 90's this led
to some significant variations on the classic MVC
model
MVC History
As Smalltalk developed in the 80's and 90's this led
to some significant variations on the classic MVC
model
One could say that MVC disappeared in the 90s
MVC History
As Smalltalk developed in the 80's and 90's this led
to some significant variations on the classic MVC
model
One could say that MVC disappeared in the 90s
if you consider the view/controller separation to be an
essential part of MVC
MVC History
As Smalltalk developed in the 80's and 90's this led
to some significant variations on the classic MVC
model
One could say that MVC disappeared in the 90s
if you consider the view/controller separation to be an
essential part of MVC
The key MVC takeaway was Separated Presentation and
Observer Synchronization
MVC History
As Smalltalk developed in the 80's and 90's this led
to some significant variations on the classic MVC
model
One could say that MVC disappeared in the 90s
if you consider the view/controller separation to be an
essential part of MVC
The key MVC takeaway was Separated Presentation and
Observer Synchronization
For many, this was MVC.
MVC History
Newer, derived patterns
MVC History
MVP - Model View Presenter
Newer, derived patterns
MVC History
MVP - Model View Presenter
Specialized MVC with dominant controller
Newer, derived patterns
MVC History
MVP - Model View Presenter
Specialized MVC with dominant controller
MVVM - Model View ViewModel
Newer, derived patterns
MVC History
MVP - Model View Presenter
Specialized MVC with dominant controller
MVVM - Model View ViewModel
binds events to application methods
Newer, derived patterns
MVC History
MVP - Model View Presenter
Specialized MVC with dominant controller
MVVM - Model View ViewModel
binds events to application methods
Newer, derived patterns
Most modern JavaScript libraries are loosely based on
these two patterns.
MVC JavaScript Library
Overview
Smalltalk
Smalltalk
Model
domain-specific knowledge or data
Notify observers about state
Isolated from View
Modified by the Controller
View
The UI
Observes Models
Controllers
Handles the input
Tells Model of change in state
One of the languages from which JavaScript is based
Smalltalk is an object-oriented, dynamically typed,
reflective programming language
Created by Alan Kay at Xerox Parc
No it’s not JavaScript.
This is for comparison!
MVC
Backbone
Backbone
Backbone
Model
domain-level data
provides REST-
persistable Models with
simple routing
Backbone
Model
domain-level data
provides REST-
persistable Models with
simple routing
View
UI and Interaction
Choose your own
Most devs used handlebars.js
Backbone
Model
domain-level data
provides REST-
persistable Models with
simple routing
View
UI and Interaction
Choose your own
Most devs used handlebars.js
Collections
Groups of Models
Backbone
Model
domain-level data
provides REST-
persistable Models with
simple routing
View
UI and Interaction
Choose your own
Most devs used handlebars.js
Collections
Groups of Models
Router
Maps URLs to functions
Optional
Backbone
Model
domain-level data
provides REST-
persistable Models with
simple routing
View
UI and Interaction
Choose your own
Most devs used handlebars.js
Collections
Groups of Models
Router
Maps URLs to functions
Optional
Controller
Mixed with the View
Backbone
Model
domain-level data
provides REST-
persistable Models with
simple routing
View
UI and Interaction
Choose your own
Most devs used handlebars.js
Collections
Groups of Models
Router
Maps URLs to functions
Optional
Controller
Mixed with the View
Most minimal of all the libraries
Most popular
Not opinionated (gets out of your way)
Created by Jeremy Ashkenas
Backbone
Model
domain-level data
provides REST-
persistable Models with
simple routing
View
UI and Interaction
Choose your own
Most devs used handlebars.js
Collections
Groups of Models
Router
Maps URLs to functions
Optional
Controller
Mixed with the View
Most minimal of all the libraries
Most popular
Not opinionated (gets out of your way)
Created by Jeremy Ashkenas
MV*
Ember
Ember
Ember
Model
domain-level data
relationships between models
Ember
Model
domain-level data
relationships between models
View
HTML templates
Ember
Model
domain-level data
relationships between models
View
HTML templates
Controller
Manages array of
objects
Ember
Model
domain-level data
relationships between models
View
HTML templates
State Manager
Mediates between MVC
parts
Controller
Manages array of
objects
Ember
Model
domain-level data
relationships between models
View
HTML templates
State Manager
Mediates between MVC
parts
Controller
Manages array of
objects
MV*
Ember
Model
domain-level data
relationships between models
View
HTML templates
State Manager
Mediates between MVC
parts
Controller
Manages array of
objects
Opinionated and “ambitious”. Largest MV* framework
Decomposes your page into a hierarchy of controls
Ties in with a statemachine, hierarchical routing system
Inspired by Rails and Cocoa
Created by Yehuda Katz
MV*
Spine.js
Spine.js
No Logo.
Spine.js
Model
Domain-data
Controllers bind to Model
events
No Logo.
Spine.js
Model
Domain-data
Controllers bind to Model
events
View
HTML fragments
Use any template language
No Logo.
Spine.js
Model
Domain-data
Controllers bind to Model
events
View
HTML fragments
Use any template language
Controllers
Respond to DOM events
Render templates
Sync Models and Views
No Logo.
Spine.js
Model
Domain-data
Controllers bind to Model
events
View
HTML fragments
Use any template language
Controllers
Respond to DOM events
Render templates
Sync Models and Views
Router
Hash fragment based
routing
No Logo.
Spine.js
Model
Domain-data
Controllers bind to Model
events
View
HTML fragments
Use any template language
Controllers
Respond to DOM events
Render templates
Sync Models and Views
Router
Hash fragment based
routing
No Logo.
MV*
Spine.js
Model
Domain-data
Controllers bind to Model
events
View
HTML fragments
Use any template language
Controllers
Respond to DOM events
Render templates
Sync Models and Views
Router
Hash fragment based
routing
No Logo.
Written in CoffeeScript.
Like Backbone but… different.
O’Reilly book example grew into an actual OSS project
Is a kind of modified clone of Backbone (hence the name)
Created by Alex MacCaw
MV*
Angular.js
Angular.js
Angular.js
Model
Single entity object or entire
data model (all entities)
Live in data-bindings
Angular.js
Model
Single entity object or entire
data model (all entities)
Live in data-bindings
View
Rendered DOM based on what’s
in the Controller and Model
Templates
Bindings between View and
Model
Angular.js
Model
Single entity object or entire
data model (all entities)
Live in data-bindings
View
Rendered DOM based on what’s
in the Controller and Model
Templates
Bindings between View and
Model
Controller
API for observing Models
API for propagating changes
through the system
Angular.js
Model
Single entity object or entire
data model (all entities)
Live in data-bindings
View
Rendered DOM based on what’s
in the Controller and Model
Templates
Bindings between View and
Model
Controller
API for observing Models
API for propagating changes
through the system
Scope
Classes for augmenting
Angular Scopes
Augments $scope
Angular.js
Model
Single entity object or entire
data model (all entities)
Live in data-bindings
View
Rendered DOM based on what’s
in the Controller and Model
Templates
Bindings between View and
Model
Controller
API for observing Models
API for propagating changes
through the system
Scope
Classes for augmenting
Angular Scopes
Augments $scope
MVC
Angular.js
Model
Single entity object or entire
data model (all entities)
Live in data-bindings
View
Rendered DOM based on what’s
in the Controller and Model
Templates
Bindings between View and
Model
Controller
API for observing Models
API for propagating changes
through the system
Scope
Classes for augmenting
Angular Scopes
Augments $scope
Strictly Opinionated
The AngularJS guys expect DOM-based templating
will be native in browsers
Made by Google
MVC
Knockout.js
Knockout.js
Knockout.js
Model
ViewModels communicate
with Model
observable Models with
automatic dependency
detection
Knockout.js
Model
ViewModels communicate
with Model
observable Models with
automatic dependency
detection View
Your choice of template library
DOM-based templates with
declarative bindings
Observe and change
ViewModels
Automatic UI refresh
Knockout.js
Model
ViewModels communicate
with Model
observable Models with
automatic dependency
detection View
Your choice of template library
DOM-based templates with
declarative bindings
Observe and change
ViewModels
Automatic UI refresh
ViewModel
Business logic
Unaware of Views
Makes heavy use of
ko.observables
Knockout.js
Model
ViewModels communicate
with Model
observable Models with
automatic dependency
detection View
Your choice of template library
DOM-based templates with
declarative bindings
Observe and change
ViewModels
Automatic UI refresh
ViewModel
Business logic
Unaware of Views
Makes heavy use of
ko.observables
Scope
Extensive management
of the context stack
Knockout.js
Model
ViewModels communicate
with Model
observable Models with
automatic dependency
detection View
Your choice of template library
DOM-based templates with
declarative bindings
Observe and change
ViewModels
Automatic UI refresh
ViewModel
Business logic
Unaware of Views
Makes heavy use of
ko.observables
Scope
Extensive management
of the context stack
Not opinionated
Does one thing well (UI), even on IE 6.
Can work in a small section of your page
Created by Steve Sanderson
Knockout.js
Model
ViewModels communicate
with Model
observable Models with
automatic dependency
detection View
Your choice of template library
DOM-based templates with
declarative bindings
Observe and change
ViewModels
Automatic UI refresh
ViewModel
Business logic
Unaware of Views
Makes heavy use of
ko.observables
Scope
Extensive management
of the context stack
Not opinionated
Does one thing well (UI), even on IE 6.
Can work in a small section of your page
Created by Steve Sanderson
MVVM
Conclusion
Conclusion
Routers are widely considered to not be part of the
MVC pattern
Conclusion
Routers are widely considered to not be part of the
MVC pattern
All libraries have templates and bindings in common
Conclusion
Routers are widely considered to not be part of the
MVC pattern
All libraries have templates and bindings in common
Strict MVC adherence is as important as strict AJAX
adherence
Conclusion
Routers are widely considered to not be part of the
MVC pattern
All libraries have templates and bindings in common
Strict MVC adherence is as important as strict AJAX
adherence
MVC is simply an agreed-upon pattern to help us
understand code
Conclusion
Routers are widely considered to not be part of the
MVC pattern
All libraries have templates and bindings in common
Strict MVC adherence is as important as strict AJAX
adherence
MVC is simply an agreed-upon pattern to help us
understand code
MVC should separate business logic from the UI
Conclusion
Routers are widely considered to not be part of the
MVC pattern
All libraries have templates and bindings in common
Strict MVC adherence is as important as strict AJAX
adherence
MVC is simply an agreed-upon pattern to help us
understand code
MVC should separate business logic from the UI
It’s all about the bindings.
References
A special mention to Addy Osmani whom has written extensively on JavaScript MVC
frameworks.
http://addyosmani.com/blog/digesting-javascript-mvc-pattern-abuse-or-evolution/
http://addyosmani.com/resources/essentialjsdesignpatterns/book/
http://coding.smashingmagazine.com/2012/07/27/journey-through-the-javascript-mvc-jungle/
http://blog.stevensanderson.com/2012/08/01/rich-javascript-applications-the-seven-frameworks-throne-of-js-2012/
http://martinfowler.com/eaaDev/uiArchs.html
Model View Madness

More Related Content

What's hot

MVVM+MEF in Silvelight - W 2010ebday
MVVM+MEF in Silvelight - W 2010ebdayMVVM+MEF in Silvelight - W 2010ebday
MVVM+MEF in Silvelight - W 2010ebdayRicardo Fiel
 
Java Web Frameworks Sweetspots
Java Web Frameworks SweetspotsJava Web Frameworks Sweetspots
Java Web Frameworks SweetspotsMatt Raible
 
What's new in asp.net mvc 4
What's new in asp.net mvc 4What's new in asp.net mvc 4
What's new in asp.net mvc 4Simone Chiaretta
 
Frontend Monoliths: Run if you can!
Frontend Monoliths: Run if you can!Frontend Monoliths: Run if you can!
Frontend Monoliths: Run if you can!Jonas Bandi
 
Single Page Application presentation
Single Page Application presentationSingle Page Application presentation
Single Page Application presentationJohn Staveley
 
Style Guides Are The New Photoshop (Smashing Conference 2012)
Style Guides Are The New Photoshop (Smashing Conference 2012)Style Guides Are The New Photoshop (Smashing Conference 2012)
Style Guides Are The New Photoshop (Smashing Conference 2012)Stephen Hay
 
Responsive Design Workflow: Webshaped 2012
Responsive Design Workflow: Webshaped 2012Responsive Design Workflow: Webshaped 2012
Responsive Design Workflow: Webshaped 2012Stephen Hay
 
C# everywhere - Building Cross-Platform Apps with Xamarin and MvvmCross
C# everywhere - Building Cross-Platform Apps with Xamarin and MvvmCrossC# everywhere - Building Cross-Platform Apps with Xamarin and MvvmCross
C# everywhere - Building Cross-Platform Apps with Xamarin and MvvmCrossFlavius-Radu Demian
 
Xamarin Dev Days Madrid 2017 - Xamarin.Forms
Xamarin Dev Days Madrid 2017 -  Xamarin.FormsXamarin Dev Days Madrid 2017 -  Xamarin.Forms
Xamarin Dev Days Madrid 2017 - Xamarin.FormsJavier Suárez Ruiz
 
Style Guides Are The New Photoshop (Fronteers 2012)
Style Guides Are The New Photoshop (Fronteers 2012)Style Guides Are The New Photoshop (Fronteers 2012)
Style Guides Are The New Photoshop (Fronteers 2012)Stephen Hay
 
Spring Boot Tutorial | Microservices Spring Boot | Microservices Architecture...
Spring Boot Tutorial | Microservices Spring Boot | Microservices Architecture...Spring Boot Tutorial | Microservices Spring Boot | Microservices Architecture...
Spring Boot Tutorial | Microservices Spring Boot | Microservices Architecture...Edureka!
 

What's hot (13)

MVVM+MEF in Silvelight - W 2010ebday
MVVM+MEF in Silvelight - W 2010ebdayMVVM+MEF in Silvelight - W 2010ebday
MVVM+MEF in Silvelight - W 2010ebday
 
Java Web Frameworks Sweetspots
Java Web Frameworks SweetspotsJava Web Frameworks Sweetspots
Java Web Frameworks Sweetspots
 
What's new in asp.net mvc 4
What's new in asp.net mvc 4What's new in asp.net mvc 4
What's new in asp.net mvc 4
 
Introdução ao ASP .NET MVC
Introdução ao ASP .NET MVCIntrodução ao ASP .NET MVC
Introdução ao ASP .NET MVC
 
Frontend Monoliths: Run if you can!
Frontend Monoliths: Run if you can!Frontend Monoliths: Run if you can!
Frontend Monoliths: Run if you can!
 
MVVM frameworks - MvvmCross
MVVM frameworks - MvvmCrossMVVM frameworks - MvvmCross
MVVM frameworks - MvvmCross
 
Single Page Application presentation
Single Page Application presentationSingle Page Application presentation
Single Page Application presentation
 
Style Guides Are The New Photoshop (Smashing Conference 2012)
Style Guides Are The New Photoshop (Smashing Conference 2012)Style Guides Are The New Photoshop (Smashing Conference 2012)
Style Guides Are The New Photoshop (Smashing Conference 2012)
 
Responsive Design Workflow: Webshaped 2012
Responsive Design Workflow: Webshaped 2012Responsive Design Workflow: Webshaped 2012
Responsive Design Workflow: Webshaped 2012
 
C# everywhere - Building Cross-Platform Apps with Xamarin and MvvmCross
C# everywhere - Building Cross-Platform Apps with Xamarin and MvvmCrossC# everywhere - Building Cross-Platform Apps with Xamarin and MvvmCross
C# everywhere - Building Cross-Platform Apps with Xamarin and MvvmCross
 
Xamarin Dev Days Madrid 2017 - Xamarin.Forms
Xamarin Dev Days Madrid 2017 -  Xamarin.FormsXamarin Dev Days Madrid 2017 -  Xamarin.Forms
Xamarin Dev Days Madrid 2017 - Xamarin.Forms
 
Style Guides Are The New Photoshop (Fronteers 2012)
Style Guides Are The New Photoshop (Fronteers 2012)Style Guides Are The New Photoshop (Fronteers 2012)
Style Guides Are The New Photoshop (Fronteers 2012)
 
Spring Boot Tutorial | Microservices Spring Boot | Microservices Architecture...
Spring Boot Tutorial | Microservices Spring Boot | Microservices Architecture...Spring Boot Tutorial | Microservices Spring Boot | Microservices Architecture...
Spring Boot Tutorial | Microservices Spring Boot | Microservices Architecture...
 

Viewers also liked

Как интернет вещей «убьет» известные нам методики проектирования интерфейсов
Как интернет вещей «убьет» известные нам методики проектирования интерфейсовКак интернет вещей «убьет» известные нам методики проектирования интерфейсов
Как интернет вещей «убьет» известные нам методики проектирования интерфейсовAlexey Kopylov
 
Юрий Ветров — Алгоритмический дизайн
Юрий Ветров — Алгоритмический дизайнЮрий Ветров — Алгоритмический дизайн
Юрий Ветров — Алгоритмический дизайнYury Vetrov
 
Юзабилити и функциональность ДБО2017
Юзабилити и функциональность ДБО2017Юзабилити и функциональность ДБО2017
Юзабилити и функциональность ДБО2017Дмитрий Силаев
 
UX STRAT USA: Jon Ashley and Matt Wakeman, "Decision-Making Frameworks for Om...
UX STRAT USA: Jon Ashley and Matt Wakeman, "Decision-Making Frameworks for Om...UX STRAT USA: Jon Ashley and Matt Wakeman, "Decision-Making Frameworks for Om...
UX STRAT USA: Jon Ashley and Matt Wakeman, "Decision-Making Frameworks for Om...UX STRAT
 
UX STRAT USA: Shikha Desai, "Using Design Jams to Guide Microsoft's Office Su...
UX STRAT USA: Shikha Desai, "Using Design Jams to Guide Microsoft's Office Su...UX STRAT USA: Shikha Desai, "Using Design Jams to Guide Microsoft's Office Su...
UX STRAT USA: Shikha Desai, "Using Design Jams to Guide Microsoft's Office Su...UX STRAT
 
UX STRAT Europe, Michael Thompson, “Bridging the UX-Business Gap: A Framework...
UX STRAT Europe, Michael Thompson, “Bridging the UX-Business Gap: A Framework...UX STRAT Europe, Michael Thompson, “Bridging the UX-Business Gap: A Framework...
UX STRAT Europe, Michael Thompson, “Bridging the UX-Business Gap: A Framework...UX STRAT
 
UX STRAT Europe, Michel Jansen, “Using UX Strategy to Move Aegon Toward Custo...
UX STRAT Europe, Michel Jansen, “Using UX Strategy to Move Aegon Toward Custo...UX STRAT Europe, Michel Jansen, “Using UX Strategy to Move Aegon Toward Custo...
UX STRAT Europe, Michel Jansen, “Using UX Strategy to Move Aegon Toward Custo...UX STRAT
 
UX STRAT Europe, Kees Moens, “Haarlem Oil: UX Strategy at ING”
UX STRAT Europe, Kees Moens, “Haarlem Oil: UX Strategy at ING”UX STRAT Europe, Kees Moens, “Haarlem Oil: UX Strategy at ING”
UX STRAT Europe, Kees Moens, “Haarlem Oil: UX Strategy at ING”UX STRAT
 
UX STRAT USA: Beverly May, "Moving Your Team From Good To Great UX"
UX STRAT USA: Beverly May, "Moving Your Team From Good To Great UX"UX STRAT USA: Beverly May, "Moving Your Team From Good To Great UX"
UX STRAT USA: Beverly May, "Moving Your Team From Good To Great UX"UX STRAT
 
UX STRAT USA: Ben Judy, "Mission-Based UX Strategy: One Year Later"
UX STRAT USA: Ben Judy, "Mission-Based UX Strategy: One Year Later"UX STRAT USA: Ben Judy, "Mission-Based UX Strategy: One Year Later"
UX STRAT USA: Ben Judy, "Mission-Based UX Strategy: One Year Later"UX STRAT
 
UX STRAT USA: Dr Jeffrey Onken, "Experience Mapping UX Change Management In L...
UX STRAT USA: Dr Jeffrey Onken, "Experience Mapping UX Change Management In L...UX STRAT USA: Dr Jeffrey Onken, "Experience Mapping UX Change Management In L...
UX STRAT USA: Dr Jeffrey Onken, "Experience Mapping UX Change Management In L...UX STRAT
 
UX STRAT USA: Ha Phan, "Using Design Experiments as a Springboard for Strategy"
UX STRAT USA: Ha Phan, "Using Design Experiments as a Springboard for Strategy"UX STRAT USA: Ha Phan, "Using Design Experiments as a Springboard for Strategy"
UX STRAT USA: Ha Phan, "Using Design Experiments as a Springboard for Strategy"UX STRAT
 
UX STRAT USA 2016 Workshop: Jim Kalbach, "Mapping Experiences"
UX STRAT USA 2016 Workshop: Jim Kalbach, "Mapping Experiences"UX STRAT USA 2016 Workshop: Jim Kalbach, "Mapping Experiences"
UX STRAT USA 2016 Workshop: Jim Kalbach, "Mapping Experiences"UX STRAT
 
Speaking up for Experiences
Speaking up for ExperiencesSpeaking up for Experiences
Speaking up for ExperiencesStephen Anderson
 

Viewers also liked (15)

Как интернет вещей «убьет» известные нам методики проектирования интерфейсов
Как интернет вещей «убьет» известные нам методики проектирования интерфейсовКак интернет вещей «убьет» известные нам методики проектирования интерфейсов
Как интернет вещей «убьет» известные нам методики проектирования интерфейсов
 
How to Lean
How to LeanHow to Lean
How to Lean
 
Юрий Ветров — Алгоритмический дизайн
Юрий Ветров — Алгоритмический дизайнЮрий Ветров — Алгоритмический дизайн
Юрий Ветров — Алгоритмический дизайн
 
Юзабилити и функциональность ДБО2017
Юзабилити и функциональность ДБО2017Юзабилити и функциональность ДБО2017
Юзабилити и функциональность ДБО2017
 
UX STRAT USA: Jon Ashley and Matt Wakeman, "Decision-Making Frameworks for Om...
UX STRAT USA: Jon Ashley and Matt Wakeman, "Decision-Making Frameworks for Om...UX STRAT USA: Jon Ashley and Matt Wakeman, "Decision-Making Frameworks for Om...
UX STRAT USA: Jon Ashley and Matt Wakeman, "Decision-Making Frameworks for Om...
 
UX STRAT USA: Shikha Desai, "Using Design Jams to Guide Microsoft's Office Su...
UX STRAT USA: Shikha Desai, "Using Design Jams to Guide Microsoft's Office Su...UX STRAT USA: Shikha Desai, "Using Design Jams to Guide Microsoft's Office Su...
UX STRAT USA: Shikha Desai, "Using Design Jams to Guide Microsoft's Office Su...
 
UX STRAT Europe, Michael Thompson, “Bridging the UX-Business Gap: A Framework...
UX STRAT Europe, Michael Thompson, “Bridging the UX-Business Gap: A Framework...UX STRAT Europe, Michael Thompson, “Bridging the UX-Business Gap: A Framework...
UX STRAT Europe, Michael Thompson, “Bridging the UX-Business Gap: A Framework...
 
UX STRAT Europe, Michel Jansen, “Using UX Strategy to Move Aegon Toward Custo...
UX STRAT Europe, Michel Jansen, “Using UX Strategy to Move Aegon Toward Custo...UX STRAT Europe, Michel Jansen, “Using UX Strategy to Move Aegon Toward Custo...
UX STRAT Europe, Michel Jansen, “Using UX Strategy to Move Aegon Toward Custo...
 
UX STRAT Europe, Kees Moens, “Haarlem Oil: UX Strategy at ING”
UX STRAT Europe, Kees Moens, “Haarlem Oil: UX Strategy at ING”UX STRAT Europe, Kees Moens, “Haarlem Oil: UX Strategy at ING”
UX STRAT Europe, Kees Moens, “Haarlem Oil: UX Strategy at ING”
 
UX STRAT USA: Beverly May, "Moving Your Team From Good To Great UX"
UX STRAT USA: Beverly May, "Moving Your Team From Good To Great UX"UX STRAT USA: Beverly May, "Moving Your Team From Good To Great UX"
UX STRAT USA: Beverly May, "Moving Your Team From Good To Great UX"
 
UX STRAT USA: Ben Judy, "Mission-Based UX Strategy: One Year Later"
UX STRAT USA: Ben Judy, "Mission-Based UX Strategy: One Year Later"UX STRAT USA: Ben Judy, "Mission-Based UX Strategy: One Year Later"
UX STRAT USA: Ben Judy, "Mission-Based UX Strategy: One Year Later"
 
UX STRAT USA: Dr Jeffrey Onken, "Experience Mapping UX Change Management In L...
UX STRAT USA: Dr Jeffrey Onken, "Experience Mapping UX Change Management In L...UX STRAT USA: Dr Jeffrey Onken, "Experience Mapping UX Change Management In L...
UX STRAT USA: Dr Jeffrey Onken, "Experience Mapping UX Change Management In L...
 
UX STRAT USA: Ha Phan, "Using Design Experiments as a Springboard for Strategy"
UX STRAT USA: Ha Phan, "Using Design Experiments as a Springboard for Strategy"UX STRAT USA: Ha Phan, "Using Design Experiments as a Springboard for Strategy"
UX STRAT USA: Ha Phan, "Using Design Experiments as a Springboard for Strategy"
 
UX STRAT USA 2016 Workshop: Jim Kalbach, "Mapping Experiences"
UX STRAT USA 2016 Workshop: Jim Kalbach, "Mapping Experiences"UX STRAT USA 2016 Workshop: Jim Kalbach, "Mapping Experiences"
UX STRAT USA 2016 Workshop: Jim Kalbach, "Mapping Experiences"
 
Speaking up for Experiences
Speaking up for ExperiencesSpeaking up for Experiences
Speaking up for Experiences
 

Similar to Model View Madness

How I Accidentally Discovered MVVM
How I Accidentally Discovered MVVMHow I Accidentally Discovered MVVM
How I Accidentally Discovered MVVMBradford Dillon
 
MVC(Model View Controller),Web,Enterprise,Mobile
MVC(Model View Controller),Web,Enterprise,MobileMVC(Model View Controller),Web,Enterprise,Mobile
MVC(Model View Controller),Web,Enterprise,Mobilenaral
 
Technoligent providing custom ASP.NET MVC development services
Technoligent providing custom ASP.NET MVC development servicesTechnoligent providing custom ASP.NET MVC development services
Technoligent providing custom ASP.NET MVC development servicesAaron Jacobson
 
Mobile App Architectures & Coding guidelines
Mobile App Architectures & Coding guidelinesMobile App Architectures & Coding guidelines
Mobile App Architectures & Coding guidelinesQamar Abbas
 
Journey Through The Javascript MVC Jungle
Journey Through The Javascript MVC JungleJourney Through The Javascript MVC Jungle
Journey Through The Javascript MVC JungleBaris Aydinoglu
 
Modern ASP.NET Webskills
Modern ASP.NET WebskillsModern ASP.NET Webskills
Modern ASP.NET WebskillsCaleb Jenkins
 
ASP.NET MVC Presentation
ASP.NET MVC PresentationASP.NET MVC Presentation
ASP.NET MVC PresentationVolkan Uzun
 
Asp.net Overview and Controllers
Asp.net Overview and ControllersAsp.net Overview and Controllers
Asp.net Overview and ControllersMustafa Saeed
 
ASPNet MVC series for beginers part 1
ASPNet MVC series for beginers part 1ASPNet MVC series for beginers part 1
ASPNet MVC series for beginers part 1Gaurav Arora
 
Asp net mvc series for beginers part 1
Asp net mvc series for beginers part 1Asp net mvc series for beginers part 1
Asp net mvc series for beginers part 1Gaurav Arora
 
Ppt of Basic MVC Structure
Ppt of Basic MVC StructurePpt of Basic MVC Structure
Ppt of Basic MVC StructureDipika Wadhvani
 
Introduction to mvc architecture
Introduction to mvc architectureIntroduction to mvc architecture
Introduction to mvc architectureravindraquicsolv
 

Similar to Model View Madness (20)

Ios models
Ios modelsIos models
Ios models
 
How I Accidentally Discovered MVVM
How I Accidentally Discovered MVVMHow I Accidentally Discovered MVVM
How I Accidentally Discovered MVVM
 
Asp.netmvc handson
Asp.netmvc handsonAsp.netmvc handson
Asp.netmvc handson
 
Mvc
MvcMvc
Mvc
 
MVC & backbone.js
MVC & backbone.jsMVC & backbone.js
MVC & backbone.js
 
MVC(Model View Controller),Web,Enterprise,Mobile
MVC(Model View Controller),Web,Enterprise,MobileMVC(Model View Controller),Web,Enterprise,Mobile
MVC(Model View Controller),Web,Enterprise,Mobile
 
Mvc part 1
Mvc part 1Mvc part 1
Mvc part 1
 
Technoligent providing custom ASP.NET MVC development services
Technoligent providing custom ASP.NET MVC development servicesTechnoligent providing custom ASP.NET MVC development services
Technoligent providing custom ASP.NET MVC development services
 
Mobile App Architectures & Coding guidelines
Mobile App Architectures & Coding guidelinesMobile App Architectures & Coding guidelines
Mobile App Architectures & Coding guidelines
 
Journey Through The Javascript MVC Jungle
Journey Through The Javascript MVC JungleJourney Through The Javascript MVC Jungle
Journey Through The Javascript MVC Jungle
 
Modern ASP.NET Webskills
Modern ASP.NET WebskillsModern ASP.NET Webskills
Modern ASP.NET Webskills
 
Training: MVVM Pattern
Training: MVVM PatternTraining: MVVM Pattern
Training: MVVM Pattern
 
ASP.NET MVC Presentation
ASP.NET MVC PresentationASP.NET MVC Presentation
ASP.NET MVC Presentation
 
Asp.net Overview and Controllers
Asp.net Overview and ControllersAsp.net Overview and Controllers
Asp.net Overview and Controllers
 
ASPNet MVC series for beginers part 1
ASPNet MVC series for beginers part 1ASPNet MVC series for beginers part 1
ASPNet MVC series for beginers part 1
 
Asp net mvc series for beginers part 1
Asp net mvc series for beginers part 1Asp net mvc series for beginers part 1
Asp net mvc series for beginers part 1
 
Php and-mvc
Php and-mvcPhp and-mvc
Php and-mvc
 
Aspnet mvc
Aspnet mvcAspnet mvc
Aspnet mvc
 
Ppt of Basic MVC Structure
Ppt of Basic MVC StructurePpt of Basic MVC Structure
Ppt of Basic MVC Structure
 
Introduction to mvc architecture
Introduction to mvc architectureIntroduction to mvc architecture
Introduction to mvc architecture
 

More from Mike Wilcox

Accessibility for Fun and Profit
Accessibility for Fun and ProfitAccessibility for Fun and Profit
Accessibility for Fun and ProfitMike Wilcox
 
Webpack: What it is, What it does, Whether you need it
Webpack: What it is, What it does, Whether you need itWebpack: What it is, What it does, Whether you need it
Webpack: What it is, What it does, Whether you need itMike Wilcox
 
Web Components v1
Web Components v1Web Components v1
Web Components v1Mike Wilcox
 
Great Responsive-ability Web Design
Great Responsive-ability Web DesignGreat Responsive-ability Web Design
Great Responsive-ability Web DesignMike Wilcox
 
Professional JavaScript: AntiPatterns
Professional JavaScript: AntiPatternsProfessional JavaScript: AntiPatterns
Professional JavaScript: AntiPatternsMike Wilcox
 
Hardcore JavaScript – Write it Right
Hardcore JavaScript – Write it RightHardcore JavaScript – Write it Right
Hardcore JavaScript – Write it RightMike Wilcox
 
The Great Semicolon Debate
The Great Semicolon DebateThe Great Semicolon Debate
The Great Semicolon DebateMike Wilcox
 
AMD - Why, What and How
AMD - Why, What and HowAMD - Why, What and How
AMD - Why, What and HowMike Wilcox
 
Webpage Design Basics for Non-Designers
Webpage Design Basics for Non-DesignersWebpage Design Basics for Non-Designers
Webpage Design Basics for Non-DesignersMike Wilcox
 
Why You Need a Front End Developer
Why You Need a Front End DeveloperWhy You Need a Front End Developer
Why You Need a Front End DeveloperMike Wilcox
 
A Conversation About REST
A Conversation About RESTA Conversation About REST
A Conversation About RESTMike Wilcox
 
The Fight Over HTML5
The Fight Over HTML5The Fight Over HTML5
The Fight Over HTML5Mike Wilcox
 
The Fight Over HTML5
The Fight Over HTML5The Fight Over HTML5
The Fight Over HTML5Mike Wilcox
 
How to get a Job as a Front End Developer
How to get a Job as a Front End DeveloperHow to get a Job as a Front End Developer
How to get a Job as a Front End DeveloperMike Wilcox
 
The History of HTML5
The History of HTML5The History of HTML5
The History of HTML5Mike Wilcox
 
Thats Not Flash?
Thats Not Flash?Thats Not Flash?
Thats Not Flash?Mike Wilcox
 

More from Mike Wilcox (20)

Accessibility for Fun and Profit
Accessibility for Fun and ProfitAccessibility for Fun and Profit
Accessibility for Fun and Profit
 
WTF R PWAs?
WTF R PWAs?WTF R PWAs?
WTF R PWAs?
 
Advanced React
Advanced ReactAdvanced React
Advanced React
 
Webpack: What it is, What it does, Whether you need it
Webpack: What it is, What it does, Whether you need itWebpack: What it is, What it does, Whether you need it
Webpack: What it is, What it does, Whether you need it
 
Dangerous CSS
Dangerous CSSDangerous CSS
Dangerous CSS
 
Web Components v1
Web Components v1Web Components v1
Web Components v1
 
Great Responsive-ability Web Design
Great Responsive-ability Web DesignGreat Responsive-ability Web Design
Great Responsive-ability Web Design
 
Professional JavaScript: AntiPatterns
Professional JavaScript: AntiPatternsProfessional JavaScript: AntiPatterns
Professional JavaScript: AntiPatterns
 
Hardcore JavaScript – Write it Right
Hardcore JavaScript – Write it RightHardcore JavaScript – Write it Right
Hardcore JavaScript – Write it Right
 
The Great Semicolon Debate
The Great Semicolon DebateThe Great Semicolon Debate
The Great Semicolon Debate
 
AMD - Why, What and How
AMD - Why, What and HowAMD - Why, What and How
AMD - Why, What and How
 
Dojo & HTML5
Dojo & HTML5Dojo & HTML5
Dojo & HTML5
 
Webpage Design Basics for Non-Designers
Webpage Design Basics for Non-DesignersWebpage Design Basics for Non-Designers
Webpage Design Basics for Non-Designers
 
Why You Need a Front End Developer
Why You Need a Front End DeveloperWhy You Need a Front End Developer
Why You Need a Front End Developer
 
A Conversation About REST
A Conversation About RESTA Conversation About REST
A Conversation About REST
 
The Fight Over HTML5
The Fight Over HTML5The Fight Over HTML5
The Fight Over HTML5
 
The Fight Over HTML5
The Fight Over HTML5The Fight Over HTML5
The Fight Over HTML5
 
How to get a Job as a Front End Developer
How to get a Job as a Front End DeveloperHow to get a Job as a Front End Developer
How to get a Job as a Front End Developer
 
The History of HTML5
The History of HTML5The History of HTML5
The History of HTML5
 
Thats Not Flash?
Thats Not Flash?Thats Not Flash?
Thats Not Flash?
 

Recently uploaded

Story boards and shot lists for my a level piece
Story boards and shot lists for my a level pieceStory boards and shot lists for my a level piece
Story boards and shot lists for my a level piececharlottematthew16
 
My Hashitalk Indonesia April 2024 Presentation
My Hashitalk Indonesia April 2024 PresentationMy Hashitalk Indonesia April 2024 Presentation
My Hashitalk Indonesia April 2024 PresentationRidwan Fadjar
 
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024BookNet Canada
 
Unraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdfUnraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdfAlex Barbosa Coqueiro
 
costume and set research powerpoint presentation
costume and set research powerpoint presentationcostume and set research powerpoint presentation
costume and set research powerpoint presentationphoebematthew05
 
Install Stable Diffusion in windows machine
Install Stable Diffusion in windows machineInstall Stable Diffusion in windows machine
Install Stable Diffusion in windows machinePadma Pradeep
 
My INSURER PTE LTD - Insurtech Innovation Award 2024
My INSURER PTE LTD - Insurtech Innovation Award 2024My INSURER PTE LTD - Insurtech Innovation Award 2024
My INSURER PTE LTD - Insurtech Innovation Award 2024The Digital Insurer
 
Gen AI in Business - Global Trends Report 2024.pdf
Gen AI in Business - Global Trends Report 2024.pdfGen AI in Business - Global Trends Report 2024.pdf
Gen AI in Business - Global Trends Report 2024.pdfAddepto
 
Powerpoint exploring the locations used in television show Time Clash
Powerpoint exploring the locations used in television show Time ClashPowerpoint exploring the locations used in television show Time Clash
Powerpoint exploring the locations used in television show Time Clashcharlottematthew16
 
Streamlining Python Development: A Guide to a Modern Project Setup
Streamlining Python Development: A Guide to a Modern Project SetupStreamlining Python Development: A Guide to a Modern Project Setup
Streamlining Python Development: A Guide to a Modern Project SetupFlorian Wilhelm
 
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks..."LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...Fwdays
 
Developer Data Modeling Mistakes: From Postgres to NoSQL
Developer Data Modeling Mistakes: From Postgres to NoSQLDeveloper Data Modeling Mistakes: From Postgres to NoSQL
Developer Data Modeling Mistakes: From Postgres to NoSQLScyllaDB
 
"Federated learning: out of reach no matter how close",Oleksandr Lapshyn
"Federated learning: out of reach no matter how close",Oleksandr Lapshyn"Federated learning: out of reach no matter how close",Oleksandr Lapshyn
"Federated learning: out of reach no matter how close",Oleksandr LapshynFwdays
 
Bun (KitWorks Team Study 노별마루 발표 2024.4.22)
Bun (KitWorks Team Study 노별마루 발표 2024.4.22)Bun (KitWorks Team Study 노별마루 발표 2024.4.22)
Bun (KitWorks Team Study 노별마루 발표 2024.4.22)Wonjun Hwang
 
APIForce Zurich 5 April Automation LPDG
APIForce Zurich 5 April  Automation LPDGAPIForce Zurich 5 April  Automation LPDG
APIForce Zurich 5 April Automation LPDGMarianaLemus7
 
Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!Commit University
 
Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...
Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...
Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...shyamraj55
 
"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii Soldatenko"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii SoldatenkoFwdays
 
Advanced Test Driven-Development @ php[tek] 2024
Advanced Test Driven-Development @ php[tek] 2024Advanced Test Driven-Development @ php[tek] 2024
Advanced Test Driven-Development @ php[tek] 2024Scott Keck-Warren
 

Recently uploaded (20)

Hot Sexy call girls in Panjabi Bagh 🔝 9953056974 🔝 Delhi escort Service
Hot Sexy call girls in Panjabi Bagh 🔝 9953056974 🔝 Delhi escort ServiceHot Sexy call girls in Panjabi Bagh 🔝 9953056974 🔝 Delhi escort Service
Hot Sexy call girls in Panjabi Bagh 🔝 9953056974 🔝 Delhi escort Service
 
Story boards and shot lists for my a level piece
Story boards and shot lists for my a level pieceStory boards and shot lists for my a level piece
Story boards and shot lists for my a level piece
 
My Hashitalk Indonesia April 2024 Presentation
My Hashitalk Indonesia April 2024 PresentationMy Hashitalk Indonesia April 2024 Presentation
My Hashitalk Indonesia April 2024 Presentation
 
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
 
Unraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdfUnraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdf
 
costume and set research powerpoint presentation
costume and set research powerpoint presentationcostume and set research powerpoint presentation
costume and set research powerpoint presentation
 
Install Stable Diffusion in windows machine
Install Stable Diffusion in windows machineInstall Stable Diffusion in windows machine
Install Stable Diffusion in windows machine
 
My INSURER PTE LTD - Insurtech Innovation Award 2024
My INSURER PTE LTD - Insurtech Innovation Award 2024My INSURER PTE LTD - Insurtech Innovation Award 2024
My INSURER PTE LTD - Insurtech Innovation Award 2024
 
Gen AI in Business - Global Trends Report 2024.pdf
Gen AI in Business - Global Trends Report 2024.pdfGen AI in Business - Global Trends Report 2024.pdf
Gen AI in Business - Global Trends Report 2024.pdf
 
Powerpoint exploring the locations used in television show Time Clash
Powerpoint exploring the locations used in television show Time ClashPowerpoint exploring the locations used in television show Time Clash
Powerpoint exploring the locations used in television show Time Clash
 
Streamlining Python Development: A Guide to a Modern Project Setup
Streamlining Python Development: A Guide to a Modern Project SetupStreamlining Python Development: A Guide to a Modern Project Setup
Streamlining Python Development: A Guide to a Modern Project Setup
 
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks..."LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
 
Developer Data Modeling Mistakes: From Postgres to NoSQL
Developer Data Modeling Mistakes: From Postgres to NoSQLDeveloper Data Modeling Mistakes: From Postgres to NoSQL
Developer Data Modeling Mistakes: From Postgres to NoSQL
 
"Federated learning: out of reach no matter how close",Oleksandr Lapshyn
"Federated learning: out of reach no matter how close",Oleksandr Lapshyn"Federated learning: out of reach no matter how close",Oleksandr Lapshyn
"Federated learning: out of reach no matter how close",Oleksandr Lapshyn
 
Bun (KitWorks Team Study 노별마루 발표 2024.4.22)
Bun (KitWorks Team Study 노별마루 발표 2024.4.22)Bun (KitWorks Team Study 노별마루 발표 2024.4.22)
Bun (KitWorks Team Study 노별마루 발표 2024.4.22)
 
APIForce Zurich 5 April Automation LPDG
APIForce Zurich 5 April  Automation LPDGAPIForce Zurich 5 April  Automation LPDG
APIForce Zurich 5 April Automation LPDG
 
Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!
 
Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...
Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...
Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...
 
"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii Soldatenko"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii Soldatenko
 
Advanced Test Driven-Development @ php[tek] 2024
Advanced Test Driven-Development @ php[tek] 2024Advanced Test Driven-Development @ php[tek] 2024
Advanced Test Driven-Development @ php[tek] 2024
 

Model View Madness

  • 1. Model View Madness By Mike Wilcox May 2013
  • 2. What is MVC? Maybe a picture will help...
  • 14. MVC Defined…? Traditional MVC is the View observes the Model which is updated by the Controller
  • 15. MVC Defined…? Is this the only way to do it? Traditional MVC is the View observes the Model which is updated by the Controller
  • 16. MVC Defined…? Is this the only way to do it? No Traditional MVC is the View observes the Model which is updated by the Controller
  • 17. MVC Defined…? Is this the only way to do it? No Does Controller read/write the Model Traditional MVC is the View observes the Model which is updated by the Controller
  • 18. MVC Defined…? Is this the only way to do it? No Does Controller read/write the Model Yes Traditional MVC is the View observes the Model which is updated by the Controller
  • 19. MVC Defined…? Is this the only way to do it? No Does Controller read/write the Model Yes Does Controller read/write the View? Traditional MVC is the View observes the Model which is updated by the Controller
  • 20. MVC Defined…? Is this the only way to do it? No Does Controller read/write the Model Yes Does Controller read/write the View? Maybe Traditional MVC is the View observes the Model which is updated by the Controller
  • 21. MVC Defined…? Is this the only way to do it? No Does Controller read/write the Model Yes Does Controller read/write the View? Maybe Does View read/write the Model? Traditional MVC is the View observes the Model which is updated by the Controller
  • 22. MVC Defined…? Is this the only way to do it? No Does Controller read/write the Model Yes Does Controller read/write the View? Maybe Does View read/write the Model? Possibly Traditional MVC is the View observes the Model which is updated by the Controller
  • 25. Why MVC? Separates development between Data, Code and UI
  • 26. Why MVC? Separates development between Data, Code and UI Each layer can be developed independently
  • 27. Why MVC? Separates development between Data, Code and UI Each layer can be developed independently Minimizes turnaround time
  • 28. Why MVC? Separates development between Data, Code and UI Each layer can be developed independently Minimizes turnaround time Less overlap between developers and designers
  • 29. Why MVC? Separates development between Data, Code and UI Each layer can be developed independently Minimizes turnaround time Less overlap between developers and designers Views can be swapped out for Mobile, desktop, apps, etc
  • 30. Why MVC? Separates development between Data, Code and UI Each layer can be developed independently Minimizes turnaround time Less overlap between developers and designers Views can be swapped out for Mobile, desktop, apps, etc BLAH BLAH BLAH!
  • 31. Let’s all work together!
  • 32. Let’s all work together! Validation UI/UX Styling Business Logic
  • 33. Let’s all work together! Validation UI/UX Styling Business Logic Merge Hell
  • 36. MVC History Created in the late 70s by the famous Xerox Parc labs, for their Smalltalk system
  • 37. MVC History Created in the late 70s by the famous Xerox Parc labs, for their Smalltalk system First attempts to do serious UI work on any kind of scale
  • 38. MVC History Created in the late 70s by the famous Xerox Parc labs, for their Smalltalk system First attempts to do serious UI work on any kind of scale Interfaces in the 70s were not very gooey.
  • 39. MVC History Created in the late 70s by the famous Xerox Parc labs, for their Smalltalk system First attempts to do serious UI work on any kind of scale Interfaces in the 70s were not very gooey. MVC was developed as a UI pattern - not an application structure
  • 41. MVC History As Smalltalk developed in the 80's and 90's this led to some significant variations on the classic MVC model
  • 42. MVC History As Smalltalk developed in the 80's and 90's this led to some significant variations on the classic MVC model One could say that MVC disappeared in the 90s
  • 43. MVC History As Smalltalk developed in the 80's and 90's this led to some significant variations on the classic MVC model One could say that MVC disappeared in the 90s if you consider the view/controller separation to be an essential part of MVC
  • 44. MVC History As Smalltalk developed in the 80's and 90's this led to some significant variations on the classic MVC model One could say that MVC disappeared in the 90s if you consider the view/controller separation to be an essential part of MVC The key MVC takeaway was Separated Presentation and Observer Synchronization
  • 45. MVC History As Smalltalk developed in the 80's and 90's this led to some significant variations on the classic MVC model One could say that MVC disappeared in the 90s if you consider the view/controller separation to be an essential part of MVC The key MVC takeaway was Separated Presentation and Observer Synchronization For many, this was MVC.
  • 47. MVC History MVP - Model View Presenter Newer, derived patterns
  • 48. MVC History MVP - Model View Presenter Specialized MVC with dominant controller Newer, derived patterns
  • 49. MVC History MVP - Model View Presenter Specialized MVC with dominant controller MVVM - Model View ViewModel Newer, derived patterns
  • 50. MVC History MVP - Model View Presenter Specialized MVC with dominant controller MVVM - Model View ViewModel binds events to application methods Newer, derived patterns
  • 51. MVC History MVP - Model View Presenter Specialized MVC with dominant controller MVVM - Model View ViewModel binds events to application methods Newer, derived patterns Most modern JavaScript libraries are loosely based on these two patterns.
  • 54. Smalltalk Model domain-specific knowledge or data Notify observers about state Isolated from View Modified by the Controller View The UI Observes Models Controllers Handles the input Tells Model of change in state One of the languages from which JavaScript is based Smalltalk is an object-oriented, dynamically typed, reflective programming language Created by Alan Kay at Xerox Parc No it’s not JavaScript. This is for comparison! MVC
  • 58. Backbone Model domain-level data provides REST- persistable Models with simple routing View UI and Interaction Choose your own Most devs used handlebars.js
  • 59. Backbone Model domain-level data provides REST- persistable Models with simple routing View UI and Interaction Choose your own Most devs used handlebars.js Collections Groups of Models
  • 60. Backbone Model domain-level data provides REST- persistable Models with simple routing View UI and Interaction Choose your own Most devs used handlebars.js Collections Groups of Models Router Maps URLs to functions Optional
  • 61. Backbone Model domain-level data provides REST- persistable Models with simple routing View UI and Interaction Choose your own Most devs used handlebars.js Collections Groups of Models Router Maps URLs to functions Optional Controller Mixed with the View
  • 62. Backbone Model domain-level data provides REST- persistable Models with simple routing View UI and Interaction Choose your own Most devs used handlebars.js Collections Groups of Models Router Maps URLs to functions Optional Controller Mixed with the View Most minimal of all the libraries Most popular Not opinionated (gets out of your way) Created by Jeremy Ashkenas
  • 63. Backbone Model domain-level data provides REST- persistable Models with simple routing View UI and Interaction Choose your own Most devs used handlebars.js Collections Groups of Models Router Maps URLs to functions Optional Controller Mixed with the View Most minimal of all the libraries Most popular Not opinionated (gets out of your way) Created by Jeremy Ashkenas MV*
  • 64. Ember
  • 65. Ember
  • 68. Ember Model domain-level data relationships between models View HTML templates Controller Manages array of objects
  • 69. Ember Model domain-level data relationships between models View HTML templates State Manager Mediates between MVC parts Controller Manages array of objects
  • 70. Ember Model domain-level data relationships between models View HTML templates State Manager Mediates between MVC parts Controller Manages array of objects MV*
  • 71. Ember Model domain-level data relationships between models View HTML templates State Manager Mediates between MVC parts Controller Manages array of objects Opinionated and “ambitious”. Largest MV* framework Decomposes your page into a hierarchy of controls Ties in with a statemachine, hierarchical routing system Inspired by Rails and Cocoa Created by Yehuda Katz MV*
  • 75. Spine.js Model Domain-data Controllers bind to Model events View HTML fragments Use any template language No Logo.
  • 76. Spine.js Model Domain-data Controllers bind to Model events View HTML fragments Use any template language Controllers Respond to DOM events Render templates Sync Models and Views No Logo.
  • 77. Spine.js Model Domain-data Controllers bind to Model events View HTML fragments Use any template language Controllers Respond to DOM events Render templates Sync Models and Views Router Hash fragment based routing No Logo.
  • 78. Spine.js Model Domain-data Controllers bind to Model events View HTML fragments Use any template language Controllers Respond to DOM events Render templates Sync Models and Views Router Hash fragment based routing No Logo. MV*
  • 79. Spine.js Model Domain-data Controllers bind to Model events View HTML fragments Use any template language Controllers Respond to DOM events Render templates Sync Models and Views Router Hash fragment based routing No Logo. Written in CoffeeScript. Like Backbone but… different. O’Reilly book example grew into an actual OSS project Is a kind of modified clone of Backbone (hence the name) Created by Alex MacCaw MV*
  • 82. Angular.js Model Single entity object or entire data model (all entities) Live in data-bindings
  • 83. Angular.js Model Single entity object or entire data model (all entities) Live in data-bindings View Rendered DOM based on what’s in the Controller and Model Templates Bindings between View and Model
  • 84. Angular.js Model Single entity object or entire data model (all entities) Live in data-bindings View Rendered DOM based on what’s in the Controller and Model Templates Bindings between View and Model Controller API for observing Models API for propagating changes through the system
  • 85. Angular.js Model Single entity object or entire data model (all entities) Live in data-bindings View Rendered DOM based on what’s in the Controller and Model Templates Bindings between View and Model Controller API for observing Models API for propagating changes through the system Scope Classes for augmenting Angular Scopes Augments $scope
  • 86. Angular.js Model Single entity object or entire data model (all entities) Live in data-bindings View Rendered DOM based on what’s in the Controller and Model Templates Bindings between View and Model Controller API for observing Models API for propagating changes through the system Scope Classes for augmenting Angular Scopes Augments $scope MVC
  • 87. Angular.js Model Single entity object or entire data model (all entities) Live in data-bindings View Rendered DOM based on what’s in the Controller and Model Templates Bindings between View and Model Controller API for observing Models API for propagating changes through the system Scope Classes for augmenting Angular Scopes Augments $scope Strictly Opinionated The AngularJS guys expect DOM-based templating will be native in browsers Made by Google MVC
  • 90. Knockout.js Model ViewModels communicate with Model observable Models with automatic dependency detection
  • 91. Knockout.js Model ViewModels communicate with Model observable Models with automatic dependency detection View Your choice of template library DOM-based templates with declarative bindings Observe and change ViewModels Automatic UI refresh
  • 92. Knockout.js Model ViewModels communicate with Model observable Models with automatic dependency detection View Your choice of template library DOM-based templates with declarative bindings Observe and change ViewModels Automatic UI refresh ViewModel Business logic Unaware of Views Makes heavy use of ko.observables
  • 93. Knockout.js Model ViewModels communicate with Model observable Models with automatic dependency detection View Your choice of template library DOM-based templates with declarative bindings Observe and change ViewModels Automatic UI refresh ViewModel Business logic Unaware of Views Makes heavy use of ko.observables Scope Extensive management of the context stack
  • 94. Knockout.js Model ViewModels communicate with Model observable Models with automatic dependency detection View Your choice of template library DOM-based templates with declarative bindings Observe and change ViewModels Automatic UI refresh ViewModel Business logic Unaware of Views Makes heavy use of ko.observables Scope Extensive management of the context stack Not opinionated Does one thing well (UI), even on IE 6. Can work in a small section of your page Created by Steve Sanderson
  • 95. Knockout.js Model ViewModels communicate with Model observable Models with automatic dependency detection View Your choice of template library DOM-based templates with declarative bindings Observe and change ViewModels Automatic UI refresh ViewModel Business logic Unaware of Views Makes heavy use of ko.observables Scope Extensive management of the context stack Not opinionated Does one thing well (UI), even on IE 6. Can work in a small section of your page Created by Steve Sanderson MVVM
  • 97. Conclusion Routers are widely considered to not be part of the MVC pattern
  • 98. Conclusion Routers are widely considered to not be part of the MVC pattern All libraries have templates and bindings in common
  • 99. Conclusion Routers are widely considered to not be part of the MVC pattern All libraries have templates and bindings in common Strict MVC adherence is as important as strict AJAX adherence
  • 100. Conclusion Routers are widely considered to not be part of the MVC pattern All libraries have templates and bindings in common Strict MVC adherence is as important as strict AJAX adherence MVC is simply an agreed-upon pattern to help us understand code
  • 101. Conclusion Routers are widely considered to not be part of the MVC pattern All libraries have templates and bindings in common Strict MVC adherence is as important as strict AJAX adherence MVC is simply an agreed-upon pattern to help us understand code MVC should separate business logic from the UI
  • 102. Conclusion Routers are widely considered to not be part of the MVC pattern All libraries have templates and bindings in common Strict MVC adherence is as important as strict AJAX adherence MVC is simply an agreed-upon pattern to help us understand code MVC should separate business logic from the UI It’s all about the bindings.
  • 103. References A special mention to Addy Osmani whom has written extensively on JavaScript MVC frameworks. http://addyosmani.com/blog/digesting-javascript-mvc-pattern-abuse-or-evolution/ http://addyosmani.com/resources/essentialjsdesignpatterns/book/ http://coding.smashingmagazine.com/2012/07/27/journey-through-the-javascript-mvc-jungle/ http://blog.stevensanderson.com/2012/08/01/rich-javascript-applications-the-seven-frameworks-throne-of-js-2012/ http://martinfowler.com/eaaDev/uiArchs.html