SlideShare una empresa de Scribd logo
1 de 36
Descargar para leer sin conexión
It’s Just a View
An Introduction to
model view controller
Aaron Nordyke, Sr. Software Engineer
Separation of
Concerns
Spaghetti Code

           UGLY
      g

          the
There once was
a drug named

Xigris…
Xigris                Xigris

           Xigris                         Xigris

            Xigris
 Xigris
                                 Xigris


            Xigris
                                 Xigris
 Xigris


               Xigris                       Xigris
Xigris
Modules

       GOOD
     th e
Two
Engineers
Made a bet
Maximize
Developer Sanity
MVC
      BADASS
 g

     the
DATA   DOM
Controller
                View to Model
                 Interaction
                One Direction




      View                             Model
 User Interaction                 Data
 HTML                             Business Logic
                                   DB Interaction
                      Observer
                      Pattern
2   View alerts
                              Controller              Controller Updates Model
    controller of                                 3
    particular
    event




                     4   Model alerts view that
                         it has changed.
            View                                           Model




                                 5   View grabs model data
1   User interacts                   and updates itself.
    with a view
2   View alerts
                      Controller              Controller Updates Model
    controller of                         3
    particular
    event




             View 1                                 Model
                       4 Model alerts
                           view that it has
                           changed.

1 User interacts
    with a view
                              View 2          5   View grabs model data
                                                  and updates itself.
Controller
                View to Model
                 Interaction
                One Direction




      View                             Model
 User Interaction                 Data
 HTML                             Business Logic
                                   DB Interaction
                      Observer
                      Pattern
Percentage of Code

                Views
     Models



              Controllers
The page is not the view



         View
The page contains the views
                      View          View
               View
                      View          View
 View                 View          View
                      View          View
               View
                             View
 View

        View          View
MVC’s Bestest Friends


Observer Pattern   Templating Library
          MVC Framework
Best Friend #1

Observer
                 Pattern
Controller
                View-Model
                 Interaction
                One Direction




      View                             Model
 User Interaction                 Data
 HTML                             Business Logic
                                   DB Interaction
                      Observer
                      Pattern
Lame Real-world Analogy
           1   “If little Billy gets hurt,
               I want you to call this
               number immediately.”


  Mother                                     Babysitter



           2   Little Billy breaks his
               arm while ice-skating,
               so babysitter calls the
               supplied number.
Observer and Subject
           1   “If this thing I care
               about happens,
               call this function.”


Observer                               Subject


           2   The things happens,
               so the subject calls
               the function.
Observer   Observer   Observer




Observer   Subject    Observer




Observer   Observer   Observer
View-Model Relationship
                 1   “If this certain data
                     changes, call my
                     function view.foo().

      View                                    Model
    (Observer)                               (Subject)



2   The change happens,        3   The view grabs the
    so the model calls             changed data from the
    view.foo().                    model and updates
                                   itself.
Observer Pattern – Basic Use
 3   view.prototype.render = function(){
         //grab model data and update view html
     }

     /*
      * view tells model that if “change” happens,
      * then call view’s render function
      */
 1   model.subscribe(“change”,view.render);


     /*
      * The “change” happens, so the model alerts
      * any observers of “change”
      */
 2   model.notify(“change”);
Observer Pattern -- Internals
var events = [

     {“abitraryString1” : [function1, function2] },

     //model.notify(“arbitraryString2”) would
     //cause function2 and function3 to be called.
     {“abritraryString2” : [function2, function3] },

     //model.subscribe(“arbitraryString3”,function4)
     //would add function4 to this list
     {“abritraryString3” : [function3] },

     //model.subscribe(“arbitraryString4”,function1)
     //would add a new member to the events array
];
Best Friend #2
{{Templating}}
      Library
Look Familiar?
var container = Util.cep("div",{
    "className":"wrap",
});

var firstName = Util.cep("span",{
   "className":"name",
   "innerHTML":person.firstName
});

var lastName = Util.cep("span",{
   "className":"name",
   "innerHTML":person.lastName
});

Util.ac(firstName,container);
Util.ac(lastName,container);
Replaced with {{Templates}}
//template
<div class="wrap">
  <span class="name">{{firstName}}</span>
  <span class="name">{{lastName}}</span>
</div>



var html = Mustache.to_html(template,person)
Popular Templates



}
mustache.js
    Logic-less templates      Minimal Templating on Steroids
http://mustache.github.com/    http://www.handlebarsjs.com/
Best Friend #3



