Active Record یا اکتیو رکورد یک الگوی نگاشت داده است که در آن آبجکت مدل معمولاً نماینده یک ردیف جدول است و خودش متدهایی برای خواندن، ساخت یا ذخیره داده دارد. الوکوئنت لاراول و مدل‌های Rails از نمونه‌های شناخته‌شده هستند.

پیاده‌سازی در لاراول

use Illuminate\Database\Eloquent\Model;
class Product extends Model {
    protected $fillable = ['name', 'price'];
}
$product = Product::findOrFail(42);
$product->price = 350_000;
$product->save();

در Ruby on Rails

class Product < ApplicationRecord
  validates :name, presence: true
end
product = Product.find(42)
product.update!(price: 350_000)

در پایتون با Django

from django.db import models
class Product(models.Model):
    name = models.CharField(max_length=120)
    price = models.IntegerField()
product = Product.objects.get(pk=42)
product.price = 350_000
product.save()

تفاوت با SQLAlchemy و EF Core

در Python با SQLAlchemy، آبجکت مدل معمولاً از طریق Session و در C# با EF Core از طریق DbContext مدیریت و ذخیره می‌شود. این الگوها از نظر تجربه توسعه شبیه کار با آبجکت‌اند، اما دقیقاً Active Record کلاسیک نیستند.

// EF Core uses DbContext; Product does not call Save() itself.
var product = await db.Products.FindAsync(42);
product!.Price = 350000;
await db.SaveChangesAsync();
// GORM uses a DB handle rather than a model-level Save method.
var product Product
db.First(&product, 42)
product.Price = 350000
db.Save(&product)

مسئولیت مدل

قرار دادن تمام منطق پرداخت، ارسال پیام و قوانین کسب‌وکار در Active Record می‌تواند مدل متورم ایجاد کند. برای دامنه‌های پیچیده الگوی Domain Model و Repository را هم بشناسید.

اصطلاحات مرتبط: الوکوئنت، نگاشت آبجکت-رابطه‌ای، ریپازیتوری پترن، جنگو، انتیتی فریم‌ورک کور، اس‌کیوال‌الکمی.