إطار عمل خفيف للغاية لحقن التبعية / محدد موقع الخدمة لـ Swift 5.x على نظام التشغيل iOS.
ملاحظة: تم الآن إهمال برنامج Resolver رسميًا واستبداله بنظام حقن التبعية الجديد الخاص بي، Factory. يعد Factory نظامًا حقيقيًا لحقن التبعية قائمًا على الحاويات، وهو آمن في وقت الترجمة وهو أصغر حجمًا وأخف وزنًا وأسرع من Resolver. بقدر جودة Resolver، فإن Factory هو الأفضل.
تدعم أطر حقن التبعية نمط تصميم عكس التحكم. وبغض النظر عن التعريفات التقنية، فإن حقن التبعية يتلخص إلى حد كبير في:
| إعطاء كائن الأشياء التي يحتاجها للقيام بعمله.
هذا كل شيء. يسمح لنا حقن التبعية بكتابة تعليمات برمجية مقترنة بشكل غير محكم، وبالتالي يسهل إعادة استخدامها والسخرية منها واختبارها.
للمزيد، راجع: مقدمة لطيفة لحقن التبعية.
هناك ست استراتيجيات كلاسيكية لحقن التبعية:
الحل يدعمهم جميعا. اتبع الروابط للحصول على وصف موجز وأمثلة وإيجابيات وسلبيات كل منها.
عند الحديث عن التعليقات التوضيحية، يدعم Resolver الآن حل الخدمات باستخدام صيغة مجمع الخاصية الجديدة في Swift 5.1.
class BasicInjectedViewController : UIViewController {
@ Injected var service : XYZService
@ LazyInjected var service2 : XYZLazyService
@ WeakLazyInjected var service3 : XYZAnotherLazyService ?
}
ما عليك سوى إضافة الكلمة الأساسية المحقونة وسيتم حل تبعياتك تلقائيًا. راجع وثائق التعليقات التوضيحية لمعرفة المزيد حول هذه الاستراتيجيات وغيرها.
يوجد أيضًا غلاف @InjectedObject
يمكنه إدخال كائنات يمكن ملاحظتها في طرق عرض SwiftUI.
يتم تطبيق Resolver في ما يزيد قليلاً عن 700 سطر من التعليمات البرمجية الفعلية في ملف واحد، ولكنه يحتوي على الكثير من الميزات في تلك الـ 700 سطر.
TLDR: إذا لم يكن هناك شيء آخر، فتأكد من قراءتك حول الاستدلال التلقائي للنوع، والنطاقات، والاختيارات.
يعد استخدام Resolver عملية بسيطة تتكون من ثلاث خطوات:
كما ذكرنا سابقًا، يعد Resolver نظامًا خفيفًا للغاية لحقن التبعية، ويتم تنفيذه في ما يزيد قليلاً عن 700 سطر من التعليمات البرمجية ومضمن في ملف واحد.
تم تصميم المحلل أيضًا للأداء. SwinjectStoryboard، على سبيل المثال، هو نظام رائع لحقن التبعيات، لكن Resolver أسرع بنحو 800% في حل سلاسل التبعيات من Swinject.
وعلى عكس بعض الأنظمة الأخرى، تمت كتابة Resolver بلغة Swift 5 بنسبة 100%، بدون كود Objective-C، أو تأرجح الأسلوب، أو تبعيات داخلية في وقت تشغيل Objective-C.
علاوة على ذلك، الحل:
أخيرًا، باستخدام الاستدلال التلقائي للنوع، تميل أيضًا إلى كتابة كود حقن التبعية أقل بنسبة 40-60% باستخدام Resolver.
يدعم Resolver CocoaPods ومدير الحزم Swift.
pod " Resolver "
يعد Resolver نفسه مجرد ملف مصدر واحد (Resolver.swift)، لذلك من السهل أيضًا تنزيل الملف وإضافته إلى مشروعك.
لاحظ أن الإصدار الحالي من Resolver (1.4) يدعم Swift 5.3 وأن الحد الأدنى لإصدار iOS المدعوم حاليًا مع هذا الإصدار هو iOS 11.
اقرأ دليل التثبيت للحصول على معلومات حول دعم الإصدارات السابقة.
لقد جعلت مستودع Builder الخاص بي عامًا. إنه تطبيق iOS بسيط بنمط رئيسي/تفصيلي يحتوي على أمثلة...
أستخدمه أيضًا للعب مع بعض التعليمات البرمجية الجديدة التي تستخدم أنماط إنشاء نمط SwiftUI لإنشاء بنية واجهة المستخدم ولإنشاء طلبات الشبكة. تحقق من ذلك.
من الممكن أن تؤدي التحديثات الأخيرة لـ Resolver إلى حدوث تغييرات معطلة في قاعدة التعليمات البرمجية الخاصة بك.
حل 1.4 تحسين سلامة وأداء مؤشر الترابط. لا توجد تغييرات جذرية، على الرغم من أنه تم الآن إهمال الوصول إلى نطاقات المحلل مباشرة. انظر: النطاقات.
يضيف Resolver 1.3 مسافات الأسماء إلى Resolver. يتيح تسجيل الأسماء إمكانية الإكمال التلقائي بشكل أفضل ويجعل التعليمات البرمجية الخاصة بك أكثر أمانًا عن طريق تقليل أخطاء تقييم وقت التشغيل المحتملة. هذا تغيير محتمل. راجع: المثيلات المسماة
قام Resolver 1.2 بتغيير كيفية تمرير الوسائط إلى مصنع التسجيل لتوفير دعم أفضل لتمرير الوسائط الفردية والمتعددة والتعامل معها. هذا تغيير جذري. انظر: تمرير الوسائط المتعددة والتعامل معها
قام Resolver 1.5 بتحديث العديد من آليات التسجيل والتخزين المؤقت المستخدمة في Resolver. ربما لا يمثل هذا مشكلة إلا إذا كتبت شيئًا يعتمد على السلوك الداخلي لـ Resolver.
إذا كنت ترغب في دعم عملي في Factory وResolver، ففكر في رعاية GitHub! توجد مستويات عديدة لزيادة الدعم وحتى للإرشاد وتدريب الشركة.
أو يمكنك فقط أن تشتري لي فنجانًا من القهوة!
تم تصميم Resolver وتنفيذه وتوثيقه وصيانته بواسطة مايكل لونج، وهو مهندس برمجيات iOS رائد وأحد أفضل 1000 كاتب في مجال التكنولوجيا على المستوى المتوسط.
كان مايكل أيضًا أحد الفائزين بمكافأة Google مفتوحة المصدر Peer Reward في عام 2021 لعمله في Resolver.
المحلل متاح بموجب ترخيص MIT. راجع ملف الترخيص لمزيد من المعلومات.