SlideShare a Scribd company logo
1 of 41
Scaling the Cairngorms One Way Up the Mountain Test-Driven Flex and ArcGIS Server Development Utilizing Cairngorm 3
Your Sherpa Glenn Goodrich Enspiria Solutions ggoodrich@enspiria.com @ruprictGeek
Pragmatica Destination: Summit of Pragmatica Build good practices like TDD, IoC, DI and make a MOCKery of unmaintainable development.
What’s on our backs? Flex API Cairngorm 3 FlexUnit 4 Parsley ASMock Hamcrest
Who are you? Previous Climbing Experience   Flex Developer   Understand TDD, IoC/DI   Understand Mocking Bonus   Cairngorm experience   Other MVC experience
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)
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)
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)
Base Camp: Cairngorm Guidelines Cairngorm Messaging event event Infrastructure View => PM Command invokes returns updates binds to Model
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
Base Camp: Cairngorm Libraries Integration Observer Validation Navigation Module Task  PopUp Think Patterns & Practices    Provide framework    Handle common needs
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
Base Camp: Cairngorm Libraries Observer Data binding    Don’t use this   (unless you have to) <observer:Observe source="{model.selectedExtent.xmin}“ handler="updateExtent"/>
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>
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));  }
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>
Base Camp: Cairngorm Libraries Module  Modular Applications* Task   Sequence Commands  Parallel Commands *Duh
Base Camp: Parsley & SpiceLib Parsley  Dependency Injection  Messaging  Task Framework SpiceLib Submodule of Parsely  Reflection  Task Framework
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
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
The Foot of the Summit Source Structure   Broken into Functional Areas   Separate test folder
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)
First Belay: Under Test Cairngorm Messaging event View => PM
First Belay: Under Test
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
Second Belay: Under Test Cairngorm Messaging Infrastructure Command invokes returns updates Model
Second Belay: Under Test
Third Belay: Hook Up the View Guidelines    Only knows about PM     Use Flex data binding
Third Belay: Hook Up the View
Fourth Belay: Configure IoC Views addedToStage PMs ManagedEvents Parsley IoC    Create a Context    Add Presentation Models    Add Business Objects    Add Commands    Add Services
Fourth Belay: Configure IoC
Fourth Belay: Configure IoC
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
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
Questions Thanks for coming! Post Climb Refreshments

More Related Content

Similar to Scaling Cairngorms

Android Development w/ ArcGIS Server - Esri Dev Meetup - Charlotte, NC
Android Development w/ ArcGIS Server - Esri Dev Meetup - Charlotte, NCAndroid Development w/ ArcGIS Server - Esri Dev Meetup - Charlotte, NC
Android Development w/ ArcGIS Server - Esri Dev Meetup - Charlotte, NC
Jim Tochterman
 
CiklumJavaSat_15112011:Alex Kruk VMForce
CiklumJavaSat_15112011:Alex Kruk VMForceCiklumJavaSat_15112011:Alex Kruk VMForce
CiklumJavaSat_15112011:Alex Kruk VMForce
Ciklum Ukraine
 

Similar to Scaling Cairngorms (20)

FLAR Workflow
FLAR WorkflowFLAR Workflow
FLAR Workflow
 
Windows Azure - Cloud Service Development Best Practices
Windows Azure - Cloud Service Development Best PracticesWindows Azure - Cloud Service Development Best Practices
Windows Azure - Cloud Service Development Best Practices
 
Google Cloud Endpoints: Building Third-Party APIs on Google AppEngine
Google Cloud Endpoints: Building Third-Party APIs on Google AppEngineGoogle Cloud Endpoints: Building Third-Party APIs on Google AppEngine
Google Cloud Endpoints: Building Third-Party APIs on Google AppEngine
 
02 create first-map
02 create first-map02 create first-map
02 create first-map
 
Beyond Unit Testing
Beyond Unit TestingBeyond Unit Testing
Beyond Unit Testing
 
Struts2
Struts2Struts2
Struts2
 
Non Conventional Android Programming (English)
Non Conventional Android Programming (English)Non Conventional Android Programming (English)
Non Conventional Android Programming (English)
 
Naive application development
Naive application developmentNaive application development
Naive application development
 
Open Source XMPP for Cloud Services
Open Source XMPP for Cloud ServicesOpen Source XMPP for Cloud Services
Open Source XMPP for Cloud Services
 
First Failure Data Capture for your enterprise application with WebSphere App...
First Failure Data Capture for your enterprise application with WebSphere App...First Failure Data Capture for your enterprise application with WebSphere App...
First Failure Data Capture for your enterprise application with WebSphere App...
 
Android Development w/ ArcGIS Server - Esri Dev Meetup - Charlotte, NC
Android Development w/ ArcGIS Server - Esri Dev Meetup - Charlotte, NCAndroid Development w/ ArcGIS Server - Esri Dev Meetup - Charlotte, NC
Android Development w/ ArcGIS Server - Esri Dev Meetup - Charlotte, NC
 
Rapid JCR Applications Development with Sling
Rapid JCR Applications Development with SlingRapid JCR Applications Development with Sling
Rapid JCR Applications Development with Sling
 
JUDCon London 2011 - Bin packing with drools planner by example
JUDCon London 2011 - Bin packing with drools planner by exampleJUDCon London 2011 - Bin packing with drools planner by example
JUDCon London 2011 - Bin packing with drools planner by example
 
jBPM5 in action - a quickstart for developers
jBPM5 in action - a quickstart for developersjBPM5 in action - a quickstart for developers
jBPM5 in action - a quickstart for developers
 
my accadanic project ppt
my accadanic project pptmy accadanic project ppt
my accadanic project ppt
 
OSMC 2021 | inspectIT Ocelot: Dynamic OpenTelemetry Instrumentation at Runtime
OSMC 2021 | inspectIT Ocelot: Dynamic OpenTelemetry Instrumentation at RuntimeOSMC 2021 | inspectIT Ocelot: Dynamic OpenTelemetry Instrumentation at Runtime
OSMC 2021 | inspectIT Ocelot: Dynamic OpenTelemetry Instrumentation at Runtime
 
Hector v2: The Second Version of the Popular High-Level Java Client for Apach...
Hector v2: The Second Version of the Popular High-Level Java Client for Apach...Hector v2: The Second Version of the Popular High-Level Java Client for Apach...
Hector v2: The Second Version of the Popular High-Level Java Client for Apach...
 
Analytics Metrics delivery and ML Feature visualization: Evolution of Data Pl...
Analytics Metrics delivery and ML Feature visualization: Evolution of Data Pl...Analytics Metrics delivery and ML Feature visualization: Evolution of Data Pl...
Analytics Metrics delivery and ML Feature visualization: Evolution of Data Pl...
 
CiklumJavaSat_15112011:Alex Kruk VMForce
CiklumJavaSat_15112011:Alex Kruk VMForceCiklumJavaSat_15112011:Alex Kruk VMForce
CiklumJavaSat_15112011:Alex Kruk VMForce
 
Mini Curso Django Ii Congresso Academico Ces
Mini Curso Django Ii Congresso Academico CesMini Curso Django Ii Congresso Academico Ces
Mini Curso Django Ii Congresso Academico Ces
 

Recently uploaded

Finding Java's Hidden Performance Traps @ DevoxxUK 2024
Finding Java's Hidden Performance Traps @ DevoxxUK 2024Finding Java's Hidden Performance Traps @ DevoxxUK 2024
Finding Java's Hidden Performance Traps @ DevoxxUK 2024
Victor Rentea
 

Recently uploaded (20)

Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, AdobeApidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
 
Ransomware_Q4_2023. The report. [EN].pdf
Ransomware_Q4_2023. The report. [EN].pdfRansomware_Q4_2023. The report. [EN].pdf
Ransomware_Q4_2023. The report. [EN].pdf
 
Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...
Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...
Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...
 
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost SavingRepurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
 
Navigating the Deluge_ Dubai Floods and the Resilience of Dubai International...
Navigating the Deluge_ Dubai Floods and the Resilience of Dubai International...Navigating the Deluge_ Dubai Floods and the Resilience of Dubai International...
Navigating the Deluge_ Dubai Floods and the Resilience of Dubai International...
 
ICT role in 21st century education and its challenges
ICT role in 21st century education and its challengesICT role in 21st century education and its challenges
ICT role in 21st century education and its challenges
 
DEV meet-up UiPath Document Understanding May 7 2024 Amsterdam
DEV meet-up UiPath Document Understanding May 7 2024 AmsterdamDEV meet-up UiPath Document Understanding May 7 2024 Amsterdam
DEV meet-up UiPath Document Understanding May 7 2024 Amsterdam
 
Artificial Intelligence Chap.5 : Uncertainty
Artificial Intelligence Chap.5 : UncertaintyArtificial Intelligence Chap.5 : Uncertainty
Artificial Intelligence Chap.5 : Uncertainty
 
AWS Community Day CPH - Three problems of Terraform
AWS Community Day CPH - Three problems of TerraformAWS Community Day CPH - Three problems of Terraform
AWS Community Day CPH - Three problems of Terraform
 
MS Copilot expands with MS Graph connectors
MS Copilot expands with MS Graph connectorsMS Copilot expands with MS Graph connectors
MS Copilot expands with MS Graph connectors
 
Finding Java's Hidden Performance Traps @ DevoxxUK 2024
Finding Java's Hidden Performance Traps @ DevoxxUK 2024Finding Java's Hidden Performance Traps @ DevoxxUK 2024
Finding Java's Hidden Performance Traps @ DevoxxUK 2024
 
"I see eyes in my soup": How Delivery Hero implemented the safety system for ...
"I see eyes in my soup": How Delivery Hero implemented the safety system for ..."I see eyes in my soup": How Delivery Hero implemented the safety system for ...
"I see eyes in my soup": How Delivery Hero implemented the safety system for ...
 
Apidays New York 2024 - Passkeys: Developing APIs to enable passwordless auth...
Apidays New York 2024 - Passkeys: Developing APIs to enable passwordless auth...Apidays New York 2024 - Passkeys: Developing APIs to enable passwordless auth...
Apidays New York 2024 - Passkeys: Developing APIs to enable passwordless auth...
 
Exploring Multimodal Embeddings with Milvus
Exploring Multimodal Embeddings with MilvusExploring Multimodal Embeddings with Milvus
Exploring Multimodal Embeddings with Milvus
 
Exploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone ProcessorsExploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone Processors
 
How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerHow to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected Worker
 
MINDCTI Revenue Release Quarter One 2024
MINDCTI Revenue Release Quarter One 2024MINDCTI Revenue Release Quarter One 2024
MINDCTI Revenue Release Quarter One 2024
 
Biography Of Angeliki Cooney | Senior Vice President Life Sciences | Albany, ...
Biography Of Angeliki Cooney | Senior Vice President Life Sciences | Albany, ...Biography Of Angeliki Cooney | Senior Vice President Life Sciences | Albany, ...
Biography Of Angeliki Cooney | Senior Vice President Life Sciences | Albany, ...
 
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot TakeoffStrategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
 
EMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWER
EMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWEREMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWER
EMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWER
 

Scaling Cairngorms

  • 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
  • 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
  • 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
  • 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

Editor's Notes

  1. Flex work for &gt;2 yearUsed Cairngorm 2 on a couple of projectsThis presentation focuses on Cairngorm 3, which is in beta
  2. Goal: To get to Base Camp Pragmatica where maintainable, clean Flex apps are the norm.
  3. Cairngorm 3 – the frameworkFlexUnit4 – TDDSpicefactory/Parsley – IoC, messagingAGS Flex API - MapsHamcrest – MatchersASMock – Mock framework
  4. Cairngorm 3 – the frameworkFlexUnit4 – TDDSpicefactory/Parsley – IoC, messagingAGS Flex API - MapsHamcrest – MatchersASMock – Mock framework
  5. Cairngorm 3 is still in betaI recommend using it b/c it&apos;s cleaner, easier to test &amp; maintain&quot;Microarchitecture&quot; 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
  6. 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&apos;t specify a provider.  This is the heart of Cairngorm 3&apos;s adaptability.  The example implementation is written using Parsley and SpiceLibVERY different from Cairngorm 2
  7. Layout application (or modules) into the these four functional areas
  8. Layout application (or modules) into the these four functional areas