Upgrade to PRO for Only $50/Yearโ€”Limited-Time Offer! ๐Ÿ”ฅ

The World Beyond MVC

Avatar for Garann Means Garann Means
September 28, 2012

The World Beyondย MVC

MVC is a great pattern, but it's not the only one. Some applications might benefit from other types of architectures. This talk looks at a couple and talks about how to choose which fits your needs.

Avatar for Garann Means

Garann Means

September 28, 2012
Tweet

More Decks by Garann Means

Other Decks in Technology

Transcript

  1. HI, I'M GARANN โš“ โš“ โš“ โš“ โš“ โš“ โš“

    โš“ engineer at Etsy engineer at Etsy engineer at Etsy engineer at Etsy engineer at Etsy engineer at Etsy engineer at Etsy engineer at Etsy โš“ โš“ โš“ โš“ โš“ โš“ โš“ โš“ Austin, Texas, USA Austin, Texas, USA Austin, Texas, USA Austin, Texas, USA Austin, Texas, USA Austin, Texas, USA Austin, Texas, USA Austin, Texas, USA โš“ โš“ โš“ โš“ โš“ โš“ โš“ โš“ Node for Front-End Developers Node for Front-End Developers Node for Front-End Developers Node for Front-End Developers Node for Front-End Developers Node for Front-End Developers Node for Front-End Developers Node for Front-End Developers โš“ โš“ โš“ โš“ โš“ โš“ โš“ โš“ Austin All-Girl Hack Night and Girl Develop It Austin Austin All-Girl Hack Night and Girl Develop It Austin Austin All-Girl Hack Night and Girl Develop It Austin Austin All-Girl Hack Night and Girl Develop It Austin Austin All-Girl Hack Night and Girl Develop It Austin Austin All-Girl Hack Night and Girl Develop It Austin Austin All-Girl Hack Night and Girl Develop It Austin Austin All-Girl Hack Night and Girl Develop It Austin โš“ โš“ โš“ โš“ โš“ โš“ โš“ โš“ @garannm / garann.com @garannm / garann.com @garannm / garann.com @garannm / garann.com @garannm / garann.com @garannm / garann.com @garannm / garann.com @garannm / garann.com
  2. MVC OPTIONS โš“ โš“ โš“ โš“ โš“ โš“ โš“ โš“

    Backbone Backbone Backbone Backbone Backbone Backbone Backbone Backbone โš“ โš“ โš“ โš“ โš“ โš“ โš“ โš“ Spine Spine Spine Spine Spine Spine Spine Spine โš“ โš“ โš“ โš“ โš“ โš“ โš“ โš“ Agility Agility Agility Agility Agility Agility Agility Agility โš“ โš“ โš“ โš“ โš“ โš“ โš“ โš“ Knockback Knockback Knockback Knockback Knockback Knockback Knockback Knockback โš“ โš“ โš“ โš“ โš“ โš“ โš“ โš“ and more.. and more.. and more.. and more.. and more.. and more.. and more.. and more..
  3. MVC APPEAL โš“ โš“ โš“ โš“ โš“ โš“ โš“ โš“

    popular server-side frameworks popular server-side frameworks popular server-side frameworks popular server-side frameworks popular server-side frameworks popular server-side frameworks popular server-side frameworks popular server-side frameworks โš“ โš“ โš“ โš“ โš“ โš“ โš“ โš“ build around clear components (models) build around clear components (models) build around clear components (models) build around clear components (models) build around clear components (models) build around clear components (models) build around clear components (models) build around clear components (models) โš“ โš“ โš“ โš“ โš“ โš“ โš“ โš“ feels natural to developers feels natural to developers feels natural to developers feels natural to developers feels natural to developers feels natural to developers feels natural to developers feels natural to developers โš“ โš“ โš“ โš“ โš“ โš“ โš“ โš“ especially OOP developers especially OOP developers especially OOP developers especially OOP developers especially OOP developers especially OOP developers especially OOP developers especially OOP developers
  4. MVC HISTORY โš“ โš“ โš“ โš“ โš“ โš“ โš“ โš“

    invented by Trygve Reenskaug in the late 70s invented by Trygve Reenskaug in the late 70s invented by Trygve Reenskaug in the late 70s invented by Trygve Reenskaug in the late 70s invented by Trygve Reenskaug in the late 70s invented by Trygve Reenskaug in the late 70s invented by Trygve Reenskaug in the late 70s invented by Trygve Reenskaug in the late 70s โš“ โš“ โš“ โš“ โš“ โš“ โš“ โš“ quickly implemented in Smalltalk quickly implemented in Smalltalk quickly implemented in Smalltalk quickly implemented in Smalltalk quickly implemented in Smalltalk quickly implemented in Smalltalk quickly implemented in Smalltalk quickly implemented in Smalltalk โš“ โš“ โš“ โš“ โš“ โš“ โš“ โš“ original components were Model, View, Controller, original components were Model, View, Controller, original components were Model, View, Controller, original components were Model, View, Controller, original components were Model, View, Controller, original components were Model, View, Controller, original components were Model, View, Controller, original components were Model, View, Controller, Editor Editor Editor Editor Editor Editor Editor Editor โš“ โš“ โš“ โš“ โš“ โš“ โš“ โš“ the lost Editor concept dealt with user interaction the lost Editor concept dealt with user interaction the lost Editor concept dealt with user interaction the lost Editor concept dealt with user interaction the lost Editor concept dealt with user interaction the lost Editor concept dealt with user interaction the lost Editor concept dealt with user interaction the lost Editor concept dealt with user interaction โš“ โš“ โš“ โš“ โš“ โš“ โš“ โš“ (that's foreshadowing) (that's foreshadowing) (that's foreshadowing) (that's foreshadowing) (that's foreshadowing) (that's foreshadowing) (that's foreshadowing) (that's foreshadowing)
  5. "REAL" MVC โš“ โš“ โš“ โš“ โš“ โš“ โš“ โš“

    increasingly difficult to pinpoint increasingly difficult to pinpoint increasingly difficult to pinpoint increasingly difficult to pinpoint increasingly difficult to pinpoint increasingly difficult to pinpoint increasingly difficult to pinpoint increasingly difficult to pinpoint โš“ โš“ โš“ โš“ โš“ โš“ โš“ โš“ AND SO IT BEGINS AND SO IT BEGINS AND SO IT BEGINS AND SO IT BEGINS AND SO IT BEGINS AND SO IT BEGINS AND SO IT BEGINS AND SO IT BEGINS โ€œ โ€œ โ€œ โ€œ โ€œ โ€œ โ€œ โ€œJim Althoff and others implemented a version Jim Althoff and others implemented a version Jim Althoff and others implemented a version Jim Althoff and others implemented a version Jim Althoff and others implemented a version Jim Althoff and others implemented a version Jim Althoff and others implemented a version Jim Althoff and others implemented a version of MVC for the Smalltalk-80 class library after I of MVC for the Smalltalk-80 class library after I of MVC for the Smalltalk-80 class library after I of MVC for the Smalltalk-80 class library after I of MVC for the Smalltalk-80 class library after I of MVC for the Smalltalk-80 class library after I of MVC for the Smalltalk-80 class library after I of MVC for the Smalltalk-80 class library after I had left Xerox PARC; I was in not involved in had left Xerox PARC; I was in not involved in had left Xerox PARC; I was in not involved in had left Xerox PARC; I was in not involved in had left Xerox PARC; I was in not involved in had left Xerox PARC; I was in not involved in had left Xerox PARC; I was in not involved in had left Xerox PARC; I was in not involved in this work. this work. this work. this work. this work. this work. this work. this work. Jim Althoff uses the term Jim Althoff uses the term Jim Althoff uses the term Jim Althoff uses the term Jim Althoff uses the term Jim Althoff uses the term Jim Althoff uses the term Jim Althoff uses the term Controller somewhat differently from me. Controller somewhat differently from me. Controller somewhat differently from me. Controller somewhat differently from me. Controller somewhat differently from me. Controller somewhat differently from me. Controller somewhat differently from me. Controller somewhat differently from me.โ€ โ€ โ€ โ€ โ€ โ€ โ€ โ€
  6. MVC IS GREAT SOMETIMES โš“ โš“ โš“ โš“ โš“ โš“

    โš“ โš“ server-side server-side server-side server-side server-side server-side server-side server-side โš“ โš“ โš“ โš“ โš“ โš“ โš“ โš“ CMSes CMSes CMSes CMSes CMSes CMSes CMSes CMSes โš“ โš“ โš“ โš“ โš“ โš“ โš“ โš“ data entry data entry data entry data entry data entry data entry data entry data entry โš“ โš“ โš“ โš“ โš“ โš“ โš“ โš“ multiple, clearly-defined object types multiple, clearly-defined object types multiple, clearly-defined object types multiple, clearly-defined object types multiple, clearly-defined object types multiple, clearly-defined object types multiple, clearly-defined object types multiple, clearly-defined object types โš“ โš“ โš“ โš“ โš“ โš“ โš“ โš“ anything that fits easily with OOP anything that fits easily with OOP anything that fits easily with OOP anything that fits easily with OOP anything that fits easily with OOP anything that fits easily with OOP anything that fits easily with OOP anything that fits easily with OOP
  7. MVC IS AWKWARD SOMETIMES โš“ โš“ โš“ โš“ โš“ โš“

    โš“ โš“ state shared/created by multiple objects state shared/created by multiple objects state shared/created by multiple objects state shared/created by multiple objects state shared/created by multiple objects state shared/created by multiple objects state shared/created by multiple objects state shared/created by multiple objects โš“ โš“ โš“ โš“ โš“ โš“ โš“ โš“ lots of complex user interactions lots of complex user interactions lots of complex user interactions lots of complex user interactions lots of complex user interactions lots of complex user interactions lots of complex user interactions lots of complex user interactions โš“ โš“ โš“ โš“ โš“ โš“ โš“ โš“ distinct, abstract controls/widgets distinct, abstract controls/widgets distinct, abstract controls/widgets distinct, abstract controls/widgets distinct, abstract controls/widgets distinct, abstract controls/widgets distinct, abstract controls/widgets distinct, abstract controls/widgets โš“ โš“ โš“ โš“ โš“ โš“ โš“ โš“ lots of client-side apps lots of client-side apps lots of client-side apps lots of client-side apps lots of client-side apps lots of client-side apps lots of client-side apps lots of client-side apps
  8. MVC IS OVERKILL SOMETIMES โš“ โš“ โš“ โš“ โš“ โš“

    โš“ โš“ static sites static sites static sites static sites static sites static sites static sites static sites โš“ โš“ โš“ โš“ โš“ โš“ โš“ โš“ server-driven site (e.g. RMI) server-driven site (e.g. RMI) server-driven site (e.g. RMI) server-driven site (e.g. RMI) server-driven site (e.g. RMI) server-driven site (e.g. RMI) server-driven site (e.g. RMI) server-driven site (e.g. RMI)
  9. ARCHITECTURE PATTERNS โš“ โš“ โš“ โš“ โš“ โš“ โš“ โš“

    canon doesn't include web uses canon doesn't include web uses canon doesn't include web uses canon doesn't include web uses canon doesn't include web uses canon doesn't include web uses canon doesn't include web uses canon doesn't include web uses โš“ โš“ โš“ โš“ โš“ โš“ โš“ โš“ Design Patterns Design Patterns Design Patterns Design Patterns Design Patterns Design Patterns Design Patterns Design Patterns (GoF) ยฉ 1994 (GoF) ยฉ 1994 (GoF) ยฉ 1994 (GoF) ยฉ 1994 (GoF) ยฉ 1994 (GoF) ยฉ 1994 (GoF) ยฉ 1994 (GoF) ยฉ 1994 โš“ โš“ โš“ โš“ โš“ โš“ โš“ โš“ architectures proposed when user and developer were the architectures proposed when user and developer were the architectures proposed when user and developer were the architectures proposed when user and developer were the architectures proposed when user and developer were the architectures proposed when user and developer were the architectures proposed when user and developer were the architectures proposed when user and developer were the same person same person same person same person same person same person same person same person โš“ โš“ โš“ โš“ โš“ โš“ โš“ โš“ client and server were the same command line client and server were the same command line client and server were the same command line client and server were the same command line client and server were the same command line client and server were the same command line client and server were the same command line client and server were the same command line โš“ โš“ โš“ โš“ โš“ โš“ โš“ โš“ terminals did not interpret views terminals did not interpret views terminals did not interpret views terminals did not interpret views terminals did not interpret views terminals did not interpret views terminals did not interpret views terminals did not interpret views
  10. A VOID MVC NEATLY FILLS โš“ โš“ โš“ โš“ โš“

    โš“ โš“ โš“ clear concept of the UI clear concept of the UI clear concept of the UI clear concept of the UI clear concept of the UI clear concept of the UI clear concept of the UI clear concept of the UI โš“ โš“ โš“ โš“ โš“ โš“ โš“ โš“ maps neatly to original webapps maps neatly to original webapps maps neatly to original webapps maps neatly to original webapps maps neatly to original webapps maps neatly to original webapps maps neatly to original webapps maps neatly to original webapps โš“ โš“ โš“ โš“ โš“ โš“ โš“ โš“ doesn't always map neatly to individual pieces doesn't always map neatly to individual pieces doesn't always map neatly to individual pieces doesn't always map neatly to individual pieces doesn't always map neatly to individual pieces doesn't always map neatly to individual pieces doesn't always map neatly to individual pieces doesn't always map neatly to individual pieces
  11. THESE ARE NOT THE WHITEPAPERS WE'RE LOOKING FOR โš“ โš“

    โš“ โš“ โš“ โš“ โš“ โš“ we must repurpose we must repurpose we must repurpose we must repurpose we must repurpose we must repurpose we must repurpose we must repurpose โš“ โš“ โš“ โš“ โš“ โš“ โš“ โš“ MVC is a great starting point MVC is a great starting point MVC is a great starting point MVC is a great starting point MVC is a great starting point MVC is a great starting point MVC is a great starting point MVC is a great starting point โš“ โš“ โš“ โš“ โš“ โš“ โš“ โš“ MVC will do in a pinch MVC will do in a pinch MVC will do in a pinch MVC will do in a pinch MVC will do in a pinch MVC will do in a pinch MVC will do in a pinch MVC will do in a pinch โš“ โš“ โš“ โš“ โš“ โš“ โš“ โš“ more sophisticated webapps give us reason to revisit other more sophisticated webapps give us reason to revisit other more sophisticated webapps give us reason to revisit other more sophisticated webapps give us reason to revisit other more sophisticated webapps give us reason to revisit other more sophisticated webapps give us reason to revisit other more sophisticated webapps give us reason to revisit other more sophisticated webapps give us reason to revisit other patterns patterns patterns patterns patterns patterns patterns patterns
  12. EVENT-DRIVEN ARCHITECTURES โš“ โš“ โš“ โš“ โš“ โš“ โš“ โš“

    primary application unit is the event, not the object primary application unit is the event, not the object primary application unit is the event, not the object primary application unit is the event, not the object primary application unit is the event, not the object primary application unit is the event, not the object primary application unit is the event, not the object primary application unit is the event, not the object โš“ โš“ โš“ โš“ โš“ โš“ โš“ โš“ state, utility functions, and resources corralled together state, utility functions, and resources corralled together state, utility functions, and resources corralled together state, utility functions, and resources corralled together state, utility functions, and resources corralled together state, utility functions, and resources corralled together state, utility functions, and resources corralled together state, utility functions, and resources corralled together โš“ โš“ โš“ โš“ โš“ โš“ โš“ โš“ functions, getters, and setters are subscribers functions, getters, and setters are subscribers functions, getters, and setters are subscribers functions, getters, and setters are subscribers functions, getters, and setters are subscribers functions, getters, and setters are subscribers functions, getters, and setters are subscribers functions, getters, and setters are subscribers โš“ โš“ โš“ โš“ โš“ โš“ โš“ โš“ should feel natural to JS devs should feel natural to JS devs should feel natural to JS devs should feel natural to JS devs should feel natural to JS devs should feel natural to JS devs should feel natural to JS devs should feel natural to JS devs โš“ โš“ โš“ โš“ โš“ โš“ โš“ โš“ similarities to service-oriented architectures similarities to service-oriented architectures similarities to service-oriented architectures similarities to service-oriented architectures similarities to service-oriented architectures similarities to service-oriented architectures similarities to service-oriented architectures similarities to service-oriented architectures
  13. EVENT-DRIVEN ARCHITECTURE $ ( " # l o g i

    n " ) . c l i c k ( f u n c t i o n ( e ) { p u b l i s h ( " l o g i n _ a t t e m p t " , { u s e r n a m e : $ ( " # u s e r n a m e " ) . v a l ( ) , p a s s w o r d : $ ( " # p a s s w o r d " ) . v a l ( ) } ) ; } ) ; s u b s c r i b e ( " l o g i n _ a t t e m p t " , f u n c t i o n ( c r e d e n t i a l s ) { $ . p o s t ( " / l o g i n " , c r e d e n t i a l s , f u n c t i o n ( d a t a ) { p u b l i s h ( " u s e r _ l o g i n " , d a t a . u s e r i d ) ; } ) . e r r o r ( f u n c t i o n ( d a t a ) { p u b l i s h ( " l o g i n _ f a i l " , d a t a . m e s s a g e ) ; } ) ; } ) ;
  14. EVENT-DRIVEN ARCHITECTURE v a r c a r t _

    s t a t e = { u s e r i d : n u l l , c a r t _ i t e m s : [ ] , c a n _ c h e c k o u t : f a l s e } ; c a r t _ s t a t e . s u b s c r i b e ( " u s e r _ l o g i n " , f u n c t i o n ( i d ) { t h i s . u s e r i d = i d ; i f ( t h i s . c a r t _ i t e m s . l e n g t h ) { t h i s . c a n _ c h e c k o u t = t r u e ; p u b l i s h ( " c a r t _ r e a d y " ) ; } } ) ;
  15. EVENT-DRIVEN ARCHITECTURE v a r r e n d e

    r e r = { t e m p l a t e s : { } , r e n d e r : f u n c t i o n ( t m p l , d a t a , c o n t a i n e r ) { v a r h = u t i l . t e m p l a t e ( t h i s . t e m p l a t e s [ t m p l ] , d a t a ) ; $ ( c o n t a i n e r ) . h t m l ( h ) ; } } ; r e n d e r e r . s u b s c r i b e ( " c a r t _ r e a d y " , f u n c t i o n ( ) { t h i s . r e n d e r ( " c a r t _ c h e c k o u t " , n u l l , " # c a r t " ) ; } ) ;
  16. NAKED OBJECTS โš“ โš“ โš“ โš“ โš“ โš“ โš“ โš“

    primary units are widgets/controls primary units are widgets/controls primary units are widgets/controls primary units are widgets/controls primary units are widgets/controls primary units are widgets/controls primary units are widgets/controls primary units are widgets/controls โš“ โš“ โš“ โš“ โš“ โš“ โš“ โš“ similarities to desktop development similarities to desktop development similarities to desktop development similarities to desktop development similarities to desktop development similarities to desktop development similarities to desktop development similarities to desktop development โš“ โš“ โš“ โš“ โš“ โš“ โš“ โš“ more like PAC than MVC more like PAC than MVC more like PAC than MVC more like PAC than MVC more like PAC than MVC more like PAC than MVC more like PAC than MVC more like PAC than MVC โš“ โš“ โš“ โš“ โš“ โš“ โš“ โš“ models aren't just data, but components models aren't just data, but components models aren't just data, but components models aren't just data, but components models aren't just data, but components models aren't just data, but components models aren't just data, but components models aren't just data, but components โš“ โš“ โš“ โš“ โš“ โš“ โš“ โš“ properties have rendering, state, etc. properties have rendering, state, etc. properties have rendering, state, etc. properties have rendering, state, etc. properties have rendering, state, etc. properties have rendering, state, etc. properties have rendering, state, etc. properties have rendering, state, etc. โš“ โš“ โš“ โš“ โš“ โš“ โš“ โš“ business logic abstracted out business logic abstracted out business logic abstracted out business logic abstracted out business logic abstracted out business logic abstracted out business logic abstracted out business logic abstracted out โš“ โš“ โš“ โš“ โš“ โš“ โš“ โš“ nice for compositional uses like CMSes nice for compositional uses like CMSes nice for compositional uses like CMSes nice for compositional uses like CMSes nice for compositional uses like CMSes nice for compositional uses like CMSes nice for compositional uses like CMSes nice for compositional uses like CMSes
  17. NAKED OBJECTS v a r C o l o r

    S l i d e r = f u n c t i o n ( c o n t a i n e r , u r l , c h a n ) { t h i s = { _ c o n t a i n e r : c o n t a i n e r , _ v a l u e : " " , _ u r l : u r l , _ c h a n n e l : c h a n } ; r e t u r n t h i s ; } ; C o l o r S l i d e r . p r o t o t y p e = { g e t v a l u e ( ) { r e t u r n t h i s . _ v a l u e ; } , s e t v a l u e ( v a l ) { t h i s . _ v a l u e = v a l ; t h i s . _ u p d a t e ( ) ; } } ;
  18. NAKED OBJECTS C o l o r S l i

    d e r . p r o t o t y p e . _ u p d a t e = f u n c t i o n ( ) { v a r t h a t = t h i s , d a t a = { } ; d a t a [ t h a t . _ c h a n n e l ] = t h a t . _ v a l u e ; $ . p o s t ( t h a t . _ u r l , d a t a , f u n c t i o n ( d ) { t h a t . _ r e n d e r ; i f ( T o o l b o x ) T o o l b o x . s e t C o l o r ( d ) ; } ) ; } ;
  19. NAKED OBJECTS C o l o r S l i

    d e r . p r o t o t y p e . _ r e n d e r = f u n c t i o n ( ) { v a r h t m l = ' < i n p u t t y p e = " r a n g e " i d = " c o l o r " ' + ' m i n = " 0 " m a x = " 2 5 5 " v a l u e = " ' + t h a t . _ v a l u e + ' " s t y l e = " c o l o r : r g b ( ' + t h a t . _ c h a n n e l = = " r e d " ? t h a t . _ v a l u e + ' , 0 , 0 ) ; " / > ' : t h a t . _ c h a n n e l = = " g r e e n " ? ' 0 , ' + t h a t . _ v a l u e + ' , 0 ) ; " / > ' : ' 0 , 0 , ' + t h a t . _ v a l u e + ' ) ; " / > ' ; t h i s . _ c o n t a i n e r . i n n e r H T M L = h t m l ; } ;
  20. PIPELINES โš“ โš“ โš“ โš“ โš“ โš“ โš“ โš“ primary

    units are states (application and object) primary units are states (application and object) primary units are states (application and object) primary units are states (application and object) primary units are states (application and object) primary units are states (application and object) primary units are states (application and object) primary units are states (application and object) โš“ โš“ โš“ โš“ โš“ โš“ โš“ โš“ like successive decorators like successive decorators like successive decorators like successive decorators like successive decorators like successive decorators like successive decorators like successive decorators โš“ โš“ โš“ โš“ โš“ โš“ โš“ โš“ familiar concept for jQuery devs familiar concept for jQuery devs familiar concept for jQuery devs familiar concept for jQuery devs familiar concept for jQuery devs familiar concept for jQuery devs familiar concept for jQuery devs familiar concept for jQuery devs โš“ โš“ โš“ โš“ โš“ โš“ โš“ โš“ can operate on two axes (e.g. next()) can operate on two axes (e.g. next()) can operate on two axes (e.g. next()) can operate on two axes (e.g. next()) can operate on two axes (e.g. next()) can operate on two axes (e.g. next()) can operate on two axes (e.g. next()) can operate on two axes (e.g. next())
  21. PIPELINES P a g e U t i l s

    . i n i t = f u n c t i o n ( ) { t h i s . r e n d e r ( ) . w i r e u p ( ) ; } ; P a g e U t i l s . _ r u n = f u n c t i o n ( f n s ) { v a r t h a t = t h i s ; f n s . f o r E a c h ( f u n c t i o n ( f n ) { t h a t = P a g e U t i l s [ f n ] . c a l l ( t h a t ) ; } ) ; } ;
  22. PIPELINES P a g e U t i l s

    . r e n d e r = f u n c t i o n ( ) { v a r t h a t = t h i s ; $ ( " b o d y " ) . a p p e n d ( u t i l . t e m p l a t e ( t h a t . t m p l , t h a t . d a t a ) ; ) ; r e t u r n t h a t ; } ; P a g e U t i l s . w i r e u p = f u n c t i o n ( ) { v a r t h a t = t h i s ; t h a t . h a n d l e r s . f o r E a c h ( f u n c t i o n ( e l ) { $ ( e l . s e l e c t o r ) . o n ( e l . e v , f u n c t i o n ( e ) { e . p r e v e n t D e f a u l t ( ) ; t h a t . _ r u n ( e l . f u n c t i o n s ) } ) ; } ) ; r e t u r n t h a t ; } ;
  23. PIPELINES v a r P a g e = {

    n a m e : " r e g i s t e r " , t m p l : " / t e m p l a t e s / r e g i s t e r . t m p l " , d a t a : { } , h a n d l e r s : [ { s e l e c t o r : " # b t n R g i s t e r " , e v : " c l i c k " , f u n c t i o n s : [ w a i t , v a l i d a t e , u p d a t e , r e n d e r ] } , { s e l e c t o r : " # b t n C a n c e l " , e v : " c l i c k " , f u n c t i o n s : [ r e n d e r ] } ] } ; $ . e x t e n d ( t r u e , P a g e , P a g e U t i l s ) ; P a g e . i n i t ( ) ;
  24. PIPELINES (ASYNC) $ . w h e n ( S

    e a r c h . i n i t ( ) ) . . t h e n ( S e a r c h . s e t D a t e s ( ) ) . t h e n ( S e a r c h . s e t C i t y ( ) ) . t h e n ( S e a r c h . s h o w R e s u l t s ( ) ) ;
  25. CONSIDERATIONS FOR ALTERNATIVES TO MVC โš“ โš“ โš“ โš“ โš“

    โš“ โš“ โš“ degree and emphasis of decoupling degree and emphasis of decoupling degree and emphasis of decoupling degree and emphasis of decoupling degree and emphasis of decoupling degree and emphasis of decoupling degree and emphasis of decoupling degree and emphasis of decoupling โš“ โš“ โš“ โš“ โš“ โš“ โš“ โš“ whether picture of application is decentralized whether picture of application is decentralized whether picture of application is decentralized whether picture of application is decentralized whether picture of application is decentralized whether picture of application is decentralized whether picture of application is decentralized whether picture of application is decentralized โš“ โš“ โš“ โš“ โš“ โš“ โš“ โš“ level of abstraction in controls level of abstraction in controls level of abstraction in controls level of abstraction in controls level of abstraction in controls level of abstraction in controls level of abstraction in controls level of abstraction in controls โš“ โš“ โš“ โš“ โš“ โš“ โš“ โš“ setup/initialization needed setup/initialization needed setup/initialization needed setup/initialization needed setup/initialization needed setup/initialization needed setup/initialization needed setup/initialization needed
  26. STATIC SITE ARCHITECTURE โš“ โš“ โš“ โš“ โš“ โš“ โš“

    โš“ what, you thought static sites didn't need one?? what, you thought static sites didn't need one?? what, you thought static sites didn't need one?? what, you thought static sites didn't need one?? what, you thought static sites didn't need one?? what, you thought static sites didn't need one?? what, you thought static sites didn't need one?? what, you thought static sites didn't need one?? โš“ โš“ โš“ โš“ โš“ โš“ โš“ โš“ still need things like library functionality still need things like library functionality still need things like library functionality still need things like library functionality still need things like library functionality still need things like library functionality still need things like library functionality still need things like library functionality โš“ โš“ โš“ โš“ โš“ โš“ โš“ โš“ where does a library end and a pattern begin? where does a library end and a pattern begin? where does a library end and a pattern begin? where does a library end and a pattern begin? where does a library end and a pattern begin? where does a library end and a pattern begin? where does a library end and a pattern begin? where does a library end and a pattern begin? โš“ โš“ โš“ โš“ โš“ โš“ โš“ โš“ real options for large static sites: real options for large static sites: real options for large static sites: real options for large static sites: real options for large static sites: real options for large static sites: real options for large static sites: real options for large static sites: โš“ โš“ โš“ โš“ โš“ โš“ โš“ โš“ EDA EDA EDA EDA EDA EDA EDA EDA โš“ โš“ โš“ โš“ โš“ โš“ โš“ โš“ pipelines pipelines pipelines pipelines pipelines pipelines pipelines pipelines โš“ โš“ โš“ โš“ โš“ โš“ โš“ โš“ RMI RMI RMI RMI RMI RMI RMI RMI
  27. CONSIDERATIONS FOR STATIC SITES โš“ โš“ โš“ โš“ โš“ โš“

    โš“ โš“ need strong conventions even more than SPAs need strong conventions even more than SPAs need strong conventions even more than SPAs need strong conventions even more than SPAs need strong conventions even more than SPAs need strong conventions even more than SPAs need strong conventions even more than SPAs need strong conventions even more than SPAs โš“ โš“ โš“ โš“ โš“ โš“ โš“ โš“ naturally decoupled already at "application" level naturally decoupled already at "application" level naturally decoupled already at "application" level naturally decoupled already at "application" level naturally decoupled already at "application" level naturally decoupled already at "application" level naturally decoupled already at "application" level naturally decoupled already at "application" level โš“ โš“ โš“ โš“ โš“ โš“ โš“ โš“ may exchange more tightly coupled application for more may exchange more tightly coupled application for more may exchange more tightly coupled application for more may exchange more tightly coupled application for more may exchange more tightly coupled application for more may exchange more tightly coupled application for more may exchange more tightly coupled application for more may exchange more tightly coupled application for more loosely coupled DOM loosely coupled DOM loosely coupled DOM loosely coupled DOM loosely coupled DOM loosely coupled DOM loosely coupled DOM loosely coupled DOM โš“ โš“ โš“ โš“ โš“ โš“ โš“ โš“ architecture is a tool to enforce style architecture is a tool to enforce style architecture is a tool to enforce style architecture is a tool to enforce style architecture is a tool to enforce style architecture is a tool to enforce style architecture is a tool to enforce style architecture is a tool to enforce style โš“ โš“ โš“ โš“ โš“ โš“ โš“ โš“ performance changes felt more acutely, need careful balance performance changes felt more acutely, need careful balance performance changes felt more acutely, need careful balance performance changes felt more acutely, need careful balance performance changes felt more acutely, need careful balance performance changes felt more acutely, need careful balance performance changes felt more acutely, need careful balance performance changes felt more acutely, need careful balance with any inversion of control with any inversion of control with any inversion of control with any inversion of control with any inversion of control with any inversion of control with any inversion of control with any inversion of control
  28. BOTTOM LINE โš“ โš“ โš“ โš“ โš“ โš“ โš“ โš“

    use MVC instead of nothing use MVC instead of nothing use MVC instead of nothing use MVC instead of nothing use MVC instead of nothing use MVC instead of nothing use MVC instead of nothing use MVC instead of nothing โš“ โš“ โš“ โš“ โš“ โš“ โš“ โš“ where possible, fit patterns to apps, not vice-versa where possible, fit patterns to apps, not vice-versa where possible, fit patterns to apps, not vice-versa where possible, fit patterns to apps, not vice-versa where possible, fit patterns to apps, not vice-versa where possible, fit patterns to apps, not vice-versa where possible, fit patterns to apps, not vice-versa where possible, fit patterns to apps, not vice-versa โš“ โš“ โš“ โš“ โš“ โš“ โš“ โš“ if you write a framework, try to solve a new problem if you write a framework, try to solve a new problem if you write a framework, try to solve a new problem if you write a framework, try to solve a new problem if you write a framework, try to solve a new problem if you write a framework, try to solve a new problem if you write a framework, try to solve a new problem if you write a framework, try to solve a new problem โš“ โš“ โš“ โš“ โš“ โš“ โš“ โš“ when refactoring, favor loosest coupling when refactoring, favor loosest coupling when refactoring, favor loosest coupling when refactoring, favor loosest coupling when refactoring, favor loosest coupling when refactoring, favor loosest coupling when refactoring, favor loosest coupling when refactoring, favor loosest coupling โš“ โš“ โš“ โš“ โš“ โš“ โš“ โš“ every implementation decays every implementation decays every implementation decays every implementation decays every implementation decays every implementation decays every implementation decays every implementation decays โš“ โš“ โš“ โš“ โš“ โš“ โš“ โš“ use the best tool you can find use the best tool you can find use the best tool you can find use the best tool you can find use the best tool you can find use the best tool you can find use the best tool you can find use the best tool you can find โš“ โš“ โš“ โš“ โš“ โš“ โš“ โš“ architect opportunities to improve not just code quality, architect opportunities to improve not just code quality, architect opportunities to improve not just code quality, architect opportunities to improve not just code quality, architect opportunities to improve not just code quality, architect opportunities to improve not just code quality, architect opportunities to improve not just code quality, architect opportunities to improve not just code quality, but pattern but pattern but pattern but pattern but pattern but pattern but pattern but pattern
  29. THANKS! โš“ โš“ โš“ โš“ โš“ โš“ โš“ โš“ image

    credit: image credit: image credit: image credit: image credit: image credit: image credit: image credit: http://www.flickr.com/photos/60584010@N00/3213608406/ http://www.flickr.com/photos/60584010@N00/3213608406/ http://www.flickr.com/photos/60584010@N00/3213608406/ http://www.flickr.com/photos/60584010@N00/3213608406/ http://www.flickr.com/photos/60584010@N00/3213608406/ http://www.flickr.com/photos/60584010@N00/3213608406/ http://www.flickr.com/photos/60584010@N00/3213608406/ http://www.flickr.com/photos/60584010@N00/3213608406/