Your SlideShare is downloading. ×
Scaling Cairngorms
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×

Introducing the official SlideShare app

Stunning, full-screen experience for iPhone and Android

Text the download link to your phone

Standard text messaging rates apply

Scaling Cairngorms

2,381
views

Published on

My 2010 ESRI Developers Summit preso on Cairngorm 3 and best practices.

My 2010 ESRI Developers Summit preso on Cairngorm 3 and best practices.

Published in: Technology, Education

1 Comment
4 Likes
Statistics
Notes
  • good overview of Cainrgorm 3
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here
No Downloads
Views
Total Views
2,381
On Slideshare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
48
Comments
1
Likes
4
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide
  • Flex work for >2 yearUsed Cairngorm 2 on a couple of projectsThis presentation focuses on Cairngorm 3, which is in beta
  • Goal: To get to Base Camp Pragmatica where maintainable, clean Flex apps are the norm.
  • Cairngorm 3 – the frameworkFlexUnit4 – TDDSpicefactory/Parsley – IoC, messagingAGS Flex API - MapsHamcrest – MatchersASMock – Mock framework
  • Cairngorm 3 – the frameworkFlexUnit4 – TDDSpicefactory/Parsley – IoC, messagingAGS Flex API - MapsHamcrest – MatchersASMock – Mock framework
  • Cairngorm 3 is still in betaI recommend using it b/c it's cleaner, easier to test & maintain"Microarchitecture" to develop RIAsWhile some of the Cairngorm 2 patterns are still around, much of what was wrong with Cairngorm 2 is gone.Command pattern is still hereIOC is goneHas a set of Guidelines, Tools, and Libraries to help describe and support this microarchitecture
  • Split the application into functional areas.In larger applications, you would split the functional areas into modules, and each FA would have layersPresume IoC, but don't specify a provider.  This is the heart of Cairngorm 3's adaptability.  The example implementation is written using Parsley and SpiceLibVERY different from Cairngorm 2
  • Layout application (or modules) into the these four functional areas
  • Layout application (or modules) into the these four functional areas
  • Transcript

    • 1. Scaling the Cairngorms
      One Way Up the Mountain
      Test-Driven Flex and ArcGIS Server Development Utilizing Cairngorm 3
    • 2. Your Sherpa
      Glenn Goodrich
      Enspiria Solutions
      ggoodrich@enspiria.com
      @ruprictGeek
    • 3. Pragmatica
      Destination: Summit of Pragmatica
      Build good practices like TDD, IoC, DI and make a MOCKery of unmaintainable development.
    • 4. What’s on our backs?
      Flex API
      Cairngorm 3
      FlexUnit 4
      Parsley
      ASMock
      Hamcrest
    • 5. Who are you?
      Previous Climbing Experience
      Flex Developer
      Understand TDD, IoC/DI
      Understand Mocking
      Bonus
      Cairngorm experience
      Other MVC experience
    • 6. Base Camp: Cairngorm
      Micro-Architecture
      Command Pattern
      IoC to Inject Models & Services
      Guidelines
      Tools
      Libraries
      We are here
      NOTHING like Cairngorm 2.
      (Really, like, they are TOTALLY different)
    • 7. Base Camp: Cairngorm Guidelines
      Application Layers
      Presentation
      Application
      Domain
      Infrastructure
      Presume IoC, but don’t specify
      Loose Coupling
      NOTHING like Cairngorm 2.
      (Really, like, they are TOTALLY different)
    • 8. Base Camp: Cairngorm Guidelines
      Presentation
      View and View Models
      MXML has minimal script
      MXML binds to Model
      MXML throws inline events
      View Model throws business events
      Application
      Events & Commands
      Integrate to the world
      Changes Model
      Domain
      Business Objects
      Business Logic (Client-side)
      Infrastructure
      Services, Remote & Local (cache)
    • 9. Base Camp: Cairngorm Guidelines
      Cairngorm
      Messaging
      event
      event
      Infrastructure
      View => PM
      Command
      invokes
      returns
      updates
      binds to
      Model
    • 10. Base Camp: Cairngorm Tools
      Leverage Existing Libraries
      FlexUnit4
      ASMock
      FlexPMD
      IDE Plugins
      Pretty sparse, right now.
      IDE Integration could be the only place Cairngorm 3 is like Caringorm 2
    • 11. Base Camp: Cairngorm Libraries
      Integration
      Observer
      Validation
      Navigation
      Module
      Task
      PopUp
      Think Patterns & Practices
      Provide framework
      Handle common needs
    • 12. Base Camp: Cairngorm Libraries
      public class SelectStadiumsCommand
      {
      [Inject]
      public varservice:IStadiumService;
      [Inject]
      public varselectedStadiums:Stadiums;
      [Command(selector="selectStadiums")]
      public function execute(event:SelectStadiumsEvent):AsyncToken{
      return service.getStadiumsForGeometry(event.geometry);
      }
      [CommandResult(selector="selectStadiums")]
      public function handleStadiums(result:*,event:SelectStadiumsEvent):void{
      //Transform result
      Integration
      Command Pattern
      Global Error Handling
      Progress Information
    • 13. Base Camp: Cairngorm Libraries
      Observer
      Data binding
      Don’t use this
      (unless you have to)
      <observer:Observe source="{model.selectedExtent.xmin}“ handler="updateExtent"/>
    • 14. Base Camp: Cairngorm Libraries
      Validation
      Data Input
      Domain Validation
      <validators:ValidatorGroup id="validatorGroup">
      <validators:validators>
      <mx:StringValidator id="firstnameValidator"
      source="{ firstnameInput }"
      required="true"
      minLength="3"
      property="text"
      triggerEvent="change"/>
      <mx:StringValidator id="lastnameValidator"
      source="{ lastnameInput }"
      required="true"
      minLength="2"
      property="text"
      triggerEvent="change"/>
      </validators:validators>
      </validators:ValidatorGroup>
    • 15. Base Camp: Cairngorm Libraries
      Navigation
      Waypoints and Landmarks
      Navigation Interceptors
      Navigation State
      <mx:ViewStackxmlns:mx="http://www.adobe.com/2006/mxml" >
      <mx:Metadata>
      [Waypoint]
      </mx:Metadata>
      <dashboard:BoardViewautomationName="{ ContentDestination.DASHBOARD }“/>
      <news:NewsView automationName="{ ContentDestination.NEWS }"/>
      <messages:MessagesViewautomationName="{ ContentDestination.MESSAGES }"/>
      </mx:ViewStack>
      ………………………………………………………………………………………..
      [Landmark(name=“news")]
      public class ContentPM implements ISelectedIndex
      {
      [Bindable]
      public varselectedIndex:int;
      ………………………………………………………………………………………..
      private function navigateTo(destination:String):void { dispatcher(NavigationEvent.newNavigateToEvent(destination));
      }
    • 16. Base Camp: Cairngorm Libraries
      PopUp
      PopUp Management
      Abstract PopUpManager
      <popup:PopUpWrapper id="popup1" open="{model.popUpHandler.showStadium}" >
      <mx:TitleWindow width="450" height="400" title="{model.selectedStadium.team}" layout="absolute" >
      <esri:Map id="stadiumMap" verticalCenter="0" horizontalCenter="0"
      mapClick="trace(model.selectedExtent);trace(stadiumMap.extent)"
      width="400“ height="300">
      </esri:Map>
      <mx:Button bottom="10" left="10"
      label="Close"
      click=“dispatchEvent( new Event( Event.CLOSE ) )"/>
      </mx:TitleWindow>
      <popup:behaviors>
      <mx:Array>
      <popup:AddPopUpToParsleyContext context="{ context }"/>
      </mx:Array>
      </popup:behaviors>
      </popup:PopUpWrapper>
    • 17. Base Camp: Cairngorm Libraries
      Module
      Modular Applications*
      Task
      Sequence Commands
      Parallel Commands
      *Duh
    • 18. Base Camp: Parsley & SpiceLib
      Parsley
      Dependency Injection
      Messaging
      Task Framework
      SpiceLib
      Submodule of Parsely
      Reflection
      Task Framework
    • 19. Pragmatica Need
      The Cairngorms are the last place on earth where the NFL hasn’t played a football game. The leaders of Pragmatica want to lure the NFL to Scotland and need a way to select the different stadiums and learn about these “football” teams.*
      User Story
      As a Pragmatica Leader, I want to select specific NFL Stadiums so I can see what makes a good stadium. *
      *worst contrived presentation demo story ever
    • 20. The Foot of the Summit
      Data
      Base Map
      NFL Stadiums (via GeoCommons)
      Special Instructions
      Compiler setting for ASMock/FlexUnit4 runner
      Create “test” folder for our unit tests
    • 21. The Foot of the Summit
      Source Structure
      Broken into Functional Areas
      Separate test folder
    • 22. First Belay: Write a Test
      FlexUnit4 Setup
      Test Suite (Scaling Tests)
      TestRunner Application
      User Story
      As a Pragmatica Leader, I want to select specific NFL Stadiums so I can see what makes a good stadium.
      Map Test
      User draws a polygon
      Map fires event (SelectStadiumsEvent)
    • 23. First Belay: Under Test
      Cairngorm
      Messaging
      event
      View => PM
    • 24. First Belay: Under Test
    • 25.
    • 26. Second Belay: Write a Test
      Command Test
      Should call a service
      Should update model with results
      Application Layer
      Shields view from Infrastructure
      Changes Model
      Drives the Model
      Stadium
      Stadiums
    • 27. Second Belay: Under Test
      Cairngorm
      Messaging
      Infrastructure
      Command
      invokes
      returns
      updates
      Model
    • 28. Second Belay: Under Test
    • 29.
    • 30.
    • 31. Third Belay: Hook Up the View
      Guidelines
      Only knows about PM
      Use Flex data binding
    • 32. Third Belay: Hook Up the View
    • 33. Fourth Belay: Configure IoC
      Views
      addedToStage
      PMs
      ManagedEvents
      Parsley IoC
      Create a Context
      Add Presentation Models
      Add Business Objects
      Add Commands
      Add Services
    • 34. Fourth Belay: Configure IoC
    • 35. Fourth Belay: Configure IoC
    • 36. Race to the Summit
      Pragmatica
      Rinse, Lather, Repeat
      Write Tests
      Write Code to Satisfy Tests
      Hook up Views
      Configure IoC
      Some Other Examples
      Stadium Map
      Show PopUp
    • 37.
    • 38.
    • 39.
    • 40. Back at Base Camp
      Presentation on SlideShare
      http://slideshare.net/ruprict/scaling-caringorms
      Source Code on GitHub
      http://github.com/ruprict/scaling-cairngorm-ags
      Links to all libraries
      Contact Me
      ggoodrich@enspiria.com
      @ruprictGeek
    • 41. Questions
      Thanks for coming!
      Post Climb Refreshments