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