DDD.8 – Refactoring toward deeper insight / Breakthrough

The third part of the book starts in chapter 8 and talks about refactoring.

Refactoring towards deeper insight has the objective of having a domain model that closely reflects the domain. This makes the software more in tune with what the domain experts think and to the users current and future needs.

Continue reading “DDD.8 – Refactoring toward deeper insight / Breakthrough”

DDD.7 – Using the language

This chapter is a long example of how  project architecture may evolve.

There aren’t many new concepts approached, nevertheless, in the end of the chapter there are three interesting design patterns mentioned:

  • Anti-corruption layer
  • Enterprise segments
  • Strategy

Continue reading “DDD.7 – Using the language”

DDD.6 – The lifecycle of a domain object

There are three main objects that can control the life-cycle of a domain object:

  • Aggregates: Hold several objects in a root object and can control their creation, manipulation, query and deletion;
  • Factories: Create new objects with a set of data;
  • Repositories: Recreate persisted objects from queried data, possibly delegating the  reconstruction of the actual object instance to a factory.

Continue reading “DDD.6 – The lifecycle of a domain object”

DDD.4 – Isolating the domain

In order to easily identify, understand and manipulate the code that reflects the domain, we need to isolate it from all the support code, the code that allows for user interaction (views, controllers) and the code that allows for data persistence and retrieval.

The most widely used and easy to understand approach is to isolate the code into layers:

  • User interface: Views to interact with the user;
  • Application: Controllers to specify use cases;
  • Domain: Business rules that reflect the model;
  • Infrastructure: Persistence, queues, … ;

Continue reading “DDD.4 – Isolating the domain”

DDD.3 – Binding model and implementation

The implementation design must be easily and accurately mapped to the model, otherwise the model is of little use. Easier said than done though.

Anyway, the process should start by creating a simple but very accurate design of a small part of the domain. This inicial design should then be revisited, improved, incremented and re-factored in order to reflect a bigger set of the domain, in a way more suited to the actual implementation.

Continue reading “DDD.3 – Binding model and implementation”

DDD.2 – Communication and the use of language

As in any activity, fast, easy and clear communication is essential for a good performance.

In a software development project, both domain experts and developers have their own language, with its own jargon and specificities. Both team member types are usually unaware of the others language, so it must be created a common language that everyone can understand without any ambiguity.

Continue reading “DDD.2 – Communication and the use of language”