Detailed Course Outline
Simplifying Complex Programming with Proven Design Patterns
Applying simple interfaces to intricate algorithms
- Unifying interfaces from subsystems for ease of use and reusability
 
- Implementing the Facade pattern
 
Varying functionality by programming to interfaces
- Creating abstractions to enhance application adaptability and flexibility
 
- Exploiting the Strategy pattern
 
Extending object behaviour dynamically
- Increasing functionality without impacting existing code
 
- Composing objects with the Decorator pattern
 
Achieving reuse and flexibility
- Eliminating code duplication by outlining an algorithm
 
- Employing the Template Method pattern
 
Interfacing incompatible classes
- Transforming an interface to add value to existing code
 
- Harnessing the Adapter pattern
 
Applying Test–Driven Development Techniques
Automating unit testing
- Shortening development cycles with automated tests
 
- Eliminating regression errors with reusable tests
 
Integrating testing and coding
- Applying the test–first programming practice
 
- Generating immediate red–green feedback for increased code quality and shortened feature development cycles
 
- Organising, coordinating and running test cases
 
- Isolating a class test environment with the Mock–Object pattern for reliable and repeatable testing
 
- Tracking the Red–Green–Refactor rhythm for feedback
 
Refactoring code to improve design
- Improving design with behaviour preserving refactorings
 
- Eliminating code duplication by refactoring to patterns
 
Architecting a Layered Application
Designing the application architecture
- Layering architectures for reusability, durability and scalability
 
- Decoupling object creation with the Factory pattern
 
- Preserving object identity with the Identity Map pattern
 
Programming application tiers
- Isolating UI layers with the MVC and MVVM patterns
 
- Organising state–rich applications with the State pattern
 
- Restructuring database tables without impacting code
 
Modelling a business area
- Liberating rich Business Object Models from database structures using the Domain Model pattern
 
- Mapping rich Business Objects to database tables with the Data Mapper pattern
 
- Collapsing Business Object hierarchies with the Inheritance Mapper pattern
 
- Exploiting declarative programming in Microsoft Entity Framework to implement Data Mapping classes
 
Applying Best Practices
Organising and implementing business logic
- Managing Persistence Ignorant Entity types with Entity Framework
 
- Manipulating groups of Entities with business logic classes
 
Applying S.O.L.I.D. principles of class design
- Single Responsibility
 
- Open–Closed
 
- Liskov Substitution
 
- Interface Segregation
 
- Dependency Inversion
 
Automating Repetitive Tasks
Easing data access code
- Reducing database access code by exploiting Entity Navigation Properties
 
- Eliminating database update code with Entity change tracking
 
Enhancing application code
- Automating design reviews with FxCop and Code analyser
 
- Reducing User Interface code with Data Binding