Framework
Sole focus
Help you do MVC
• Classes for the separate concerns of
    Models, Views, and Controllers
•   Observer Pattern built-in
•   Templating built-in
•   Event Delegation built-in
•   Small -- 4.6kb, compressed
“It's all too easy to create
JavaScript applications that end
up as tangled piles of jQuery
selectors and callbacks, all trying
frantically to keep data in sync
between the HTML UI, your
JavaScript logic, and the database
on your server.”
        Jeremy Ashkenas, Creator of Backbone.js
SUMMARY
Separation of concerns
Model-View-Controller
Friends of MVC

Más contenido relacionado

La actualidad más candente

La actualidad más candente (20)

Model view controller (mvc)
Model view controller (mvc)Model view controller (mvc)
Model view controller (mvc)
 
MVC Architecture
MVC ArchitectureMVC Architecture
MVC Architecture
 
What is MVC?
What is MVC?What is MVC?
What is MVC?
 
Introduction to mvc architecture
Introduction to mvc architectureIntroduction to mvc architecture
Introduction to mvc architecture
 
MVC architecture
MVC architectureMVC architecture
MVC architecture
 
Model view controller (mvc)
Model view controller (mvc)Model view controller (mvc)
Model view controller (mvc)
 
Principles of MVC for Rails Developers
Principles of MVC for Rails DevelopersPrinciples of MVC for Rails Developers
Principles of MVC for Rails Developers
 
MVC Architecture
MVC ArchitectureMVC Architecture
MVC Architecture
 
ASP.NET MVC.
ASP.NET MVC.ASP.NET MVC.
ASP.NET MVC.
 
Mvc architecture
Mvc architectureMvc architecture
Mvc architecture
 
Why MVC?
Why MVC?Why MVC?
Why MVC?
 
Ppt of Basic MVC Structure
Ppt of Basic MVC StructurePpt of Basic MVC Structure
Ppt of Basic MVC Structure
 
ASP.NET MVC Presentation
ASP.NET MVC PresentationASP.NET MVC Presentation
ASP.NET MVC Presentation
 
MVC architecture by Mohd.Awais on 18th Aug, 2017
MVC architecture by Mohd.Awais on 18th Aug, 2017MVC architecture by Mohd.Awais on 18th Aug, 2017
MVC architecture by Mohd.Awais on 18th Aug, 2017
 
Jsp with mvc
Jsp with mvcJsp with mvc
Jsp with mvc
 
Mvc fundamental
Mvc fundamentalMvc fundamental
Mvc fundamental
 
MVC
MVCMVC
MVC
 
MVC Pattern. Flex implementation of MVC
MVC Pattern. Flex implementation of MVCMVC Pattern. Flex implementation of MVC
MVC Pattern. Flex implementation of MVC
 
MVC Seminar Presantation
MVC Seminar PresantationMVC Seminar Presantation
MVC Seminar Presantation
 
MSDN - ASP.NET MVC
MSDN - ASP.NET MVCMSDN - ASP.NET MVC
MSDN - ASP.NET MVC
 

Similar a Just a View: An Introduction To Model-View-Controller Pattern

Mvvm in the real world tccc10
Mvvm in the real world   tccc10Mvvm in the real world   tccc10
Mvvm in the real world tccc10
Bryan Anderson
 
ASP.NET MVC as the next step in web development
ASP.NET MVC as the next step in web developmentASP.NET MVC as the next step in web development
ASP.NET MVC as the next step in web development
Volodymyr Voytyshyn
 
Introduction to XAML and its features
Introduction to XAML and its featuresIntroduction to XAML and its features
Introduction to XAML and its features
Abhishek Sur
 
Design pattern in android
Design pattern in androidDesign pattern in android
Design pattern in android
Jay Kumarr
 

Similar a Just a View: An Introduction To Model-View-Controller Pattern (20)

The MVVM Pattern
The MVVM PatternThe MVVM Pattern
The MVVM Pattern
 
iOS Bootcamp: learning to create awesome apps on iOS using Swift (Lecture 04)
iOS Bootcamp: learning to create awesome apps on iOS using Swift (Lecture 04)iOS Bootcamp: learning to create awesome apps on iOS using Swift (Lecture 04)
iOS Bootcamp: learning to create awesome apps on iOS using Swift (Lecture 04)
 
Design Patterns in ZK: Java MVVM as Model-View-Binder
Design Patterns in ZK: Java MVVM as Model-View-BinderDesign Patterns in ZK: Java MVVM as Model-View-Binder
Design Patterns in ZK: Java MVVM as Model-View-Binder
 
