In Custom House’s financial system, “money”, “rate”, “currency” and “markup” are among the key concepts that describe the domain. Without explicit modeling, those concepts appear in the code, but only in variable names of primitive types and sometime in method names for operations whose arguments and return types are all primitives.
In this paper we present the experience gained when Custom House development team applied Domain-Driven Design to explicitly model domain fundamental concepts and abstracted them into value objects. Using code snippets, We show how those concepts were discovered, how we refactored the existing code base to apply the value objects, what difference the value objects made and how they evolve over time.
We also report the pitfalls and stumbles during the process, which are not uncommon for projects that undergo ongoing development work. We show that, with all the incompleteness and imperfection, Domain-Driven Design has gradually accepted into real development process, making a crucial and continuous transformation.