اصل Dependency Inversion چیست؟
در سري پست هاي تعريف اصول SOLID با اصل Single Responsibility اصل Open Closed اصل Liskov Substitution اصل Interface segregation آشنا شديم در اين پست پنجمین اصل يعني Dependency inversion رو برسي ميكنيم. هدف Dependency inversion اینه که کلاس های سطح بالا نبایستی به صورت مستقیم وابسته به کلاس های سطح پایین باشن بلکه رابطه ی بین کلاس ها بایستی براساس Abstract ها یا Interface ها باشه. بعنوان مثال اگه کلاس سطح بالای سیستم رو business logic بدونیم و این سطح وابسته به جزئیات سطح پایین مثلا ذخیره در بانک اطلاعاتی باشه استفاده مجدد از کلاس های business logic مارو کم میکنه انجام تست روی کلاس های business logic ما سخت میشه عکس زیر برگرفته از کتاب Dependency Injection in .NET هست که Dependency Injection (الگويي براي رعايت اين اصل) رو بخوبی توضیح داده مدير يك هتل ارزان قيمت براي اينكه سشوار دزيده نشه اونو به پريز بسته و اين يعني وابستگي بين سشوار و پريز تغيير در هركدوم ;ديگري رو تحت تاثير قرار ميده. و اما براي مثال عملي فرض كنيد کلاسی بنام GetMessageFro