آشنایی با تزریق وابستگی

سلام
امروز قصد داریم با یکی از مفاهیم مهم و بسیار بسیار کاربردی در برنامه نویسی شی گرا آشنا بشویم به نام Dependency Injection یا تزریق وابستگی.

تزریق وابستگی چیست؟

خب به شکل ساده عرض کنم که تزریق وابستگی وظیفه ساختن اشیا و توزیع اونها به کلاسهای وابسته را عهده دار هست.
در واقع تزریق وابستگی مثل Vending Machines یا ماشینهای فروش کار میکند که حتما در مکانهایی مثل ایستگاههای مترو دیده اید. برای مثال در این دستگاه ها انواع آبمیوه ها تعبیه شده و شما با مراجعه به دستگاه و پرداخت مبلغ، حق انتخاب از بین محصولات داخل دستگاه خواهید داشت.
برای تزریق وابستگی ما به یک Container یا ظرف نیاز داریم که اطلاعات ساخت شی از کلاسها را در آن ثبت کنیم، که این اطلاعات ۳ دسته اصلی خواهند بود.

  • اطلاعات مربوط به کلاس مورد نظر اعم از جنس کلاس و …
  • اطلاعات مربوط به نحوه ساخت شی از کلاس مربوطه. بعنوان مثال اطلاعات کانکشن دیتابیس در کلاس دیتابیس
  • اطلاعات مربوط به Life-cycle یا طول عمر اشیا. در این قسمت تصمیم گیری های مربوط به زمان ساخته شدن شی، نگه داری شی ساخته، نحوه ایجاد شی (مثلا به ازای هر درخواست یک نمونه ساخته شود یا …) و مسائلی از این دست مدیریت میشود

پس نتیجه میگیریم که وظیفه اصلی Container یا ظرف، ساختن، نگه داری و تامین اشیا مورد نیاز است. پس از اینکه این اتفاقات در ظرف افتاد، Dependency Injection یا به اختصار DI وابستگیهای مورد نیاز هر کلاس را به آن تزریق میکند.

یک Vending Machine یا دستگاه فروش

چرا تزریق وابستگی مهم است؟

فرض کنیم که یک پروژه بزرگ داریم با کلی کلاس که صد در صد به هم وابستگی هایی هم دارند، بعنوان مثال تقریبا همه کلاسها نیاز به ارتباط با دیتابیس دارند، پس در حقیقت به سرویس یا کلاس دیتابیس ما وابستگی دارند. حال این نیاز چطور تامین میشود؟ احتمالا جواب این است که در زمان نیاز یک شی از کلاس دیتابیس میسازیم. جوابی درست اما در حقیقت غلط!
با اینکار عملا ما در هر دوره اجرای برنامه، مجبور هستیم چندین بار و چندین نمونه از کلاس دیتابیس شی بسازیم، که همه این اشیا به زمانی برای ساخته شدن احتیاج دارند که این هزینه زمانی را کاربر پرداخت میکند.
علاوه بر این اشیا ساخته شده به صورت مجزا در حافظه قرار گرفته و اینکه احتمالا قابلیت استفاده مجدد ندارند و واضح نیست که GC یا Garbage Collector چه رفتاری با این اشیا دارد، پس باعث هدر رفتن منابع میشوند. همچنین در کلاسی مانند کلاس دیتابیس این اشیا چندگانه میتواند باعث از دست رفتن یکپارچگی و ثبات در داده ها شود.
یکی دیگر از مهمترین نکات در مورد ایجاد تغییرات است، بدون تردید در آینده مجبور خواهیم شد تا امضای Constructor کلاسها را دست خوش تغییر قرار دهیم یا به طور کل از کلاس یا کتابخانه دیگری استفاده کنیم و این یعنی کل پروژه درگیر این تغییر و بروز رسانی خواهد شد، تازه آن زمان متوجه خواهیم شد که با چه دردسری مواجه هستیم. پس از اعمال تغییرات هم از گزند نا هماهنگی و باگهای ناشی از این تغییرات در امان نخواهیم بود. با این تفاسیر حتما باید فکر اعمال تغییرات را کاملا از ذهن بیرون کرد.
اگر بی انصاف نباشم بعضی از موارد مذکور راهکارهای خاص خود را دارند اما ممکن است آنها هم دچار ضعفهایی باشند. اما وقتی ما از تزریق وابستگی استفاده میکنیم، به این دلیل که عملیات ساخت آنها یکبار تعریف شده است، در صورت بروز هرگونه تغییر در امضای سازنده یا Constructor کلاس – به دلیل استفاده از کتابخانه یا کلاسی دیگر و … – فقط کافیست یک خط را در کل برنامه تغییر دهیم و نه هزاران خط! پس اگر روز قصد داشته باشیم که کلاس دیتابیس را با کلاس جدیدتری جایگزین کنیم به سادگی آب خوردن خواهد بود البته با رعایت اصول.
همینطور با توجه به کنترلی که ما در نحوه ایجاد و نگه داری اشیا داریم، هم میتوانیم از یک شی واحد بارها استفاده کنیم و هم یکپارچگی و ثبات داده ها را هم از دست نخواهیم داد.

