Skip to content

ccnokes/SimpleStateMachine

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

30 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

SimpleStateMachine

State machines are simple yet powerful. This one aims to be as simple as possible. No external dependencies.

Install

bower install SimpleStateMachine
npm install simple-statemachine

Build

To build and view locally, first clone the project and then:

npm install
grunt serve

That will start a server at localhost:1337 and load the examples page.

Usage

See examples folder for usage. The example using Angular has a side-by-side comparison of using SimpleStateMachine vs. not in a pretty typical use-case. See .js file code comments for documentation.

Why?

One of the primary things front end Javascript deals with is setting and managing the state of different objects and exposing that state to the DOM. There's a lot of complexity to this: not all states can be universally reached from all other states, other objects need to be notified when a states has been entered/left, only one state can be "active" at a time, etc. I've found that this complexity can be reduced by using a state machine to manage it. This is because:

  • The pub/sub pattern allows for greater separation of concerns; and pub/sub is at the heart of this state machine.
  • Having a common API for managing state within an app makes you more productive because you don't reinvent the wheel every time you're working on state related logic.
  • Explicitly defining state makes it easier to manage rather than relying on implicitly defined state, e.g. check if some object has data, if it doesn't, it must be in an error state, so show an error message. Subscribing to the defined error state event and then showing an error message is much simpler to reason about.

This article also explains why state machines should be used.

About

Javascript state machine that keeps things simple

Topics

Resources

License

Stars

Watchers

Forks

Packages

No packages published