Application architecture jumpstart
- 1. A P P L I C AT I O N
ARCHITECTURE
J U M P S TA R T
Clint Edmonson
Senior Consultant
Polaris Solutions
clinted@polarissolutions.com
- 17. 1. Identify architecture objectives
A. Determine goals based on size, scope, time
• Complete application
• Prototype
• Solving a technical risk
• Exploring potential options
• Building shared, reference models
B. Identify target audience
• Other architects
• Developers
• Testers
• Operations
- 18. 2. Identify key scenarios
A. Define the solution’s boundaries
B. Identify who will impacted by the solution
C. Discover what valuable activities will be automated
D. Uncover constraints that will limit the solution
E. Identify activities that are most important to the
success of your application
F. Highlight those that are architecturally significant
- 20. 3. Create an application overview
A. Determine your application type
• Web
• Mobile
• Rich client
• RIA
• Web service
• Some combination of the above
B. Identify your deployment constraints
C. Determine your relevant technologies
- 21. 4. Identify key issues
A. Cross-cutting concerns
• Configuration
• Security
• Communication
• Compression
• Encryption
• Logging & instrumentation
• Validation
• Error management
B. Quality attributes
• Run-time performance
• Scalability
• Disaster recovery
- 22. 5. Define candidate solution(s)
A. Choose an architecturally significant scenario
B. Design a candidate baseline architecture
C. Build out the scenario to prove it out
- 25. LAY(ER)ING IT ALL OUT
• Describe the application at a high level
• Identify major functional units of the design and their
interdependencies
• Each layer represents a logical group of
projects, namespaces, and/or other artifacts
- 28. Physical deployment
• Visualize the physical structure of a system
• Executables
• Libraries
• Services
• Focus on components of the system, their
relationships, interfaces, and ports
• Highlight the service behavior that they provide and consume
through interfaces
- 30. Grouping layers into assemblies
• Prefer fewer, larger assemblies
•
•
•
•
Faster load time
Reduced working set
Better NGEN optimization
If several assemblies are always loaded together, consider
combining them into one
• Partition into separate assemblies based on
•
•
•
•
•
Deployment
Versioning
Data access
Security and access control
Contributions from disparate sources
• Avoid the one dll per namespace anti-pattern!
- 32. ANALYSIS & DESIGN ARTIFACTS
• Sketch
• Blueprint
• Executable
• They are artifacts, not documentation!
• Don’t be afraid to throw them away and draw new ones!
- 34. BEST PRACTICES
• Minimize upfront design
• avoid starting more than one layer/namespace deep
• Analyze and refactor at the beginning of each iteration
• Separate functional areas of concern cleanly
• Avoid duplicating responsibilities
• Minimize dependencies between layers
• Make it obvious where code needs to go!
- 36. REFERENCES
• Microsoft Application Architecture Guide 2nd Edition
by Microsoft Patterns & Practices Group
• Microsoft .NET: Architecting Application for the Enterprise
by Dino Esposito & Andrea Saltarello
• Domain Driven Design
by Eric Evans
• Framework Design Guidelines
by Krzysztof Cwalina & Brad Abrams
Editor's Notes
- Photo credits: http://www.flickr.com/photos/cogdog/2708223050/Creative Commons Attribution License
- Photo credits: http://www.flickr.com/photos/dullhunk/2859826117/Creative Commons Attribution License
- Photo credits: http://www.flickr.com/photos/rutlo/4094249840/Creative Commons Attribution License
- Photo credits: http://www.flickr.com/photos/annahape-gallery/Creative Commons Attribution License
- Photo credits: http://www.flickr.com/photos/wwarby/2460644803/Creative Commons Attribution License
- Photo credits: http://www.flickr.com/photos/paalia/3582759194/Creative Commons Attribution License
- Photo credits: http://www.flickr.com/photos/emilysoo/3863285545/Creative Commons Attribution License