terminal

codeando_simple

terminal

menu

terminal

search_module

guest@codeandosimple: ~/system/search $ grep -r "" .

Press [ENTER] to execute search

Status

Engine: Ready

Database: Online

Index: V2.1.0_LATEST

bash -- cat active-record.md
guest@codeandosimple: ~/enterprise/patterns $ cat active-record.md

Active Record_

// "It's not that I'm so smart, it's just that I stay with problems longer" - Albert Einstein

Active Record is a design pattern in which objects in an application encapsulate both data (state) and behavior (methods for querying, inserting, updating, and deleting) associated with that data.

Each instance of an Active Record represents a row in a database table. Attributes represent the fields of the row, and it has methods to perform database operations directly.

# When to use it?

This pattern is suitable for applications with a simple domain model, where there is similarity between the database structure and the application's business rules.

It is ideal for situations where rapid and straightforward development is desired, with CRUD operations (create, read, update, delete) that map clearly between application objects and database tables.

# Pros

  • verified

    Simplicity

    Facilitates rapid development by reducing the amount of code needed to interact with the database.

  • verified

    Ease of Use

    By integrating data access logic within model objects, it makes working with that data intuitive.

  • verified

    Efficiency in Simple Applications

    For applications with business logic that maps directly to data structures, Active Record can be a very efficient solution.

# Cons

  • warning

    Violation of Responsibilities

    Mixes business logic with data access, making objects less cohesive.

  • warning

    Scalability

    As the application grows, it can become less practical, leading to overloaded "fat" objects.

  • warning

    Testing Difficulties

    Testing objects that integrate data access with business logic can be more complex.

# Detailed Example in Java

Consider a Person class that follows the Active Record pattern to manage people in a database:

Person.java

public class Person {
    private int id;
    private String name;
    private String email;
    // Assume a database connection exists

    public Person(String name, String email) {
        this.name = name;
        this.email = email;
    }

    public boolean save() {
        // Inserts or updates the person in the database
    }

    public static Person findById(int id) {
        // Searches and returns a Person instance by ID
    }

    public boolean delete() {
        // Deletes the person from the database
    }

    // Getters and setters...
}

# Conclusions

The Active Record pattern provides a direct and simple way to link business logic with data access, ideal for rapid prototyping and applications with simple domain models.

However, as applications grow in complexity, it can be beneficial to move to more advanced patterns that offer better separation of concerns, such as the Data Mapper, to keep the code organized, maintainable, and scalable.