Table of Contents
تزریق وابستگی (DI) یک الگوی طراحی است که به ماژول های نرم افزاری کمک می کند تا قابل آزمایش تر، انعطاف پذیر و قابل نگهداری باشند، این شامل ارائه یک ماژول با وابستگی های آن از خارج به جای ایجاد یا پیدا کردن خود آن است.این رویکرد تست را ساده می کند زیرا وابستگی ها می توانند به راحتی با اشیاء یا اسکره های مسخره جایگزین شوند.
تزریق وابستگی چیست؟
تزریق وابستگی یک تکنیک است که در آن یک شی وابستگی های خود را از طریق ساخت کنندگان، تنظیم کنندگان و یا روش های رابط دریافت می کند، به جای وابستگی های سخت، ماژول ها برای پذیرش منابع خارجی طراحی شده اند، و آنها را کمتر به شدت متصل می کند.
مزایای استفاده از Dependency injection
- قابلیت تست بهبود یافته: بسته بندی را می توان با اشیاء مسخره جایگزین کرد، و تست های واحد را آسان تر و قابل اعتماد تر می کند.
- انعطاف پذیری: [FLT 1] تغییر وابستگی نیاز به تغییر ماژول وابسته ندارد.
- سازمان کد بهتر: جدایی از نگرانی ها و معماری تمیز کننده را ترویج می کند.
اجرای Dependency injection
راه های مختلفی برای پیاده سازی DI وجود دارد:
- [[۱] [۱۰] تزریق ساختارمند؛ [۱۰] [۱۰] [۱] [۱] [۱] [۱] [۱] [۱] [۱]] [۱] [۱] [۱] [۱] [۱]] [۱] [۱] [۱] [۱] [۱] [۱] [۱] [۱] [۱] [۱] [۱] [۱] [۱] [۱] [۱] [۱] [۱] [۵] [۱] [۱] [۱] [۱] [۱] [۱] [۱] [۱] [۱] [۱] [۱] [۱] [۱] [۱] [۱] [۱] [۱] [۱] [۱] [۱] [۱] [۱] [۱] [۱] [۱] [۱] [۱] [۱] [۱] [۱] [۱] [۱] [۱] [۱] [۱] [۱] [۱] [۱] [۱] [۱] [۳] [۱] [۱] [۱] [۳] [۱] [۱] [۱] [۱]
- [[۱] [۱۰] [۱] [۱۰] [۱] [۱۰] [۱]] [۱]] [۱] [۱]] [۱]] [۱]] [۱] [۱] [۱۰] [۱]] [۱] [۱] [۱]] [۱] [۱] [۱] [۱] [۱] [۱] [۱] [۱] [۱] [۱] [۱] [۱] [۱] [۱] [۱] [۱] [۱] [۱] [۱] [۱] [۱] [۱] [۱] [۱] [۱] [۱]]]] [۱]]]]] [۱] [۱] [۱] [۱] [۱] [۱] [۱] [۱] [۱] [۱] [۱] [۱] [۱] [۱] [۱] [۱] [۱] [۱] [۱] [۱] [۱] [۱] [۱] [۱] [۱] [۱] [۱] [۱] [۱]]] [۱] [۱] [۱] [۱] [۱
- تزریق صورت: وابستگی ها از طریق روش های رابط ارائه می شود.
نمونه ای از تزریق وابستگی در عمل
یک مثال ساده را در نظر بگیرید که در آن یک سرویس (FLT:0) پایگاه داده به یک اتصال (FLT:2 DatabaseConnection با استفاده از DI، اتصال به سرویس تزریق می شود:
class DatabaseConnection {
public function connect() {
// Connection logic
}
}
class DatabaseService {
private $connection;
public function __construct(DatabaseConnection $connection) {
$this->connection = $connection;
}
public function fetchData() {
$this->connection->connect();
// Fetch data logic
}
}
// Injecting dependency
$connection = new DatabaseConnection();
$service = new DatabaseService($connection);
در طول آزمایش، می توانید جایگزین (FLT:0) کانبرک اتصال با یک شی ساختگی برای جدا کردن پایگاه داده از عملیات پایگاه داده واقعی.
نتیجه گیری
استفاده از الگوی تزریق وابستگی، قابلیت تست ماژول های نرم افزاری را با تجزیه آنها از وابستگی های آنها افزایش می دهد.این عمل منجر به کد بیشتر، انعطاف پذیر و قوی، به ویژه در برنامه های پیچیده است.