ReactJS Overview
ReactJS OverviewReactJS Overview
ReactJS Overview
 
Applied MVVM in Windows 8 apps: not your typical MVVM session!
Applied MVVM in Windows 8 apps: not your typical MVVM session!Applied MVVM in Windows 8 apps: not your typical MVVM session!
Applied MVVM in Windows 8 apps: not your typical MVVM session!
 
Class 02 Objective C
Class 02   Objective CClass 02   Objective C
Class 02 Objective C
 
Onlineshopping
OnlineshoppingOnlineshopping
Onlineshopping
 
Design patterns
Design patternsDesign patterns
Design patterns
 
Mvvm in the real world tccc10
Mvvm in the real world   tccc10Mvvm in the real world   tccc10
Mvvm in the real world tccc10
 
Eclipse MVC
Eclipse MVCEclipse MVC
Eclipse MVC
 
Software architectural design patterns(MVC, MVP, MVVM, VIPER) for iOS
Software architectural design patterns(MVC, MVP, MVVM, VIPER) for iOSSoftware architectural design patterns(MVC, MVP, MVVM, VIPER) for iOS
Software architectural design patterns(MVC, MVP, MVVM, VIPER) for iOS
 
Angularjs Basics
Angularjs BasicsAngularjs Basics
Angularjs Basics
 
ASP.NET MVC as the next step in web development
ASP.NET MVC as the next step in web developmentASP.NET MVC as the next step in web development
ASP.NET MVC as the next step in web development
 
Introduction to XAML and its features
Introduction to XAML and its featuresIntroduction to XAML and its features
Introduction to XAML and its features
 
The Magic of WPF & MVVM
The Magic of WPF & MVVMThe Magic of WPF & MVVM
The Magic of WPF & MVVM
 
iOS Design Patterns
iOS Design PatternsiOS Design Patterns
iOS Design Patterns
 
Design pattern in android
Design pattern in androidDesign pattern in android
Design pattern in android
 
Joomla Complex Component MVC Proposal
Joomla Complex Component MVC ProposalJoomla Complex Component MVC Proposal
Joomla Complex Component MVC Proposal
 
Acrhitecture deisign pattern_MVC_MVP_MVVM
Acrhitecture deisign pattern_MVC_MVP_MVVMAcrhitecture deisign pattern_MVC_MVP_MVVM
Acrhitecture deisign pattern_MVC_MVP_MVVM
 
Design patterns difference between interview questions
Design patterns   difference between interview questionsDesign patterns   difference between interview questions
Design patterns difference between interview questions
 

Último

Why Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire businessWhy Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire business
panagenda
 

Último (20)

Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost SavingRepurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
 
Boost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivityBoost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivity
 
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, AdobeApidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
 
Boost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdfBoost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdf
 
Top 10 Most Downloaded Games on Play Store in 2024
Top 10 Most Downloaded Games on Play Store in 2024Top 10 Most Downloaded Games on Play Store in 2024
Top 10 Most Downloaded Games on Play Store in 2024
 
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...
Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...
 
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
 
Powerful Google developer tools for immediate impact! (2023-24 C)
Powerful Google developer tools for immediate impact! (2023-24 C)Powerful Google developer tools for immediate impact! (2023-24 C)
Powerful Google developer tools for immediate impact! (2023-24 C)
 
Apidays New York 2024 - The value of a flexible API Management solution for O...
Apidays New York 2024 - The value of a flexible API Management solution for O...Apidays New York 2024 - The value of a flexible API Management solution for O...
Apidays New York 2024 - The value of a flexible API Management solution for O...
 
Data Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt RobisonData Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt Robison
 
GenAI Risks & Security Meetup 01052024.pdf
GenAI Risks & Security Meetup 01052024.pdfGenAI Risks & Security Meetup 01052024.pdf
GenAI Risks & Security Meetup 01052024.pdf
 
Real Time Object Detection Using Open CV
Real Time Object Detection Using Open CVReal Time Object Detection Using Open CV
Real Time Object Detection Using Open CV
 
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
 
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time AutomationFrom Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
 
Partners Life - Insurer Innovation Award 2024
Partners Life - Insurer Innovation Award 2024Partners Life - Insurer Innovation Award 2024
Partners Life - Insurer Innovation Award 2024
 
Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024
 
Why Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire businessWhy Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire business
 
Top 5 Benefits OF Using Muvi Live Paywall For Live Streams
Top 5 Benefits OF Using Muvi Live Paywall For Live StreamsTop 5 Benefits OF Using Muvi Live Paywall For Live Streams
Top 5 Benefits OF Using Muvi Live Paywall For Live Streams
 
