Title: Developing Flex Applications with the Swiz Framework
1Developing Flex Applications with the Swiz
Framework
www.cfunited.com
2About Me
- Enterprise Software Consultant
- Author of the Swiz Framework
- Co-Author of ColdSpring
- Contributor to too many OSS projects
- Developing with Flex, CF and Java for quite a
long time
www.cfunited.com
3What Well Cover
- What, Why, How
- What is Swiz?
- Why should you use it?
- How does Swiz make your life easier?
- Why do I have such a hangover?
- Advanced Swiz
- New Features
www.cfunited.com
4Another framework for Flex?
www.cfunited.com
5What Swiz users are saying...
- Broadchoice evaluated a few frameworks and
settled on Swiz as the keystone behind our
Workspace product. - Sean Corfield, CTO Railo US
www.cfunited.com
6What Swiz users are saying...
- Personally I think it is way better then
Cairngorm! - Kurt Wiersma, some Mach-ii dude
www.cfunited.com
7What Swiz users are saying...
- Swiz is a lovely, lightweight framework that I'm
really enjoying working with. - Aral Balkan, a popular Flash blogger
and CF hater
www.cfunited.com
8What Swiz users are saying...
- Even bigger thanks for Swiz... Which is one of
the most elegant and useful pieces of software
that I've ever seen in my 24 years of
programming! - Afik Gal, a guy I do not know at all
www.cfunited.com
9Why Swiz?
- Because those guys told you to?
- Not at all!! But Swiz is...
- Simple and effective!
- Easy to learn!
- Designed to help you write less code!
- Encourages loose coupling through MVC!
- More things that end with !!!...
www.cfunited.com
10What is Swiz all about?
www.cfunited.com
11Swiz Overview
- Flex Applications Require
- Remote Services
- Models / Data
- Controllers / Logic
- Views
www.cfunited.com
12Swiz Overview
- Components need each other
- Wire ourselves
- Use Locators
- Verbose XML
www.cfunited.com
13Swiz Overview
- Components need each other
- Wire ourselves
- Use Locators
- Verbose XML
- IoC
- Annotations
www.cfunited.com
14Swiz Overview
- Views communicate with components
- Flex Events
- MVC Paradigm
- DynamicMediatormakes it easy!
www.cfunited.com
15Swiz Overview
- Applications need remote data
- Async Tokens
- Responders
- State around calls
- DynamicRespondermakes it easy!
www.cfunited.com
16Major Swiz Features
- IoC
- autowires app
- DynamicResponder
- remote data
- DynamicMediator
- event handling
- and a whole lot more...
www.cfunited.com
17What Swiz DOESNT Provide
- Excessive JEE patterns
- Boilerplate code
- Verbose XML / MXML configuration
- Overly Prescriptive workflow
www.cfunited.com
18Inversion of Control, the Swiz way
How about a little audience participation...
www.cfunited.com
19IoC Recap
- Components require dependencies to function
- Dependencies may be simple strings and values, or
other components - Resolving complex dependencies is outside the
scope of primary logic
www.cfunited.com
20Inversion of Control with Swiz
- Express dependencies through Metadata, or
Annotations - Swiz takes care of configuration through
Dependency Injection - Views also have dependencies such as Models, or
PresentationModels - Swiz handles everything for you!
www.cfunited.com
21Working with Swiz
www.cfunited.com
22Defining Beans
- Define components in BeanLoaders
- Written in plain old MXML
- Swiz calls objects Beans because it only cares
about their properties - only sort of true
www.cfunited.com
23Defining BeanLoaders
- ltBeanLoader xmlnsorg.swizframework.util.
- xmlnsmxhttp//www.adobe.com/2006/mxmlgt
- ltmxRemoteObject iduserService
destinationuserService/gt - ltmxRemoteObject idmapService
destinationmapService/gt - ltcontrollerUserController iduserController
/gt - ltcontrollerMapController idmapController/gt
- lt/BeanLoadergt
www.cfunited.com
24Swizs IoC Factory
- When Swiz loads beans, it searches for Autowire
metadata - When objects are retrieved, Swiz performs the
magic of Autowiring - Swiz adds event listeners for added to stage and
removed from stage events - Allows Swiz to Autowire and clean up Views too!
www.cfunited.com
25Loading Swiz - Old Style...
- Load Swiz early, in a preinitialize handler
- Swiz constructs components for you to help manage
your application - Initialization is performed as soon as you do
anything to Swiz, like loading beansprivate
function onInitialize() void Swiz.loadBeans(
Beans )
www.cfunited.com
26Loading Swiz - New Style!
- Use Swizs ConfigBean in MXML
- Requires an array of BeanLoaders
- Access to all configuration parametersltswizframe
workSwizConfig strict"true"
beanLoaders"Beans" logEventLevel"LogE
ventLevel.WARN"/gt
www.cfunited.com
27Expressing Dependencies
- Dependencies are NOT defined in MXML!
- Use Autowire in your AS objects
- Similar to new Spring 2.0 configuration
- Qualify bean to inject by id.
- Autowire(bean"userController")public var
userController UserController
www.cfunited.com
28Expressing Dependencies
- To autowire by type, forget the bean
- Swiz looks for bean which matches the variable
type - Works with interfaces and inheritance
- Swiz throws AmbiguousBean error if more than
one bean could be injected
www.cfunited.com
29View Autowiring
- You can use Autowire on accessors as well as
properties - Properties can be autowired with two way
bindings!! - Accessors allow views to perform logic when
dependencies are set - dont do this in Beans! Only in views!
- there are better ways to perform initialization!
www.cfunited.com
30Working with Remote Services
- Swiz provides two simple methods for remote
method calls - Both dynamically create responders for
AsyncTokens - DynamicResponder
- DynamicCommand
www.cfunited.com
31Working with Remote Services
- DynamicResponders bind result and fault handlers
transparently - DynamicCommand is similar, but can be chained
together and delayed - Swiz offers simple methods for creating in
AbstractController
www.cfunited.com
32DynamicResponders
- executeServiceCall creates dynamic responders for
you - Implement iResponderexecuteServiceCall(userServic
e.getUser,
getUserResult) - First parameter an AsyncToken, returned from a
remote call - Second parameter is the Function to be called in
the responders onResult()
www.cfunited.com
33DynamicResponders
- Third parameter is a Function to be called in the
responders onFault() - If you omit the fault parameter, Swiz uses a
default fault handler - Swiz can also bind extra parameters to your
result handlers
www.cfunited.com
34Binding data to result handlers
- Passed as an array to executeServiceCall
- Swiz treats this as extra arguments to pass to
your result handler - Allows you maintain state over async calls
- ex. Pass User being saved to ResultHander
www.cfunited.com
35DynamicCommands
- Similar to DynamicResponders, but first parameter
is a Function which returns an AsyncToken - The Function is called dynamically in the
Commands execute() method - Created for you with createCommand()createCommand
(userDelegate.saveUser,
user, saveUserResult)
www.cfunited.com
36DynamicCommands
- Can be added to Swizs CommandChain
- Chains can run in series or parallel
- A final Function or Event is fired when the Chain
completes - You can attach a Function or Event for faults as
well
www.cfunited.com
37DynamicCommands
var chain new CommandChain() chain.addCommand(
createCommand( helloDelegate.echo, "swiz
rulz!", echo_results, local_Fault))
.addCommand(createCommand( helloDelegate.showT
ime, null, time_results, local_Fault)) ch
ain.completeHandler completeHandler chain.proce
ed()
www.cfunited.com
38Event Handling with Swiz
- Swiz does not try to replace Flexs Event model,
just adds a little simplicity - Most apps contain a CentralDispatcher, Swiz just
give you one for free - Swiz abstracts its use through static methods
www.cfunited.com
39Event Handling with Swiz
- Swiz.dispatchEvent(eventEvent)
- Dispatches any event (no Swiz event)
- Swiz.dispatch(typeString)
- Creates an event for you
- Swiz.addEventListener(typeString,
functionFunction, ... ) - Adds an eventListener to Swizs CentralDispatcher
www.cfunited.com
40DynamicMediators
- Greatly help to promote loose coupling between
Views and Controllers - Enables very simple event handling in Controllers
- Reduces repetitive glue code in Views
- Sort of similar to Cairngorms FrontController,
but WAY less boilerplate code
www.cfunited.com
41DynamicMediators
- Add Mediate annotation to a Controller function
- Mediate(eventeventType, propertiesfoo,
bar)public function doStuff(argA String,
argB String) - Swiz creates a DynamicMediator for you
- Adds an eventListener for supplied type to Swizs
centralDispatcher - Uses properties to construct method call
www.cfunited.com
42Strict type checking
- No compile time checking of event type strings
- Swiz.setStrict(true) forces Swiz to lookup event
types from existing classes - Can define base event packages with
addEventPackage - Swiz can write a proper missing event class to a
log file
www.cfunited.com
43Recap
- Swizs IoC is very easy to use
- Swiz provides a simple MVC paradigm
- Very little XML! Mostly Annotations
- Swiz provides core utilities for
- DynamicResponders and Commands
- Event handling
- DynamicMediators
www.cfunited.com
44Recap
- Swiz represents best practices learned from years
of consulting - Swiz is damn easy!
- New features are coming fast and furious!
www.cfunited.com
45Resources
- Swiz Resources
- http//code.google.com/p/swizframework
- http//groups.google.com/group/swiz-framework
- http//cdscott.blogspot.com
- http//soenkerohde.com
- http//www.returnundefined.com
- Other Resources
- http//code.google.com/p/dphibernate
- http//code.google.com/p/flex-mojos
- http//code.google.com/p/loom
www.cfunited.com
46Thank You!
- Chris ScottEnterprise Software Consultant
- http//cdscott.blogspot.comchris.scott.one_at_googl
e.comasstrochris_at_comcast.netgtalk
chris.scott.one_at_gmail.comaim/skype/twitter/plurk/
brightkite asstrochris
www.cfunited.com