Design Patterns for Agile Developers
Abstract
Design Patterns for Agile Developers teaches participants a style of analysis and design that facilitates Agile practices. We do this by illustrating the use of abstract coupling, patterns, testability, emergent (just-in-time) design, and emphasizing the critical qualities, principles, and practices that make flexible designs possible.
For development organizations to thrive in an Agile, iterative process that embraces change, it is critical that the systems they create are not vulnerable to changing requirements, business priorities, technologies, market pressures, etc.
This course answers the key questions in modern development. How does one design systems that have changeability as a fundamental quality? And, how can the team communicate effectively when a design is in a constant state of change?
Course Objective
This course teaches participants the correct way to do object-orientation. The old style of looking for nouns and verbs to design your classes actually leads to brittle structures. After taking this class,attendees will understand what good design is as well as how to achieve it. After the course participants wiill:
- understand how to add functionality to their designs while minimizing complexity
- learn what design patterns really are
- learn about 12 specific design patterns
- learn what code qualities you need to maintain to keep code flexible
- learn how to use design patterns to keep code quality high
Detailed Description
This course uses patterns in a new way. Patterns are thought of as part of the old “up-front design” style of development, but we now realize that they are more powerful in an Agile environment, where much is assumed to be unknown at the beginning of a project, and where the design is expected to emerge through the iterative process.
Patterns are examples of following the wisdom that guides good design. They emphasize the importance of creating encapsulation and using delegation to segregate systems to protect them from cascading change. When they were first suggested, computers were fundamentally slower, and technology resources (memory, disk space) were far more expensive than they are today. The style of design suggested by patterns is far more realistic now.
Patterns are far more useful as collection of best practices, rather than simply “reusable solutions”. Therefore, participants will learn how to use patterns as part of a thought process that guides analysis, using “pattern orientation” as a way to understand an ever-changing problem domain.
Participants will also learn to consider patterns in the context of testability (specifically unit testing), commonality-variability analysis, and a technique called “refactoring to the open-closed”. By combining these techniques into an overall paradigm of design, we enable developers and teams to move a design forward confidently, even when there is an expectation that the sand beneath their feet with shift.
Course Length
3 daysCourse Level
IntermediateCourse Outline
Day 1, Theory:
- An examination of typical causes of project failure
- An example of a failed design
- The qualities of Changeable Code
- Testability as a Trim-Tab in development
- The principles and practices of Professional Development
- Wisdom from our field
- Gang of Four (authors of the original Design Patterns book)
- Martin Fowler
- James Coplien
- Commonality-Variability Analysis
Day 2, Application:
- The Template Method as an example of CVA
- Using CVA to derive the Bridge Pattern
- Patterns in context: Adapter and Façade Patterns
- Re-solving the problem from day Day 1 in a new, better way
- Refactoring to the Open-Closed ("Just in time design")
- Group design exercise, Part 1
Day 3, Expansion
- Group design exercise, Part 2
- Debrief of the exercise
- Discussion on aspects of flexibility
- Separation of Use and Creation
- Encapsulating Construction
- Emergence through Encapsulation and Patterns
Who is this course for
Primary Audience: This course is for experienced developers, testers, designers, architects, technical leads, and those who manage development teams. They should have intermediate to advanced object-oriented experience. If the team does not use Agile methods, it is suggested that they consider our Design Patterns Explained course as an alternative.
Secondary Audience: Less experienced developers will find value and should be included if part of an experienced team. In this case we provide pre-course material to help bring them up to speed. If the entire team is inexperienced in Object-Orientation, they will be better served with our Effective Object-Oriented Analysis and Design Course. Project managers have often attended this course to learn the approach of their teams and have found that to be useful.
Room Setup and Equipment Needed
No computer equipment is needed for this course. Classrooms require students at tables (round or long) as well as several white boards or flip-charts. A projector with screen is also needed.Prerequisites
This is a design course, not a coding course. However, knowledge of an object-oriented language (Java, C#, C++, etc.) is important in order to understand the various implementation options we investigate. Net Objectives has online assessments for students who are uncertain about their knowledge level, and online training tools that can help prepare you to get the most out of the course. In particular, the participant must be familiar with inheritance, polymorphism, encapsulation, abstract classes and composition.- Anyone weak in object-orientation should read Part I's "An Introduction to Object-Oriented Software Development" Chapter 1 "The Object-Oriented Paradigm" from Design Patterns Explained: A New Perspective on Object-Oriented Design
- Anyone who doesn't know the UML should read Chapter 2 "The UML—The Unified Modeling Language" from Design Patterns Explained: A New Perspective on Object-Oriented Design
Maximum Number in Class
24What customers say about this course
“I was close to quitting this business out of frustration, and I only took the course because my boss told me to. Now that I see what’s been wrong in my thinking, I’m totally confident that my career is back on track. I can’t wait to get back to work! This course has changed my life; I just wanted you to know that.”
– A student’s verbal comment at the end of the first delivery of this course