TGViewer
| AmirHossein | | AmirHossein | @amirhdeveloper · 610 subscribers
Post #74 166
#design_patterns
دیزاین پترن Repository یکی از الگوهای معماری مورد استفاده در توسعه نرم‌افزار است که به عنوان واسطی بین بخش‌های داده‌ی دائمی (مثل دیتابیس) و بخش‌های کد برنامه مورد استفاده قرار می‌گیرد. هدف اصلی این دیزاین پترن، جداسازی لایه‌های داده از لایه‌های برنامه‌نویسی و ایجاد یک واسط یکسان برای دسترسی و مدیریت داده‌ها می باشد.

فرض کنید که شما در حال توسعه یک برنامه‌ی وب برای مدیریت اطلاعات کاربران هستید. اطلاعات کاربران (مانند نام، ایمیل، رمزعبور و ...) در یک پایگاه داده‌ی رابطه‌ای (مثل MySQL) ذخیره می‌شود. به جای اینکه در کد برنامه‌ی خود مستقیماً با پایگاه داده ارتباط برقرار کنید، از دیزاین پترن Repository استفاده می‌کنیم.

مثال :

ابتدا یک Interface برای Repository تعریف می‌کنیم که متد‌هایی برای ایجاد (create)، خواندن (read)، بروزرسانی (update) و حذف (delete) اطلاعات کاربران داشته باشد.
interface UserRepositoryInterface {
public function create(array $data): bool;
public function read(int $id): array;
public function update(int $id, array $data): bool;
public function delete(int $id): bool;
}

حالا یک کلاس برای Repository برای دیتابیس MySQL ایجاد می‌کنیم و متدهای Interface را پیاده‌سازی می‌کنیم.
class MySQLUserRepository implements UserRepositoryInterface {
private $connection;

public function __construct(mysqli $connection) {
$this->connection = $connection;
}

public function create(array $data): bool {
// Code to create user
return true;
}

public function read(int $id): array {
// Code to select user by id
$data = ['userDataFromDb'];
return $data;
}

public function update(int $id, array $data): bool {
// Code to update user
return true;
}

public function delete(int $id): bool {
// Code to delete user
return true;
}
}

حالا می‌توانیم در برنامه‌ی خود از Repository استفاده کنیم.
// create connection and repository
$connection = new mysqli("localhost", "username", "password", "database_name");
$userRepository = new MySQLUserRepository($connection);

// create new user
$newUser = [
'name' => 'John Doe',
'email' => 'john@example.com',
'password' => 'hashed_password'
];
$userRepository->create($newUser);

// select user by id
$userData = $userRepository->read(1);
print_r($userData);

// update user by id
$updatedUser = [
'name' => 'Jane Doe',
'email' => 'jane@example.com',
'password' => 'new_hashed_password'
];
$userRepository->update(1, $updatedUser);

// delete user
$userRepository->delete(1);

در این مثال، با استفاده از اینترفیس UserRepositoryInterface، وابستگی‌های کد به پایگاه داده جدا می‌شود. سپس با پیاده‌سازی کلاس MySQLUserRepository، کار با پایگاه داده‌ی MySQL به صورت مستقیم در Repository انجام می‌شود. این جداسازی باعث می‌شود تا می‌توانیم با تغییر پایگاه داده، کد برنامه‌ی خود را به راحتی تغییر داده و با اطمینان از عملکرد درست نرم‌افزار خود مطمئن شویم. همچنین، این کار باعث می‌شود که مدیریت داده‌ها و دسترسی به آن‌ها به صورت مجزا و قابل مدیریت‌تری صورت گیرد.
.
  • 👍 1
More from @amirhdeveloper
  1. Oct 7, 2026بیاید از قدرت های لاراگرام بگم لاراگرام یک full-stack و ai-ready فریمورک برای توسعه ربات ه…
  2. Sep 30, 2026پکیج LaraGram Sentinel منتشر شد؛ یک پنل مانیتورینگ که هیچ چیزی از زیر دستش در نمی‌ره! تمام…
  3. Sep 23, 2026از امروز با کاهش شدید حاکرها مواجه میشیم
  4. Sep 19, 2026🔴 سوال سوم دو Region دارید: US-East و EU-West. کاربران در هر دو Region هستند. سیستم باید…
  5. Sep 19, 2026🟠 سوال دوم فرض کنید Service A به Service B درخواست می‌زند. B به‌دلیل overload، latency با…
  6. Sep 19, 2026🟢 سوال اول فرض کنید یک سرویس backend داریم که به PostgreSQL وصل می‌شود. تعداد requestها ن…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →