Seniorسختی 3 از ۵· در 70٪ مصاحبههای این حوزه پرسیده شده
Dependency Inversion چه فرقی با Dependency Injection دارد؟
☆نشان کردنپاسخ کوتاه
Dependency Inversion یک اصل طراحی است (وابستگی به Abstraction، نه پیادهسازی)؛ Dependency Injection یک تکنیک برای تزریق آن وابستگی از بیرون است — DI ابزاری برای رسیدن به DIP است.
پاسخ کامل
میتوان Dependency Inversion را بدون هیچ Container ای هم رعایت کرد (مثلاً با پاس دادن دستی Interface در سازنده — Poor Man's DI)؛ Dependency Injection معمولاً این کار را با یک Container (مثل IServiceCollection در ASP.NET Core) خودکار میکند.
مثال کد
// اصل (DIP): وابستگی به Interface
class OrderService
{
private readonly IOrderRepository _repo;
public OrderService(IOrderRepository repo) => _repo = repo;
}
// تکنیک (DI): ثبت در Container
services.AddScoped<IOrderRepository, SqlOrderRepository>();
نکته مهم
DIP دربارهٔ جهت وابستگی است (بهسمت Abstraction)؛ DI دربارهٔ نحوهٔ فراهم کردن آن وابستگی است.
اشتباه رایج
❌ یکی دانستن این دو مفهوم در مصاحبه (این یک اشتباه رایج و پرتکرار است).
