Understanding the Difference between Active Record and Data Mapper with a Cooking Analogy (and no coding)
Tags: development, database, beginners, learning
Published: 2023-12-10 22:46:20

## Introduction

Understanding the differences between Active Record and Data Mapper patterns isn't easy. 
They're both design patterns commonly used in software development to interact with database. They both have pros and cons, making them suitable for different scenarios. And guess what? They're both cool!

As a development student, later as a developer myself, and then as a Teacher Assistant, I struggled to grasp these differences clearly. Articles and developers often explained them using technical jargon, making it challenging for me to find the right analogy to explain them in a simply way to my development students.

I think I found it, so I'd like to share it with you, as some 'non-tech' explanations, so that the light :bulb: can come to you too. You'll tell me :wink:

I hope this will help :hugs:

## Advice

To fully grasp and appreciate this cooking analogy, it's recommended that you have some prior knowledge or practical experience with both the Active Record and Data Mapper patterns. 
While I won't dive into code in this discussion, having a basic understanding of these patterns will enhance your ability to relate the culinary comparisons to their software development counterparts.

## Context

I won't explain what Active Record and Data Mapper are since my purpose is to help you visualize the difference between the two.
To anchor our analogy in the world of code, let's consider the backdrop of a Model-View-Controller (MVC) architecture, a common structure used in software development. 
Every time my students doesn't wrap around a concept, I try to make a cooking analogy.
So... let's go cooking !

## Let's cook with the two patterns!

Active Record and Data Mapper can help cooking the same delicious meals.

### Active Record: the Cooking Robot

Active Record is like a cooking robot where you put all the ingredients inside, select a program, and the robot takes care of the entire cooking process. 
The robot knows how to handle both the ingredients (data) and the cooking process (database operations) to create a delicious meal. 

There are many cooking robots, for each kind of dish (database table) : soup, pastry, ice cream...
As a developer, you'll create one "cooking robot" for each table of the database and you'll give instructions for awaiting datas and methods to "cook".

### Data Mapper : the Recipes

Data Mapper is like having a recipe book or folder. You have predefined instructions on how to prepare ingredients (data) and how to cook them (database operations) to create the same delicious meal. You just have to follow the guidelines!

You can write your recipes on sheets of paper, or on a book... You can store it wherever you want (unless you know where to find it :wink:) You're quite free !
As a developer, you can deal with data and methods to interact with database the way you want: you can separate them and organize the way you want !

## Pros and Cons of Those "Cooking" Patterns

**Active Record is like an all-in-one solution:**

➕ : You don't have to worry; you'll always find your cooking robot ready to cook for you in one place (one model per table), "no more dishes to wash". Super easy to use!

➖ : There is not much room for changes or improvisation. Your robot is waiting for specific ingredients; it will cook them as it knows. If a meal is attached to a specific type of dish or has to be prepared in a specific container, you won't have a choice: you have to follow the instructions (it's for your own good if you want your delicious meal).
➖ : If you decide to cook with gas instead of electricity (changing the type of database), you may have to program a new robot!
➖ : Also, if you decide to change the cooking container (modify the database structure), it can be a significant task. You might need to reprogram the entire cooking robot to fit the new container, making it less flexible with different database structures.

**Data Mapper is the flexible solution:**

➕ : You really choose the way you organize your recipes! You like to have files in a box? You prefer a folder containing pieces of sheets, or maybe write in a notebook. No problem. You can deal with it! Maybe you want to organize your recipes in alphabetical order, or by the type of dish, or related to events, or by ingredients... Imagination is the limit! 
➕ : If you have to cook one recipe with gas instead of electricity (changing the type of database), you'll just have to change the cooking instructions in your recipes, not the ingredients and the rest of the instructions. 
➕ : You may even decide to use a different container (representing a different database) for cooking, offering additional flexibility.

➖ : If you're not very organized, it might be difficult to find that recipe you're looking for 😅.
➖ : Think about future : if you're having a few recipes for now, it might be a great book one day. You'd better anticipate !

## Conclusion

I hope these culinary comparisons have helped you better understand the differences between Active Record and Data Mapper patterns!

Your feedback is valuable. If you found this explanation helpful, or if you have suggestions for improvement, please let me know! :wink: