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

Connecting the Dots for Information Discovery.pdf
Connecting the Dots for Information Discovery.pdfConnecting the Dots for Information Discovery.pdf
Connecting the Dots for Information Discovery.pdfNeo4j
 
How to Effectively Monitor SD-WAN and SASE Environments with ThousandEyes
How to Effectively Monitor SD-WAN and SASE Environments with ThousandEyesHow to Effectively Monitor SD-WAN and SASE Environments with ThousandEyes
How to Effectively Monitor SD-WAN and SASE Environments with ThousandEyesThousandEyes
 
Data governance with Unity Catalog Presentation
Data governance with Unity Catalog PresentationData governance with Unity Catalog Presentation
Data governance with Unity Catalog PresentationKnoldus Inc.
 
Assure Ecommerce and Retail Operations Uptime with ThousandEyes
Assure Ecommerce and Retail Operations Uptime with ThousandEyesAssure Ecommerce and Retail Operations Uptime with ThousandEyes
Assure Ecommerce and Retail Operations Uptime with ThousandEyesThousandEyes
 
The Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptx
The Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptxThe Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptx
The Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptxLoriGlavin3
 
Scale your database traffic with Read & Write split using MySQL Router
Scale your database traffic with Read & Write split using MySQL RouterScale your database traffic with Read & Write split using MySQL Router
Scale your database traffic with Read & Write split using MySQL RouterMydbops
 
Modern Roaming for Notes and Nomad – Cheaper Faster Better Stronger
Modern Roaming for Notes and Nomad – Cheaper Faster Better StrongerModern Roaming for Notes and Nomad – Cheaper Faster Better Stronger
Modern Roaming for Notes and Nomad – Cheaper Faster Better Strongerpanagenda
 
DevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platformsDevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platformsSergiu Bodiu
 
Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024BookNet Canada
 
Generative AI for Technical Writer or Information Developers
Generative AI for Technical Writer or Information DevelopersGenerative AI for Technical Writer or Information Developers
Generative AI for Technical Writer or Information DevelopersRaghuram Pandurangan
 
Use of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptx
Use of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptxUse of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptx
Use of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptxLoriGlavin3
 
2024 April Patch Tuesday
2024 April Patch Tuesday2024 April Patch Tuesday
2024 April Patch TuesdayIvanti
 
[Webinar] SpiraTest - Setting New Standards in Quality Assurance
[Webinar] SpiraTest - Setting New Standards in Quality Assurance[Webinar] SpiraTest - Setting New Standards in Quality Assurance
[Webinar] SpiraTest - Setting New Standards in Quality AssuranceInflectra
 
Manual 508 Accessibility Compliance Audit
Manual 508 Accessibility Compliance AuditManual 508 Accessibility Compliance Audit
Manual 508 Accessibility Compliance AuditSkynet Technologies
 
Potential of AI (Generative AI) in Business: Learnings and Insights
Potential of AI (Generative AI) in Business: Learnings and InsightsPotential of AI (Generative AI) in Business: Learnings and Insights
Potential of AI (Generative AI) in Business: Learnings and InsightsRavi Sanghani
 
Take control of your SAP testing with UiPath Test Suite
Take control of your SAP testing with UiPath Test SuiteTake control of your SAP testing with UiPath Test Suite
Take control of your SAP testing with UiPath Test SuiteDianaGray10
 
The Future Roadmap for the Composable Data Stack - Wes McKinney - Data Counci...
The Future Roadmap for the Composable Data Stack - Wes McKinney - Data Counci...The Future Roadmap for the Composable Data Stack - Wes McKinney - Data Counci...
The Future Roadmap for the Composable Data Stack - Wes McKinney - Data Counci...Wes McKinney
 
From Family Reminiscence to Scholarly Archive .
From Family Reminiscence to Scholarly Archive .From Family Reminiscence to Scholarly Archive .
From Family Reminiscence to Scholarly Archive .Alan Dix
 
How to write a Business Continuity Plan
How to write a Business Continuity PlanHow to write a Business Continuity Plan
How to write a Business Continuity PlanDatabarracks
 
(How to Program) Paul Deitel, Harvey Deitel-Java How to Program, Early Object...
(How to Program) Paul Deitel, Harvey Deitel-Java How to Program, Early Object...(How to Program) Paul Deitel, Harvey Deitel-Java How to Program, Early Object...
(How to Program) Paul Deitel, Harvey Deitel-Java How to Program, Early Object...AliaaTarek5
 

