Dependency Injection

همیشه وقتی سورس نرم‌افزارهای Open Source را بررسی می‌کردم به یک چیز بی‌معنی برمی‌خوردم: استفاده بی‌مورد از interface. مثلاً کلاسی را پیدا می‌کردم که پیاده‌سازی یک اینترفیس خاص بود در حالی که خود آن اینترفیس هم فقط در همان یک جا مورد استفاده قرار گرفته بود. تا جایی که من می‌دانستم استفاده از interface وقتی خوب است که بخواهیم چندین و چند کلاس داشته باشیم که بخواهیم آن یک interface خاص را پیاده‌سازی کرده باشند. چند وقت پیش بالاخره به صرافت افتادم و در StackOverflow پرسیدم که چرا این روزها استفاده از interface این قدر باب شده است.

جواب خیلی واضح و قابل قبول بود. چون با استفاده از interfaceها می‌توان مفاهیمی مثل Dependency Injection و Decoupling را در نرم‌افزار پیاده‌سازی کرد. استفاده از این مفاهیم یعنی کلاس‌ها و دیگر بخش‌های برنامه را طوری بنویسیم که در حد ممکن از دیگر بخش‌ها بی‌خبر بوده و در نتیجه به آن وابستگی نداشته باشند. برنامه‌هایی که به این روش نوشته می‌شوند مدیریت و نگهداری راحت‌تری دارند و خواناتر هستند. علاوه بر این‌ها تکنیک‌های جدیدی که در TDD و Mocking استفاده می‌شوند در برنامه‌هایی که به روش Dependency Injection نوشته شده‌اند خیلی کاراتر و راحت‌تر عمل می‌کنند.

‫ALM چیست؟

ALM یا Application Lofecycle Management به طور اختصار یعنی مدیریت فرایند تولید نرم‌افزار با استفاده از ابزارهای کار تیمی مثل Source Control، Issue Tracking، Build Automation و… در واقع با کمک ALM کلیه امور مربوط به توسعه نرم‌افزار در یک تیم تولید نرم‌افزار به طور یکپارچه مدیریت و هدایت می‌شود. در اینجا منظور از امور تیم مواردی مثل زیر است:

۱- Source Control Management
‫۲- Issue/Bug/Feature Management
‫۳- Build Automation
‫۴- Architecure/Design (UML)‎
‫۵- Test: Unit Test – Acceptance Test – Load Test – …
‫۶- Release Management
‫۷- Deploy Management
‫۸- Project Management
‫۹- …

عکس زیر روابط این اجزا را به خوبی نمایش می‌دهد:

هر تیمی که همه این امور را داشته باشد و بتواند آنها را با کمک ابزارهای مناسبی مدیریت کند یعنی ALM دارد. ابزارهای ALM می‌توانند کاملاً یکپارچه باشند. مثلاً Visual Studio Team System که ابزار ALM مایکروسافت است، شامل عمده ابزارهای مورد نیاز مثل Source Control، Work Item Management، Buid Automation، Test و… است. ابزارهای ALM می‌توانند از جاهای مختلفی آمده ولی باز هم یکپارچه باشند. مثل وقتی که از ابزارهای SVN برای Source Control، از NAnt برای Build، از Jira برای Issue Tracking و… استفاده شود.

ALM اصطلاحی است که این روزها بیشتر از روزهای قبل مورد استفاده قرار می‌گیرد. مثلاً مایکروسافت که در نسخه‌های ۲۰۰۵ و ۲۰۰۸ ویژوال استودیو از اصطلاح Team System استفاده می‌کرد، تصمیم گرفته در نسخه ۲۰۱۰ ویژوال استودیو به جای Team System از همین واژه Application Lifecycle Management استفاده نماید.

منابع:
ویکی‌پدیا
کتاب ALM with VS 2010