خلاصه کلام آن است که بدون شک تزریق وابستگی یکی از تکنیکهای مهم در برنامه نویسی شی گراست که برنامه نویسی را بسیار ساده و لذت بخش میکند. هدف این مطلب صرفا آشنایی و فلسفه تزریق وابستگی بود، به امید خدا در مطالب بعدی مثالهای عملی همراه با کد بررسی خواهیم کرد.

موفق باشید.

صدا

مرثیه ای برای عشق

نام هنرمند: فرانک پورسل (Franck Pourcel)

نام اثر: مرگ عشق (Morir de Amor)

فرانک پورسل (Franck Pourcel) نام هنرمندی فرانسوی است که بین سالهای ۱۹۱۳ تا ۲۰۰۰ میلادی در دنیای ما زندگی کرده است. فرانک یک آهنگساز، تنظیم کننده و رهبر ارکستر بود. فعالیت هنری او از شش سالگی با آموختن ویولن شروع شد، او بعدها نوازندگی ویولن را در کنسرواتوار مارسِی (نام شهری در فرانسه) به شکل حرفه ای تری دنبال کرد و همچنین درامز، به علت علاقه وافری که به سبک جاز داشت. او یکسال هم در کنسرواتوار پاریس گذراند.

“مرگ عشق” (Death of Love/Morir de Amor) نام اثری از فرانک پورسل است که در سال ۲۰۰۱ میلادی به همراه آلبومی به همین نام منتشر شد که در دو دیسک عرضه شد. شاید به تاریخ انتشار این آلبوم دقت کرده باشید که حدود یکسال پس از مرگ او منتشر شده است، جالب است بدانید که از این هنرمند توانا در تمامی سالهای پس از مرگش آثار منتشر نشده ای انتشار یافته حتی در سال ۲۰۱۶ میلادی!!

به نظر شخصی من، این شاهکار بی نظیر یک اثر جاودانه هست، رنگ نوای سازها و ترکیب بندی اونها مسحور کننده است و به نظرم این نشان از زیرکی و هوش بالای هنرمند در سازبندی دارد. تولید و نواختن چنین اثری با ارکستر به همراه فضای رمانتیک و عاشقانه به علاوه قدمت و کلاسیک بودن، باعث شده تا این آهنگ به شدت دلچسب و دلپذیر و به یاد ماندنی بشود طوری که میتوان تمام عصر ۵ شنبه را با لیوان چای یا قهوه به همراه این آهنگ گذراند. همچنین زیبایی و دقت کافی برای پارتیتور نویسی و اجرا باعث میشه تا از شنیدن چندباره اش اصلا احساس خستگی نکنید بنابراین میتونه گزینه مناسبی برای برنامه نویس ها در حین کدنویسی باشه.
جا داره یکبار دیگه به این هنرمند شهیر فرانسوی درود بگم و بابت هارمونی زیبای اُبوا و ویولن ازش تشکر کنم.

