ESSAY

Recursive design is a precedecessor for DDD, isn't it?

Artem Danko
2023
  • Introduction
  • Recusive design
  • What is DDD
  • Comparer
  • Conclusion
  • Links

There are a lot of different methodologies in the modern software development world. Some of them are young and controversial, some of them are time-tested but some of them are forgotten. In different spaces we can see specialized methodologies like development methodology, deployment methodology or testing methodology. Now, we will discuss common design methodology. DDD is one of the most famous methodologies and widely used presently. So, there are a lot of usages and a log of researching, articles and so on. But before starting to use it we should search for roots and define predecessors. It helps us to better understand the sources and inner knowledge of this approach.

So we can acknowledge the importance of recursive design as a predecessor, or perhaps a foundational concept, to DDD. Recursive design defines fundamental principles that underpin DDD. Let's look at these facts closer and understand, is recursive design really the precursor for Domain Driven Design.

First of all we should understand what Recursive design looks like and what principles is it based on. Recursive design is a philosophy that highlights the interconnectedness of components within a system. This approach allows consideration not only of the individual parts of the software but also relationships and dependencies between parts. It also involves iterative processes where participants continuously improve the design, taking into account the feedback loop generated by real-world usage and environmental changes. As a result, the system becomes flexible, and evolving in time. Also a complex splitted by components became much easier to develop and expand.

How it works

Let's look at the recursive design process closely. Developers start by defining the core entities and relationships. This defines building a foundation that can adapt to evolving requirements. By this, we got a system that embodies the real-world complexities it addresses. Taking in mind the feedback loop generated by the real-world, we got an evolving understanding of the domain.

The Domain Driven Design methodology introduced in 2003 by Eric Evans in his seminal book, “Domain-Driven Design: Tackling Complexity in the Heart of Software.”. DDD is focused on importance of understanding and modeling the problem domain at the base of the system. It encourages participants of processes to create a shared understanding of the domain and build a common language to express the domain concepts. So, all stakeholders should talk using a “common language” and understand each other.

One of the central principles of DDD is the concept of aggregates, which are clusters of related entities and value objects that ensure consistency and integrity within the domain. Aggregates are a fundamental building block in DDD, akin to the core entities in recursive design. The primary goal of DDD is to create a model that accurately represents the domain's complexity, much like the recursive design's goal of building a system that embodies the real-world complexities it addresses.

One of the central principles of DDD is the concept of aggregates, which are clusters of related entities and value objects that ensure consistency and integrity within the domain. Aggregates are a fundamental building block. The primary goal of DDD is to create a model that accurately represents the domain's complexity. This methodology also includes a feedback loop, so we can say that it allows us to develop the model over time.

Now, looking at the previous two parts, let's try to find a common part of both of these methodologies. First of all, Recursive design lays the groundwork for DDD. DDD's emphasis on modeling the domain's complexity and its relationships is the evolution of the process of identifying core entities, defining relationships, and iterating on the design. So, this process in DDD is mostly equal to Recursive process.

Then, the concept of feedback loops is critical in both methodologies. In DDD, the feedback loop between the domain experts and developers helps refine the model over time, aligning it with the evolving understanding of the domain. In recursive design, feedback from users and changing requirements drives iterative improvements. Iterative and adaptive nature of recursive design can be applied to DDD's iterative modeling process. Splitting the domain by parts allows DDD to effectively solve complexity.

We can see that this idea of both approaches are so close and give effective results and flexible solutions.

Recursive design can be viewed as a predecessor or foundational concept to Domain-Driven Design. It shares common principles like the principle of emphasizing interconnectedness, iterative design, and feedback loops. All of these are central to DDD too. So, by increasing the complexity of the project the design starts a smooth transition to DDD. In this sense, recursive design serves as a precursor to DDD. IT allows us to solve different complex domains effectively.

In my opinion, the recursive design is very appropriate in the start of a complex project as it helps to split the domain area, reduce complexity and helps to evolve the system step by step. DDD is better for large projects with large amounts of money and persons, when complexity is very high. In the modern world, most projects use DDD.