• بررسی مفهوم ، انواع و چگونگی پیاده سازی Dependency Injection  در زبان برنامه نویسی C#- قسمت اول
بررسی مفهوم ، انواع و چگونگی پیاده سازی Dependency Injection در زبان برنامه نویسی C#- قسمت اول
1395/09/09 - 13:24:01 // DataBase and Design Pattern // 1 نظر // 5503 بازدید

سیستمهای نرم افزاری نوین که در سالهای اخیر طراحی و برنامه نویسی گشته و یا خواهند گردید، فقط قرار نیست تولیدشده و پس از کوتاه مدتی به دور انداخته شوند. با پدیدار شدن Agile و Scrum و اخیرا DevOps، یک تیم برنامه نویسی باید بتواند حداکثر تلاش را در پیاده سازی یک Separation Of Concerns واقعی داشته باشد.

بسمه تعالی

بررسی مفهوم ، انواع و چگونگی پیاده سازی Dependency Injection در زبان برنامه نویسی C#- قسمت اول

 

سیستمهای نرم افزاری نوین که در سالهای اخیر طراحی و برنامه نویسی گشته و یا خواهند گردید، فقط قرار نیست تولیدشده و پس از کوتاه مدتی به دور انداخته شوند. با پدیدار شدن Agile و Scrum و اخیرا DevOps، یک تیم برنامه نویسی باید بتواند حداکثر تلاش را در پیاده سازی یک Separation Of Concerns واقعی داشته باشد.

همه این مفاهیم وقتی به درستی در برنامه نویسی معنا پیدا میکنند که کل برنامه و پیش بینیهای یک طراح و توسعه دهنده نرم افزار مبتنی بر OOP باشد. شی گرایی حلقه مفقوده این روزهای دنیای برنامه نویسی خیلی از تیمها و گروه هاست. همه Design Pattern ها و Api و .... وقتی به درستی تفسیر و پیاده سازی خواهند شد که OOP توسط برنامه برنامه نویس به درستی درک شده و وقت و حوصله پیاده سازی آن نیز وجود داشته باشد.

زبان C# یکی از شی گرا ترین زبانهای برنامه نویسی است و در 99 درصد موارد محدودیتی در پیاده سازی یک روال شی گرا وجود ندارد. یکی از مواردی که در پیاده سازیهای تیمی وجود دارد، بالا بردن میزان عدم به هم پیچیدگی کدها و در اصل مستقل نمودن هر تکه کد از دیگر بخشها میباشد. این روند سبب میشود بتوان یک Task را بین اعضای تیم تقسیم نمود و در صورت بروز خطا نیز لازم نباشد بیش از همان قسمت مورد نظر مورد بررسی و دستکاری قرار گیرد.

یکی از مباحثی که به روند توضیح داده شده در بالا کمک شایانی مینماید، Dependency Injection می باشد که بنده هنوز نتوانسته ام معادل فارسی برای آن پیدا کنم و استفاده از مفاهیمی مانند تزریق وابستگی و... هم اصلن بیان و تفسیر درستی از این عبارت نخواهد بود.

Dependency Injection یعنی یک Object که بخشی از همان مفاهیم شی گرایی است، حداقل میزان وابستگی را به دیگر بخشهای یک Module یا یک Task داشته و بر این اساس دست یک تیم نرم افزاری در reusability، maintainability و testability بازتر گردد.

برای درک درست این مبحث بهتر است ابتدا انواع روشهای پیاده سازی Dependency Injection معرفی و سپس با توضیح هر یک مبحث بازترگردد.

انواع روشهای پیاده سازی Dependency Injection

1.Constructor Injection
2.Setter Injection
3.Interface based Injection

مورد شماره یک یعنی Constructor Injection یکی از رایج ترین شکلهای پیاده سازی DPI است که شرح و بررسی آن خواهیم پرداخت .

ایده و شکل پیاده سازی DPI در Constructor Injection این است که خود Object هیچ گونه تحرکی و تامین نیازمندی در Constructor نداشته باشد و فقط در صورتی Constructor استفاده کنیم که این Object به یکسری مقادیر نیاز داشته باشد که در این صورت از طریق پارامترهای ورودی Constructor این کار انجام خواهد گردید و مقادیر مورد نیاز به درون متد سازنده تزریق خواهد گردید.

به یک مثال به شکل زیر دقت کنید .

  1. public class TestClass{  

  2.     //Implement common property and method.  

  3. }  
  4. public class FirstObject : TestClass  
  5. {  
  6.     public string GetData()  
  7.     {  
  8.         using (var helper = new BankHelper(this))  
  9.         {  
  10.             return helper.GetName();  
  11.         }  
  12.     }  
  13. }  
  14. public class BankHelper : IDisposable  
  15. {  
  16.     public BankHelper(TestClass clsTest) { }  
  17.    
  18.     public string GetName()  
  19.     {  
  20.         return "Test";  
  21.     }  
  22.     public void Dispose()  
  23.     { // Dispose your object that out of scoped  
  24.     }  
  25. }  

در مثال بالا متد سازنده کلاس BankHelper در عمل مقادیر ورودی را به این Object ارسال می نماید.

مزایای این روش در پیاده سازی DPI

1- تست پذیری و Testing در این روش به دلیل ارسال مقادیر در متد سازنده ساده تر و امکان پذیر تر است.

2- در این روش کلیه استانداردهای DPI به صورت کامل نمودار خواهد گردید.

3- به دلیل برگزاری کلیه مراحل در متد سازنده، این روش سبب جلوگیری از ایجاد circular dependency خواهد گردید.

معایب این روش در پیاده سازی DPI

1- در روال پیاده سازی، جهت ارسال مقادیر و پارامترها ، حتما باید کلاس دارای Public Constructor باشد.

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

3- در مواردی به دلیل اینکه روال صدا زده شدن متد سازنده یک کلاس از دست برنامه نویس خارج است، تقدم و تاخر اجرای متد میتواند مشکل ساز شود.

در قسمت بعدی به بررسی چگونگی پیاده سازی Setter Injection خواهیم پرداخت....

علی کلاهدوزان
معرفی نویسنده : علی کلاهدوزان

سلام بر دوستان ،
شاید رایج است به عنوان پروفایل کاربر ، چند خطی راجع به خودم بنویسم ، ولی وضعیت کاری و سوابق من با یک جستجوی ساده در گوگل مشخص خواهد شد ، لذا سرتان را با مطالب بی مورد به درد نیاورم بهتر است . اگر نکته خاصی لازم بود بدانید در قسمت "ایلیا سافت در یک نگاه" به احتمال زیاد یافت خواهد شد . جزئیات بیشتر را سوال کنید ، آدرس ایمیل Ali@Kolahdoozan.com همیشه جوابگوی شماست .امیدوارم از مطالب سایت استفاده کرده باشید . شاد و پیروز باشید .

امتیاز به مطلب
           
برچسب ها
DPI,Dependency Injection 
نظرات کاربران
  • افشین
    1395/09/11 - 02:06:10

    0
    0
    .سلام. مرسی.👌 عالی بود. لطفا بخش های بعدی را زودتر بگذارید. و خواهشمندم هر بخش را با یک مثال عملی کوچک جلو ببرید.
ارسال نظر