پی نوشت حقیر: شاید برای عشق مردن، بهتر از بی عشق مردن باشد …..

تصویر

زیارت گذرنامه

دو سال گذشته را در این برهه از زمان در سرزمینی رویایی گذرانده ام!
دو سال گذشته، روزهای منتهی به اربعین پر خاطره ولی همچون خواب میگذشت
دو سال گذشته صبح چنین روزی زیارت نامه اربعین مقابلم میگرفتم ……
اما امسال ….. اما امروز …..

اما الان گذرنامه مقابلم گرفته ام
دو سال گذشته را در صحن شما اشکبار و ناباورانه، مقابل شما و ایستاده، با همان تن خسته از پیاده روی با همان شمایل دور از حمام، با سراپا گرد و خاک راه، با همان پیراهن مشکی که اتفاقا الان هم به تن دارم، زیارتنامه میخواندم و …..
الان در خانه مجنون وار و با حسرت، گذرنامه میخوانم

نشسته ام و با بغض دلخوشی از دست رفته، برنامه های به ثمر ننشسته، گذرنامه بی اعتبار را نگاه میکنم
چقدر در انتظار خاک خوری راه بودم ….
چقدر منتظر ورودی خیس کربلا بودم …..
یادش بخیر، لذت صدای بم و گرفته
یاد چای عراقی و قهوه، یاد عاشقی، ستون شماری به عشق جابر و با نوای حاج میثم بخیر
زنده باد زمزمه نوحه های محرم، بازخوانی مداحی هایی که وعده اربعین میدادند و لبخند رضایت
لذت پا برهنه طی کردن بین الحرمین ….
چقدر دیگر بگویم تا باور کنی؟؟ چقدر دیگر چشم تر کنم تا بدانی این جا ماندن گران تمام شد؟ چگونه نشان دهم که …..

کلی دلم میخواست وقتی رسیدم زیر لب بگویم:
السلام علیک یابن امیرالمومنین
السلام علیک یا اباعبدالله

دوست داشتم زمزمه راهم زیر باران کربلا این باشد:
داره بارون میباره، مثل چشمای زهرا
داره بارون میباره، رو سر سینه زنهاا
داره بارون میباره، داره اینجا میشه مثل دریا

چیزی نیست آقا، فقط کمی جا مانده ام ……

تصویر

جامانده از اربعین ۹۵

چند روز پیش که این عکس را دیدم، با خود گفتم چه تصویر خوبی! چند روز دیگر روی پروفایلم است
میدانی؟ دلم را حسابی صابون زده بودم تا زیر باران کربلا کف کنم، دلم میخواست در غبار راه کربلا حسابی موج سواری کنم
اما حالا هیچ!

حساب خراب کاری ها و آبروریزی ها و قدر نشناسی ها کلکم را کنده است …..
میدانم که اینبار مشکل از گیرنده های من است که کانال کربلا را پیدا نمیکنم
بی شک غبار غلیظ و سیاه گناه، گیرنده را کاملا پوشانده، انگاری خانه تکانی محرم هم کارساز نبوده و آنطور که باید گیرنده ام صاف نشده ….
میدانم آقا میدانم ….
میدانم که فرستنده های سه ساله از بالای قامت عباس تمام عالم را پوشش میدهد
میدانم چون میبینم، که از جای جای کره خاکی …. اصلا بی خیال! امروز هم که زائرت نیستم، از دور سلام

