Headspring Certified Training.Net Boot Camp: From Journeyman to Master Series Presented by Jeffrey Palermo CTO, Headspring Systems Microsoft MVP, MCSD.Net
About me CTO, Headspring Systems Software management consultant Agile coach MCSD.Net MVP, Solutions Architect Certified Scrum Master Director, Austin.Net User Group Board member, AgileAustin INETA speakers bureau U.S. Army Veteran Party with Palermo
Agile, Lean & Extreme Programming
Agile Individuals and interactions over processes and tools Working software over comprehensive documentation Customer collaboration over contract negotiation Responding to change over following a plan
Lean Eliminate waste Amplify learning Decide as late as possible Deliver as fast as possible Empower the team Build integrity in See the whole
Extreme Programming Whole team Planning game Small releases Customer tests Simple design Pair programming Test-Driven Development Design improvement Continuous integration Collective code ownership Coding standard Metaphor Sustainable pace
Source Control
Repository structure -Trunk -Tags -Branches
Automated build with nant
What does a build do? Compiles Links Versions Packages Runs all tests Succeeds or fails, no gray area.
Why automate? Avoid manual steps Performs steps the same every time Save human time Increase rate of feedback
Prerequisites Structured source control –Trunk –Tags –Branches Access to all key dependencies within trunk working copy
Build goal From a checkout of the trunk, run a single command and output a verified, versioned, packaged, and deployable software application.
Key Steps Increment version number Create database that will be used in build testing Compile and link all code files into.Net assemblies Execute all primary tests to verify compiled software Aggregate all files necessary for a deployment and package in organized.zip file Commit deployable.zip to Subversion Tag build with version number
Domain-Driven Design
Inversion of Control
The object that uses a type is not responsible for creating it. (SearchPresenter)
Object-Relational Mapping
Why ORM? Save human time. Consistent quality Work in object-oriented manner rather than data-oriented.
Web ClientDomain Data Access DB IoC Container Application Architecture
Design Patterns
What design patterns are we using? Model-View-Presenter Repository Aggregate Builder Strategy Decorator Specification Template Method
Performance Optimization
Steps for performance optimization Make the program work correctly. Measure performance. Determine that performance is not acceptable. Profile to determine bottleneck. Mitigate bottleneck. Measure again. If performance does not improve, roll back change. If performance improves, commit change. Measure/profile/fix bottleneck until performance is acceptable.
Continuous Integration
Test-Driven Development
That’s all, folks!