This course uses patterns in a new way. Historically, patterns have been thought of as part of an “up-front design” style of development. Now, we realize they are powerful tools 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. Patterns are far more useful as collection of best practices rather than simply “reusable solutions.”
Participants learn 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 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, developers and teams learn to move a design forward confidently even when there is an expectation that the sand beneath their feet will shift.