دانستنی‌ها

مفهوم Inversion of Control و Dependency Injection در Spring( جشنواره عید تا عید)

این مقاله از طرف جناب آقای یوسف رستمی برای جشنواره عید تا عید جاواکاپ ارسال شده است و محتوای این مطلب لزوماً موردتأیید جاواکاپ نیست. لطفاً با مطالعه، بازنشر و امتیازدهی به این مطلب، به انتخاب برترین مقاله در این جشنواره کمک نمایید.)

Spring یک فریم ورک متن باز است که هدف اصلی آن ساده سازی و رفع پیچیدگی های نسخه سازمانی جاواست. این فریم ورک به صورت ماژولار پیاده سازی شده است و ماژول اصلی یک IoC Container است که به آن  Spring Core Container گفته می شود.

در واژگان فنی مهندسی نرم افزار Container (محفظه) به جزیی از برنامه گفته می شود که می تواند اجزای دیگر برنامه در بر بگیرد. IoC Container به Containerی گفته می شود که Inversion of Control (IoC) را پیاده سازی کرده باشد.

Inversion of Control (وارونگی کنترل) یک تکنیک برنامه نویسی است که از آن برای کاهش وابستگی بین اجزای برنامه استفاده می شود. برای درک بهتر مثال زیر را در نظر بگیرید.

a

داخل هر شی از کلاس Car یک شی از کلاس Vehicle وجود دارد یا به عبارت دیگر شی کلاس Car به یک شی از کلاس Vehicle وابسته است. این وابستگی با مقدار دهی با عملگر new رفع شده است. اما در تکنیک Inversion of Control این مقدار دهی توسط خود کلاس Car انجام نمی شود بلکه در زمان اجرا توسط جز دیگری از برنامه انجام می شود. به تصویر زیر دقت کنید.

b

در این برنامه برای ایجاد یک شی Car ابتدا یک شی Vehicle توسط IoC Container ساخته شده و سپس به کلاس Car داده می شود تا شی Car ساخته شود.

با پیاده سازی Inversion of Control، کلاس Car دیگر نیازی به دانستن نحوه ی مقدار دهی و ایجاد شی vehicle را ندارد و با تغییر در کلاس Vehicle تغییری در کلاس Car ایجاد نخواهد شد و این یعنی وابستگی بین کلاس های Car و Vehicle کاهش یافته است.

کاهش وابستگی بین اجزای برنامه مزیت هایی را در بر دارد که می توان به موارد زیر اشاره کرد.

  • افزایش قابلیت تست
  • افزایش خوانایی کد برنامه
  • افزایش قابلیت باز استفاده اجزای برنامه
  • افزایش قابلیت نگهداری برنامه

گاهی Inversion of Control مساوی با Dependency Injection (DI) (تزریق وابستگی) در نظر گرفته می شود در حالی که Inversion of Control یک مفهوم کلی در طراحی نرم افزار است ولی Dependency Injection یک الگوی طراحی عینی و یکی از راه های پیاده سازی Inversion of Control است.

در فریم ورک Spring مفهوم Inversion of Control با استفاده از الگوی طراحی Dependency Injection پیاده سازی شده است به این صورت که وابستگی ها به دو روش از طریق آرگومان های متد سازنده و آرگومان های متد های Setter فراهم می شود.

به طور کلی Dependency Injection در فریم ورک Spring بدین صورت است که وابستگی ها توسط توسعه دهنده در یک فایل XML یا یک کلاس جاوا تشریح می شوند و Container برنامه، وابستگی های تشریح شده در این فایل ها را برای اجزای مختلف برنامه در هنگام اجرا فراهم می کند.

نتیجه گیری

Inversion of Control در فریم ورک Spring به طور ساده یعنی واگذار کردن کنترل وابستگی های یک لایه یا قطعه از برنامه به محفظه نگهدارنده برنامه در زمان اجرا. واگذار کردن کنترل وابستگی ها به منظور کم کردن اهمیت جزئیات پیاده سازی وابستگی هاست. افزایش قابلیت باز استفاده و راحتی آزمایش قطعات برنامه از ویژگی های Inversion of Control است. مفهوم Inversion of Control در فریم ورک Spring با استفاده از الگوی طراحی Dependency Injection پیاده سازی شده است.

نوشته های مشابه

‫2 دیدگاه ها

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

دکمه بازگشت به بالا