Artificial Intelligence Chap.5 : Uncertainty
Artificial Intelligence Chap.5 : UncertaintyArtificial Intelligence Chap.5 : Uncertainty
Artificial Intelligence Chap.5 : Uncertainty
 
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
 

Just a View: An Introduction To Model-View-Controller Pattern

  • 1. It’s Just a View An Introduction to model view controller Aaron Nordyke, Sr. Software Engineer
  • 3. Spaghetti Code UGLY g the
  • 4. There once was a drug named Xigris…
  • 5. Xigris Xigris Xigris Xigris Xigris Xigris Xigris Xigris Xigris Xigris Xigris Xigris Xigris
  • 6. Modules GOOD th e
  • 8.
  • 10. MVC BADASS g the
  • 11. DATA DOM
  • 12. Controller  View to Model Interaction  One Direction View Model  User Interaction  Data  HTML  Business Logic  DB Interaction Observer Pattern
  • 13. 2 View alerts Controller Controller Updates Model controller of 3 particular event 4 Model alerts view that it has changed. View Model 5 View grabs model data 1 User interacts and updates itself. with a view
  • 14. 2 View alerts Controller Controller Updates Model controller of 3 particular event View 1 Model 4 Model alerts view that it has changed. 1 User interacts with a view View 2 5 View grabs model data and updates itself.
  • 15. Controller  View to Model Interaction  One Direction View Model  User Interaction  Data  HTML  Business Logic  DB Interaction Observer Pattern
  • 16. Percentage of Code Views Models Controllers
  • 17. The page is not the view View
  • 18. The page contains the views View View View View View View View View View View View View View View View
  • 19. MVC’s Bestest Friends Observer Pattern Templating Library MVC Framework
  • 21. Controller  View-Model Interaction  One Direction View Model  User Interaction  Data  HTML  Business Logic  DB Interaction Observer Pattern
  • 22. Lame Real-world Analogy 1 “If little Billy gets hurt, I want you to call this number immediately.” Mother Babysitter 2 Little Billy breaks his arm while ice-skating, so babysitter calls the supplied number.
  • 23. Observer and Subject 1 “If this thing I care about happens, call this function.” Observer Subject 2 The things happens, so the subject calls the function.
  • 24. Observer Observer Observer Observer Subject Observer Observer Observer Observer
  • 25. View-Model Relationship 1 “If this certain data changes, call my function view.foo(). View Model (Observer) (Subject) 2 The change happens, 3 The view grabs the so the model calls changed data from the view.foo(). model and updates itself.
  • 26. Observer Pattern – Basic Use 3 view.prototype.render = function(){ //grab model data and update view html } /* * view tells model that if “change” happens, * then call view’s render function */ 1 model.subscribe(“change”,view.render); /* * The “change” happens, so the model alerts * any observers of “change” */ 2 model.notify(“change”);
  • 27. Observer Pattern -- Internals var events = [ {“abitraryString1” : [function1, function2] }, //model.notify(“arbitraryString2”) would //cause function2 and function3 to be called. {“abritraryString2” : [function2, function3] }, //model.subscribe(“arbitraryString3”,function4) //would add function4 to this list {“abritraryString3” : [function3] }, //model.subscribe(“arbitraryString4”,function1) //would add a new member to the events array ];
  • 29. Look Familiar? var container = Util.cep("div",{ "className":"wrap", }); var firstName = Util.cep("span",{ "className":"name", "innerHTML":person.firstName }); var lastName = Util.cep("span",{ "className":"name", "innerHTML":person.lastName }); Util.ac(firstName,container); Util.ac(lastName,container);
  • 30. Replaced with {{Templates}} //template <div class="wrap"> <span class="name">{{firstName}}</span> <span class="name">{{lastName}}</span> </div> var html = Mustache.to_html(template,person)
  • 31. Popular Templates } mustache.js Logic-less templates Minimal Templating on Steroids http://mustache.github.com/ http://www.handlebarsjs.com/
  • 34. • Classes for the separate concerns of Models, Views, and Controllers • Observer Pattern built-in • Templating built-in • Event Delegation built-in • Small -- 4.6kb, compressed
  • 35. “It's all too easy to create JavaScript applications that end up as tangled piles of jQuery selectors and callbacks, all trying frantically to keep data in sync between the HTML UI, your JavaScript logic, and the database on your server.” Jeremy Ashkenas, Creator of Backbone.js