تخطَّ إلى المحتوى

نمط المستودع في XOOPS

2.5.x ✅ 4.0.x ✅

نمط المستودع هو نمط وصول البيانات الذي يجرد عمليات قاعدة البيانات، مما يوفر واجهة نظيفة للوصول للبيانات. يعمل كوسيط بين طبقة منطق الأعمال وطبقة رسم خريطة البيانات.

نمط المستودع يوفر:

  • تجريد تفاصيل تنفيذ قاعدة البيانات
  • محاكاة سهلة لاختبار الوحدة
  • منطق وصول البيانات المركزي
  • المرونة في تغيير قاعدة البيانات دون التأثير على منطق الأعمال
  • إعادة استخدام منطق الوصول للبيانات في جميع أنحاء التطبيق

متى يتم استخدام المستودعات

Section titled “متى يتم استخدام المستودعات”

استخدم المستودعات عندما:

  • نقل البيانات بين طبقات التطبيق
  • الحاجة لتغيير تنفيذ قاعدة البيانات
  • كتابة كود قابل للاختبار مع أشياء وهمية
  • تجريد أنماط الوصول للبيانات
<?php
// تحديد واجهة المستودع
interface UserRepositoryInterface
{
public function find($id);
public function findAll($limit = null, $offset = 0);
public function findBy(array $criteria);
public function save($entity);
public function update($id, $entity);
public function delete($id);
}
// تنفيذ المستودع
class UserRepository implements UserRepositoryInterface
{
private $db;
public function __construct($connection)
{
$this->db = $connection;
}
public function find($id)
{
// التنفيذ
}
public function save($entity)
{
// التنفيذ
}
}
?>
<?php
class UserService
{
private $userRepository;
public function __construct(UserRepositoryInterface $userRepository)
{
$this->userRepository = $userRepository;
}
public function registerUser($username, $email, $password)
{
// التحقق من وجود المستخدم
if ($this->userRepository->findByUsername($username)) {
throw new \InvalidArgumentException('Username exists');
}
// إنشاء مستخدم
$user = new User();
$user->setUsername($username);
$user->setEmail($email);
$user->setPassword($password);
return $this->userRepository->save($user);
}
}
?>
  • استخدم الواجهات لتحديد عقود المستودع
  • كل مستودع يتعامل مع نوع واحد من الكيانات
  • احتفظ بمنطق الأعمال في الخدمات وليس في المستودعات
  • استخدم كائنات الكيان لرسم خريطة البيانات
  • ارم استثناءات مناسبة للعمليات غير الصحيحة

انظر أيضاً:


الوسوم: #repository-pattern #data-access #design-patterns #module-development