میدانی؟ دلم گرفته آقا! از قرار قبلیمان نزدیک به یکسال میگذرد …. یعنی در واقع یکسالی میشود که سر گردانم! این همه غم و ماتم سالی که گذشت را حواله دادم به محرم، به اربعین، به پیاده روی ….
اصلا شما بگو، این همه غم را، این همه درد را، دلتنگی را، تلخی و بی عدالتی و گلایه های دنیا را کدام محکمه ای میپذیرد؟ تیرگی های دنیای بی علی را به چه کسی غیر او میشود گفت؟ اصلا این همه درد دل را غیر از گوشه حرم علی کجا میشود جا گذاشت؟
حالا چه کنم؟ باز هم مثل سالی که گذشت بگویم اربعین ۹۶؟ هرچه از امسال مانده را خاک باغچه سال دیگر کنم؟ و اگر خدایی نکرده اگر …. زبانم لال!

نمیدانم، سرگردان و دلتنگ و مجنونم! دلخوشیم از دست رفت! اشکهایی که با خساست پای روضه نریختم، گلوگیر شده اند و حالا باران حسرت میبارم
بگذریم، از ما که گذشت اما ….
اما لعنت به گیرنده ای که راه اربعین را برفک نشان دهد ….. لعنت!

گلایه ای نیست، فقط جواب دلتنگیم این نبود آقا ….

 

پی نوشت: رجوع شود به “پیاده ها” از رضا صادقی و “دل خون” از محسن چاووشی

وضعیت

سلام دنیا!

به وردپرس خوش آمدید. این نخستین نوشته‌‌ی شماست. می‌توانید ویرایش یا پاکش کنید و پس از آن وبلاگ نویسی را آغاز کنید!
سلام مردم!
من رامین مظلومی هستم. دانشجوی کارشناسی فناوری اطلاعات یا همون IT. من تخصصم برنامه نویسی هست، همه جا خودم رو برنامه نویس PHP معرفی میکنم و اخیرا سی شارپ چون ویندوز استور و ویندوز فون هم کار میکنم. 😀 اما خب ناخنکی به زبان های دیگه هم زدم. (البته خودتون بهتر میدونید که HTML و CSS زبان نیستن اما جزو زبان به حساب میان و ما هم کمی سواد در موردشون داریم)

عشق من به برنامه نویسی بر میگرده به سال اول دبیرستان! بلاخره بعد از ۲-۳ سال کار با کامپیوتر و خوره بازی، مثل همه توی اون سن علاقه به کارای خفن و هک خیلی ما رو سوق میداد که بریم برنامه نویسی یاد بگیریم. (ما که میگم من و یکی از رفقای سوم راهنمایی به اسم صادق) خیلی سعی کردیم اما نشد ….

زمین خاکی برای من بلاگفا بود، زورکی و دست پا شکسته، کمی سر از HTML و CSS و خیلی خیلی محدود جاوا اسکریپت یاد گرفتم. سوم دبیرستان بودم که تونستم طی یک دوره سه ماه HTML و CSS و PHP رو خیلی خام و غیر کاربردی یاد بگیرم و بلاخره وارد دنیای برنامه نویسی بشم.

راستش روزای بلاگفا که نتونستیم کاری برای خودمون کنیم. این ماجرا به باقی سرویس دهنده ها هم سرایت کرد با همه امکانات وسوسه انگیزشون اون چیزی که میخواستم نشد. بعد از مثلا برنامه نویس شدنم، خیلی در تکاپوی ایجاد یک وبسایت شخصی بودم با شکل و شمایل مختلف (اینو یادم رفت بگم که من از نظر طراحی زیر صفرم) برای طراحی خیلی تلاش کردم، ایده داشتم و …. اما فقر توانایی گرافیکی دست و پا گیر بود.

خلاصه داستان رو براتون بگم اینکه خیلی تلاش کردیم برای این سایت! بلاخره بعد از چند سال که همین وردپرس هم اینجا خاک میخورد و غیره همت کردیم و با کمک دوستان راهش انداختیم. به مرور بیشتر از خودم و باقی مسائل مینویسم.

 

موفق و رنگی باشید.
رامین مظلومی