Recently uploaded (20)

Connecting the Dots for Information Discovery.pdf
Connecting the Dots for Information Discovery.pdfConnecting the Dots for Information Discovery.pdf
Connecting the Dots for Information Discovery.pdf
 
How to Effectively Monitor SD-WAN and SASE Environments with ThousandEyes
How to Effectively Monitor SD-WAN and SASE Environments with ThousandEyesHow to Effectively Monitor SD-WAN and SASE Environments with ThousandEyes
How to Effectively Monitor SD-WAN and SASE Environments with ThousandEyes
 
Data governance with Unity Catalog Presentation
Data governance with Unity Catalog PresentationData governance with Unity Catalog Presentation
Data governance with Unity Catalog Presentation
 
Assure Ecommerce and Retail Operations Uptime with ThousandEyes
Assure Ecommerce and Retail Operations Uptime with ThousandEyesAssure Ecommerce and Retail Operations Uptime with ThousandEyes
Assure Ecommerce and Retail Operations Uptime with ThousandEyes
 
The Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptx
The Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptxThe Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptx
The Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptx
 
Scale your database traffic with Read & Write split using MySQL Router
Scale your database traffic with Read & Write split using MySQL RouterScale your database traffic with Read & Write split using MySQL Router
Scale your database traffic with Read & Write split using MySQL Router
 
Modern Roaming for Notes and Nomad – Cheaper Faster Better Stronger
Modern Roaming for Notes and Nomad – Cheaper Faster Better StrongerModern Roaming for Notes and Nomad – Cheaper Faster Better Stronger
Modern Roaming for Notes and Nomad – Cheaper Faster Better Stronger
 
DevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platformsDevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platforms
 
Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
 
Generative AI for Technical Writer or Information Developers
Generative AI for Technical Writer or Information DevelopersGenerative AI for Technical Writer or Information Developers
Generative AI for Technical Writer or Information Developers
 
Use of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptx
Use of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptxUse of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptx
Use of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptx
 
2024 April Patch Tuesday
2024 April Patch Tuesday2024 April Patch Tuesday
2024 April Patch Tuesday
 
[Webinar] SpiraTest - Setting New Standards in Quality Assurance
[Webinar] SpiraTest - Setting New Standards in Quality Assurance[Webinar] SpiraTest - Setting New Standards in Quality Assurance
[Webinar] SpiraTest - Setting New Standards in Quality Assurance
 
Manual 508 Accessibility Compliance Audit
Manual 508 Accessibility Compliance AuditManual 508 Accessibility Compliance Audit
Manual 508 Accessibility Compliance Audit
 
Potential of AI (Generative AI) in Business: Learnings and Insights
Potential of AI (Generative AI) in Business: Learnings and InsightsPotential of AI (Generative AI) in Business: Learnings and Insights
Potential of AI (Generative AI) in Business: Learnings and Insights
 
Take control of your SAP testing with UiPath Test Suite
Take control of your SAP testing with UiPath Test SuiteTake control of your SAP testing with UiPath Test Suite
Take control of your SAP testing with UiPath Test Suite
 
The Future Roadmap for the Composable Data Stack - Wes McKinney - Data Counci...
The Future Roadmap for the Composable Data Stack - Wes McKinney - Data Counci...The Future Roadmap for the Composable Data Stack - Wes McKinney - Data Counci...
The Future Roadmap for the Composable Data Stack - Wes McKinney - Data Counci...
 
From Family Reminiscence to Scholarly Archive .
From Family Reminiscence to Scholarly Archive .From Family Reminiscence to Scholarly Archive .
From Family Reminiscence to Scholarly Archive .
 
How to write a Business Continuity Plan
How to write a Business Continuity PlanHow to write a Business Continuity Plan
How to write a Business Continuity Plan
 
(How to Program) Paul Deitel, Harvey Deitel-Java How to Program, Early Object...
(How to Program) Paul Deitel, Harvey Deitel-Java How to Program, Early Object...(How to Program) Paul Deitel, Harvey Deitel-Java How to Program, Early Object...
(How to Program) Paul Deitel, Harvey Deitel-Java How to Program, Early Object...
 

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