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 را هم بشناسید.
اصطلاحات مرتبط: الوکوئنت، نگاشت آبجکت-رابطهای، ریپازیتوری پترن، جنگو، انتیتی فریمورک کور، اسکیوالالکمی.