Refactoring techniques and Design Patterns have been extensively propagated and advocated for over a decade now. Why we still find hard to change, anaemic or overly complex object oriented structures? What is missing in our design practices?

In this series, we use Fowler’s didactic Video Store program to show practical advanced refactoring strategies that effectively improve design simplicity, expressiveness and flexibility.

The term “requirements” has its roots on cartesian and bureaucratic thinking, that supposes a static and impersonal business world where specialists would be able to uncover, extract and document the definitive specifications for software systems.

This post resumes the Revisiting Fowler’s Video Store series. After making the relevant domain concepts explicit, we focus our refactoring process on another aspect of domain semantics, studying contextual variance under the perspective of the following issues:
1. The Passage of Time;
2. Changes in the Video Classification;
3. Changes in Rental Prices and Terms.

In this post, we bring the domain semantics to our refactoring process. We want a deeper perspective to analyse modularity problems and to direct improvements towards greater relevance to our design objectives.