Free Seminars and other Free Events

Emergent Design: Evolving Systems with High Efficiency and Low Risk

The two approaches of creating quality, high-level, up-front designs with design patterns or relying on Test-Driven-Development (TDD) using refactoring as espoused by XP at first seem opposed to each other. This seminar illustrates why design patterns, TDD and refactoring are actually based on the same principles.

With the recent interest in Agility (a la eXtreme Programming), many people are learning the importance of refactoring. According to Martin Fowler:

"Refactoring is the process of changing a software system in such a way that it does not alter the external behavior of the code yet improves its internal structure. It is a disciplined way to clean up code that minimizes the chances of introducing bugs. In essence when you refactor you are improving the design of the code after it has been written."

Although these techniques are powerful, they can be made even more useful when complemented with the lessons learned from design patterns. Refactoring actually comes in two flavors: 1) improving poor code, 2) a method to turn good code into better code when requirements change. This second technique (we prefer to call it “refining your design”) enables software to retain its vibrancy and is essential to resolve the seeming dilemma above.

This talk contrasts and compares 6 different design techniques:

  1. standard object-oriented design
  2. test-driven development
  3. pattern oriented design
  4. refactoring from poor designs
  5. commonality variability
  6. designs based on code qualities (proper coupling, strong cohesion, …)

Understanding these approaches enhances agile methods considerably. It allows for blending the best design techniques for the situation at hand.

Learn:

  • what refactoring is
  • how to implement the strategy and bridge pattern
  • the importance of loose coupling, strong cohesion and no redundancy and more
  • the relationship between testing and code quality

Course Level

Beginner

Who is this course for

This seminar is intended for object-oriented developers.