- الحصول على الرابط
- X
- بريد إلكتروني
- التطبيقات الأخرى
- الحصول على الرابط
- X
- بريد إلكتروني
- التطبيقات الأخرى
عرفنا فى المقاله السابقه أن ال HomeController بتستخدم Object من نوع IDatabase وبكدا ال HomeController تقدر تستخدم اي Class بتعمل Implementation ل IDatabase وقلنا كدا أن احنا قدرنا نحقق ال Loosely Coupled بين الـ HomeController وبين ال Class اللى بتستخدمها سواء SQLServer او MySql.
بس لحد الان الـ HomeController هي المسؤولة عن ال Creation لـ Objects لـ dependencies اللى هتستخدمهم ومسؤله عن ال LifeTime الخاص بيهم.
بمعنى اخر احنا فصلنا بين ال HomeControler وال MySql و SqlServer عن طريق ال IDatabase وبكدا ال HomeController لن تتعامل معهم بشكل مباشر بس ال HomeController مسؤله عن عمل Creation للـ Object اللى هتستخدمه وتحديد نوعه.
ex: IDatabase = new MySql() or IDatbase = new SqlServer() and so on
وهنا هنقدم ال Inversion of Control
Inversion of Control is a principle in software engineering which transfers the control of objects or portions of a program to a container or framework
فى المثال السابق الـ HomeController هي المسؤولة عن ال creation لل Dependencies اللى بتستخدمها وبكدا هى اللى بتعمل control لل objects ,ودا يعتبر مهمة إضافية للـ HomeController انها تتحكم فى ال objects of dependencies .
ال Inversion Of Control واختصاراً IoC هو مبدأ ويقترح أن التحكم فى ال dependencies هو خارج اختصاص المهام الرئيسيه لل Class اللى بتستخدم ال dependencies ومن أجل حل هذه المشكلة.
لازم يكون عندنا class او framework مسؤلين عن التحكم فى ال objects مثل ال creation وال lifetime.
يعنى لو عاوزين نستخدم object من نوع IDatabase هنروح نطلب من ال class او ال framework اياً كان ,وال Framework هيوفر لينا ال Objects اللى احنا عاوزينه .
ال IoC هو مبدأ فى اكتر من طريقه ممكن ننفذه بيها:
1-Strategy design pattern
2-Service Locator pattern
3-Factory pattern
4-Dependency Injection (DI)
باستخدام ال Dependency Inversion Principle وال Inversion of Control هنكون حققنا الهدف الاساسى بأن العلاقه هتكون Loosely Coupled بين الـ HomeController وال dependencies.
- الحصول على الرابط
- X
- بريد إلكتروني
- التطبيقات الأخرى
تعليقات
إرسال تعليق