وارونگی کنترل چیست؟
فهرست مطالب
در برنامه نویسی، گاهی پیش میآید که برنامه نیاز نداشته باشد تمام کنترل را در دست بگیرد. بنابراین از پدیدهای در خود به نام وارونگی کنترل یا Invervion of Control (IoC) استفاده میکند. این به برنامه کمک میکند تا ابزارهای دیگر، کنترل برخی از وظایف را به دست بگیرند و به جای اینکه برنامه به آنها بگوید که چه کاری را انجام دهد، آن ابزارها وظایف مشخص شده را کنترل کنند. این پدیده در زبانهای سطح بالا مانند جاوا اسکریپت، #C و… میتواند رخ دهد.
اصول وارونگی کنترل
در مهندسی نرم افزار، وارونگی کنترل یک مفهوم پایه است که جریان کنترل برنامهها را تغییر میدهد. بهعلاوه، وارونگی کنترل مسئولیت کنترل را از برنامه به یک فریمورک یا کانتینر خارجی منتقل میکند. بنابراین، این تغییر در کنترل به برنامه نویسان امکان میدهد که کدی بنویسند که قابل تفکیکتر و انعطاف پذیرتر باشد.
معمولاً، برنامههای نرم افزاری همیشه دارای یک جریان کنترل سلسله مراتبی بودهاند، جایی که کد اصلی برنامه توالی اجرایی را تعریف میکند. اما با وارونگی کنترل، این جریان کنترل معکوس میشود. به جای اینکه برنامه طریقه انجام کارها را کنترل کند، قابلیت خود را به یک شخص یا اشیای خارجی که معمولاً به عنوان کانتینر IoC شناخته میشوند، واگذار میکند.
اصول وارونگی کنترل نیازمند استفاده از کانتینرهای IoC برای پیاده سازی آن هستند. کانتینرهای IoC مسئولیت ایجاد اشیا و چرخههای عمر در یک برنامه و تزریق وابستگیها را بر عهده دارند. با استفاده از این کانتینرها، توسعه دهندگان میتوانند بدون نیاز به اتصالات دستی، کنترل را معکوس کنند.
مفهوم تزریق وابستگی
تزریق وابستگی یا (DI) Dependency Injection یک تکنیک طراحی نرم افزار است که در برنامه نویسی شیء گرا (OOP) برای فراهم آوری منابع ضروری، که وابستگیها نامیده میشوند، به جای اینکه یک کد از یک منبع خارجی را ایجاد یا پیدا کند، از بخشی از آنها استفاده میکند. این رویکرد، که معمولاً با استفاده از فریمورکهایی مانند Spring پیاده سازی میشود، به ایجاد کد با پیوندی ضعیف و قابل نگهداریتر، کمک میکند؛ زیرا اجازه میدهد که سیستمهای خارجی مدیریت، تخصیص منابع و تعاملات را بر عهده بگیرند. نقشهای کلیدی در تزریق وابستگی شامل خدمات (که عملکردها را فراهم میکنند)، مشتریان (که از خدمات استفاده میکنند)، رابطها (که خدمات و مشتریان را از هم جدا میکنند) و تزریق کنندگان (که خدمات را به مشتریان متصل میکنند)، میباشد. این تکنیک قابلیت استفاده مجدد کد را افزایش میدهد، به اصول SOLID پایبند است و مدیریت وابستگیها را سادهتر میکند.
در برنامه نویسی به صورت مرسوم، ما به این شکل وابستگی اشیا ایجاد میکنیم:
public class Store {
private Item item;
public Store() {
item = new ItemImpl1();
}
}
در مثال بالا، ما باید یک پیاده سازی از رابط Item را درون خود کلاس Store ایجاد کنیم.
با استفاده از تزریق وابستگی (DI)، میتوانیم مثال را بدون مشخص کردن پیاده سازی خاص Item که میخواهیم باز نویسی کنیم:
public class Store {
private Item item;
public Store(Item item) {
this.item = item;
}
}
هر دو IoC و DI مفاهیم سادهای هستند، اما تأثیرات عمیقی در نحوه ساختار دهی سیستمهای ما دارند، بنابراین ارزش دارد که به طور کامل درک شوند.
فریمورکها و کانتینرها
نرم افزارها به راحتی میتوانند با استفاده از فریمورکها و کانتینرهای خاص، وارونگی کنترل را تسهیل کنند. این ابزارها شامل الگوها و مکانیزمهای از پیش تعریف شدهای هستند که به مدیریت وابستگیها، هماهنگی چرخه عمر مؤلفهها و تسهیل ارتباط بین مؤلفهها کمک میکنند.
برخی از نمونهها شامل فریمورک Spring در جاوا، ASP.net Core در .Net و تزریق وابستگی Angular برای TypeScript هستند. با استفاده از یک کانتینر یا فریمورک IoC، توسعه دهندگان میتوانند زمان توسعه و کیفیت کد را افزایش میدهند و در عین حال، برنامههای پایدار و مقیاس پذیری بسازند.
فریمورک Spring
در فریمورک Spring، کانتینر وارونگی کنترل که با رابط ApplicationContext شناخته میشود، مسئول مدیریت اشیا به نام beanها است. این کانتینر به طور خودکار اشیا را ایجاد، پیکربندی و کنترل میکند. به کمک تنظیمات در قالب فایلهای XML یا کدهای خاص، این کانتینر به دنبال نحوه استفاده و تنظیم این اشیا میگردد و وابستگیهای آنها را به طور خودکار تنظیم میکند. با استفاده از Spring، میتوانید این اشیا را از طریق روشهای مختلف مانند سازندهها یا روشهای تنظیم کننده وارد کنید که این کار به مدیریت آسانتر اشیا و ارتباطات آنها کمک میکند.
فریمورک Angular
Angular یک فریمورک قدرتمند برای ساخت رابطهای کاربری پویا در سمت کلاینت (مرورگر) است. با استفاده از Angular، میتوانید بخشهای مختلف برنامه وب خود را که با کاربر تعامل دارند، ایجاد کنید. این ابزار به شما کمک میکند تا عناصر بصری برنامه و رفتارهای تعاملی آن را به طور مؤثر مدیریت کنید که شامل فرمها، دکمهها و نمایش دادهها میشود. Angular برای ساخت برنامههای تک صفحهای (SPA) بسیار مناسب است که در آنها تمام تعاملات کاربر بدون نیاز به بارگذاری مجدد صفحه انجام میشود.
فریمورک ASP.NET Core
ASP.NET Core یک فریمورک مدرن برای ساخت برنامههای وب و سرویسهای وب (API) در سمت سرور است. این ابزار به شما کمک میکند تا برنامههای وب قابل اعتماد و مقیاس پذیر بسازید که میتوانند درخواستهای مختلف را مدیریت کنند. به جای اینکه تمام عملیات برنامه به صورت مستقیم و درون برنامه انجام شوند، ASP.NET Core به شما این امکان را میدهد که از ابزارها و خدمات خارجی برای مدیریت وظایف مختلف استفاده کنید، مثل پردازش دادهها یا امنیت برنامه. این باعث میشود که کد شما سازمان یافتهتر و قابل مدیریتتر باشد.
پویان آی تی، سرورهای مجازی قدرتمند با پشتیبانی کامل از ویندوز و لینوکس را ارائه میدهد. با خدمات باکیفیت، امنیت بالا، و عملکرد بهینه، همراه با پشتیبانی شبانه روزی، اطمینان داریم که نیازهای سروری شما به خوبی برآورده خواهد شد.
وارونگی کنترل در برابر تزریق وابستگی
این دو مفهوم، بسیار با هم رابطه نزدیکی دارند. برای این که بتوانیم بهتر این دو موضوع را درک کنیم، به مقایسه این دو میپردازیم.
-
هدف
هدف از وارونگی کنترل (IoC) و تزریق وابستگی (DI)، افزایش انعطاف پذیری و مدیریت بهتر وابستگیها در سیستمهای نرمافزاری است. این دو الگو به نرم افزار کمک میکنند تا اجزا و ماژولهای مختلف به طور مستقل از هم عمل کنند و تغییرات در یک بخش، بدون نیاز به تغییرات گسترده در سایر بخشها انجام شوند.
-
جدا سازی
این الگوها به جداسازی اجزای مختلف سیستم کمک میکنند. یعنی وابستگیهای مستقیم بین بخشهای کد کاهش یافته و اجزا به جای ایجاد وابستگیهای محکم، از طریق واسطها یا قراردادها با یکدیگر تعامل میکنند. این امر باعث میشود تغییرات در یک جزء، سایر اجزا را تحت تأثیر قرار ندهد و انعطافپذیری و قابلیت نگهداری نرمافزار افزایش یابد.
-
تعریف
تزریق وابستگی یک الگوی طراحی است که به طور خاص بر روی تزریق وابستگیها به اشیا تمرکز دارد، به جای اینکه خود اشیا وابستگیهای خود را ایجاد یا مدیریت کنند. این روش با انتقال وابستگیها از یک منبع خارجی، کد را انعطاف پذیرتر میکند. وارونگی کنترل یک اصل طراحی گستردهتر است که شامل واگذاری کنترل ایجاد اشیا و مدیریت وابستگیها به یک فریمورک یا کانتینر خارجی میباشد، به جای اینکه اجزاء خود این جنبهها را مدیریت کنند.
-
دامنه
DI یک تکنیک خاص در فریمورک IoC است که به طور خاص به نحوه تأمین وابستگیها برای اشیا، چه در زمان اجرا و چه در زمان کامپایل، میپردازد. IoC یک اصل کلی است که شامل تکنیکهای مختلف (مانند DI) برای مدیریت جریان کنترل و وابستگیها در یک سیستم میباشد. DI تنها یکی از روشهای پیاده سازی IoC است.
-
کاربرد
تزریق وابستگی از طریق الگوها و مکانیزمهای خاص، مانند تزریق سازنده یا تزریق یک روش خاص، پیاده سازی میشود. این روش به طور مستقیم تأمین وابستگیها برای اشیا را مدیریت میکند. وارونگی کنترل شامل دامنه وسیعتری از روشها و فریمورکها برای وارونه کردن کنترل، از جمله DI، و همچنین استراتژیهای دیگر مانند مکان یابهای خدمات یا مدلهای مبتنی بر رویداد است.
-
نقش در فریمورکها
DI معمولاً در فریمورکهایی مانند Spring برای مدیریت و تأمین وابستگیها به اشیا به صورت انعطاف پذیر و قابل نگهداری استفاده میشود. IoC به اصل کلی اشاره دارد که توسط فریمورکها (از جمله آنهایی که DI را پیاده سازی میکنند) برای مدیریت ایجاد اشیا و چرخه طول عمر آنها استفاده میشود و رویکردی انتزاعیتر برای مدیریت کنترل در یک سیستم ارائه میدهد.
به طور خلاصه در این جدول، رابطه IoC و DI را توضیح دادیم.
ویژگی | وارونگی کنترل | تزریق وابستگی |
---|---|---|
تعریف | اصل طراحی که مدیریت اشیا و وابستگیها را به فریمورک یا کانتینر واگذار میکند. | الگوی طراحی برای تأمین وابستگیها از منبع خارجی به اشیا |
هدف | افزایش انعطاف پذیری و مقیاس پذیری سیستم | کاهش وابستگیهای کد و بهبود انعطاف پذیری کد |
دامنه | شامل تکنیکهای مختلف برای معکوس کردن کنترل | تکنیک خاص برای تأمین وابستگیها |
کاربرد | استفاده از فریمورکها برای مدیریت کلی سیستم | پیاده سازی در فریمورکها برای تأمین وابستگیها |
نقش در فریمورکها | مدیریت و ایجاد و چرخه عمر اشیا | بخشی از وارونگی کنترل برای مدیریت وابستگیها |
و در آخر
وارونگی کنترل (IoC) یک اصل طراحی مهم در مهندسی نرم افزار است که به معنای واگذاری مدیریت وابستگیها و کنترل جریان برنامه از خود کد به یک ساختار خارجی است. این اصل باعث میشود که برنامهها انعطاف پذیرتر، قابل نگهداریتر و مقیاس پذیرتر شوند. تزریق وابستگی (DI) یک تکنیک خاص برای پیاده سازی IoC است که در آن وابستگیهای مورد نیاز اشیا از منابع خارجی به آنها تزریق میشود، به جای اینکه اشیا خودشان این وابستگیها را ایجاد یا مدیریت کنند. این روش باعث کاهش وابستگیهای سخت افزاری بین اجزاء و افزایش قابلیت تست و نگهداری کد میشود. IoC و DI هر دو به بهبود ساختار و کارایی نرم افزار کمک میکنند و اجرای تغییرات را آسانتر میسازند.
سؤالات متداول
هدف اصلی از استفاده از وارونگی کنترل چیست؟
هدف اصلی وارونگی کنترل این است که کنترل مدیریت اشیا و وابستگیها از کد اصلی به یک فریمورک یا کانتینر خارجی واگذار شود تا انعطاف پذیری کد افزایش یابد.
آیا استفاده از وارونگی کنترل فایدهای دارد؟
با IoC، اجزا میتوانند به طور مستقل توسعه و آزمایش شوند، که این امر باعث آسانتر شدن عیب یابی و سادهتر شدن تغییر وابستگیهای خاص بدون نیاز به تغییر کل برنامه میشود.
منابع
- https://www.baeldung.com/cs/ioc
- https://mominjahid.medium.com/difference-between-dependency-injection-and-inversion-of-control-1910299fb695
به این مقاله امتیاز دهید!
میانگین امتیاز 5 / 5. تعداد رأی ها : 4
هنوز هیچ رأیی داده نشده. اولین نفر باشید!
اولین دیدگاه را اضافه کنید.