Upgrade to Pro — share decks privately, control downloads, hide ads and more …

What Do You Know: StateCharts

Avatar for geoffreyd geoffreyd
February 28, 2012

What Do You Know: StateCharts

Presentation for the WebDirections What Do You Know night.

Avatar for geoffreyd

geoffreyd

February 28, 2012
Tweet

Other Decks in Programming

Transcript

  1. The Cool Cats Say • Design: MVC, MVVM, MVP •

    Framework: Backbone, Batman, Sammy, SproutCore, JavascriptMVC ... • Templates: Handlebars, Moustache, Jade, Plain old HTML ...
  2. StateCharts Logic Controllers for your App Login (Is NOT logged

    in) CHECK AUTHORIZATION endLogin Show Login Running (Is Logged in) beginLogin
  3. StateCharts - Logic Controllers Views User Controller Models Contact Controller

    Client Controller Booking Controller Login Controller StateChart
  4. Data Goes to Views Views User Controller Models Contact Controller

    Client Controller Booking Controller Login Controller StateChart
  5. Events Goes to StateChart Views User Controller Models Contact Controller

    Client Controller Booking Controller Login Controller StateChart
  6. StateChart Respond to Events Views User Controller Models Contact Controller

    Client Controller Booking Controller Login Controller StateChart
  7. Responsible for View Setup Views User Controller Models Contact Controller

    Client Controller Booking Controller Login Controller StateChart
  8. Login (Is NOT logged in) CHECK AUTHORIZATION endLogin Show Login

    Running (Is Logged in) beginLogin statechart.addState({ parentState: “App”, name: “login”, initialSubState: “checkAuthorization” })
  9. statechart.addState({ name: “checkAuthorization”, parentState: “login”, enterState: function() { if (userLoggedIn())

    { this.goToState(“Running”) } else { this.goToState(“ShowLogin”) } } }) Login (Is NOT logged in) CHECK AUTHORIZATION endLogin Show Login Running (Is Logged in) beginLogin
  10. statechart.addState({ name: “showLogin”, parentState: “login”, enterState: function() { // Show

    Login View }, exitState: function() { // Hide Login View }, beginLogin: function() { // Send data to server }, endLogin: function() { // Receive response, Then go to Running State } }) Login (Is NOT logged in) CHECK AUTHORIZATION endLogin Show Login Running (Is Logged in) beginLogin
  11. statechart.addState({ name: “Running”, parentState: “App”, enterState: function() { // Show

    App Views }, exitState: function() { // Hide App Views } }) Login (Is NOT logged in) CHECK AUTHORIZATION endLogin Show Login Running (Is Logged in) beginLogin
  12. Login (Is NOT logged in) CHECK AUTHORIZATION endLogin Show Login

    Running (Is Logged in) beginLogin Testing
  13. Login (Is NOT logged in) CHECK AUTHORIZATION endLogin Show Login

    Running (Is Logged in) beginLogin Testing Pass 1 Logged Out, Successful response
  14. Login (Is NOT logged in) CHECK AUTHORIZATION endLogin Show Login

    Running (Is Logged in) beginLogin Pass 1 Logged Out, Successful response Pass 2 Logged Out, Failed response Testing
  15. Login (Is NOT logged in) CHECK AUTHORIZATION endLogin Show Login

    Running (Is Logged in) beginLogin Pass 1 Logged Out, Successful response Pass 2 Logged Out, Failed response Pass 3 Already Logged In Testing
  16. Login (Is NOT logged in) CHECK AUTHORIZATION endLogin Show Login

    Running (Is Logged in) beginLogin Pass 1 Logged Out, Successful response Pass 2 Logged Out, Failed response Pass 3 Already Logged In Testing DONE!
  17. StateCharts • Put your App logic in the right place

    • Each State is responsible for it’s visual state • Separate concerns • Easy to Test