تجنب تضمين مكتبات خارجية في مشروعك

يمكنك في كثير من الأحيان سماع العبارة: "لماذا تكتب دراجتك؟ خذ ليب جاهز واستخدمه! كل شيء مكتوب بالفعل من أجلك ". المطورين المبتدئين خاصة يسمعون مثل هذه التعبيرات. عند حل أي مشكلة ، يبدأون في النظر إلى الليب الجاهزة ويسحبونها بلا تفكير في مشروعهم. في هذه المقالة ، سوف تتعلم ما يمكن أن تؤدي إليه عواقب التقديم الطائش لمكتبات الطرف الثالث.



المشاكل المحتملة



أوصي بشدة بتجنب إضافة مكتبات خارجية إلى مشروعك. ومع ذلك ، هذا لا يعني أن استخدام المكتبات أمر شرير ، ويجب تنظيف ملف Gradle تمامًا من أي تبعيات خارجية! أريد أن أنقل فكرة أنه يجب إجراء تحليل جاد للغاية قبل إضافة مكتبة جديدة. لفهم كيفية تحليل المكتبات ، دعنا نلقي نظرة على بعض المشاكل المحتملة التي قد تواجهها عند إضافة مكتبة جديدة إلى مشروعك.



حجم التطبيق



لا تؤدي معظم المكتبات إلى زيادة حجم التطبيق بشكل كبير. ولكن هناك مثل هذه الإرادات ، بعد إضافتها سيزداد تطبيقك بشكل كبير! على سبيل المثال ، يمكن لمكتبة Realm زيادة حجم APK من 4 ميجا بايت إلى 12 ميجا بايت. في المتوسط ​​، يزن التطبيق 100 ميجا بايت -200 ميجا بايت وقد لا يكون 8 ميجا بايت الإضافي ملحوظًا. لكن ضع في اعتبارك أن Realm ليست المكتبة الوحيدة التي تؤثر سلبًا على حجم APK. هل من الممكن تقليل حجم APK باستخدام هذه التبعية؟ نعم ، يمكنك تقسيم ملف apk حسب بنى المعالج. لكن هذا يؤدي إلى المشكلة التالية (النقطة 2).



قابلية صيانة الكود



تنمو المشاريع ، ويتم تغطيتها بمزيد من المنطق وفي بعض الأحيان يصبح فهمها أكثر صعوبة. حتى أنه بعد عدة سنوات من تطوير المشروع ، يمكن لأي مطور جديد أن يعتاد على المشروع بسهولة ، هناك حاجة إلى بنية مشروع واضحة. ومع ذلك ، يمكن لبعض المكتبات إبطال إمكانية صيانة المشروع. على سبيل المثال ، قد يؤدي العمل غير الصحيح مع EventBus إلى إرباك منطق تطبيقك بشكل كبير. من المهم أن تميز بوضوح بين أين وفي أي حالات تستخدم هذا lib. وأيضًا للتأكد من أنه لن يخرج أحد عن هذه القواعد. لكن ماذا يحدث في الواقع؟ يستخدمه كل مطور تقريبًا بدءًا من EventBus في كل مكان. نتيجة لذلك ، يصبح المشروع غير قابل للقراءة تمامًا.



حان الوقت لاستكشاف المكتبة



عند إضافة مكتبة جديدة ، يجب أن تتعلم كيفية التفاعل معها. هناك مكتبات يمكن أن يكون لها تأثير سلبي للغاية على سرعة التطوير في المستقبل.

على سبيل المثال ، تأخذ مكتبة PagingLibrary من Google الكثير من الجهد لمعرفة كيفية التفاعل معها. سوف يستغرق كل مطور جديد من 12 إلى 20 ساعة لاكتشاف هذه المكتبة. أنت تخسر 3 أيام تقريبًا! في هذه الأيام الثلاثة فقط ، يمكنك تدوين ترقيم الصفحات والاستقلال عن حلول الجهات الخارجية.



بناء السرعة



سرعة بناء التطبيقات الحديثة ضعيفة. ومع ذلك ، إذا كنت ترغب في زيادة وقت البناء الخاص بك أكثر - استخدم Dagger ! لا أعرف لماذا لا تزال المكتبة تُستخدم بنشاط بعد ظهور Kotlin. في معظم الحالات ، يحتوي Dagger على جميع المشكلات الأربعة الموضحة أعلاه.



البق ، البق ، البق ...



في تجربتي ، في مشروع واحد فقط ، رأيت 5 مكتبات بسبب وجود أخطاء فيها. تذكر أن هناك دائمًا أخطاء في المكتبات. على سبيل المثال:



  • يترك AndroidPdfViewer تسربًا للذاكرة ، ويتعامل بشكل غير صحيح مع بعض الحالات بعلامة فارغة ، مما يتسبب في طرح NullPointerException
  • لا يعمل مكون التنقل في Android بشكل صحيح مع الرسوم المتحركة المشتركة Elemant في بعض الحالات
  • تعطل Cicerone أحيانًا التطبيق بسببexecutePendingTransactions()


هل هذا يعني أن المكتبات لا تستحق الاستخدام؟ لا ، يمكن ويجب استخدام المكتبات ، ولكن من المهم على الأقل التأكد من عدم وجود أخطاء حرجة لمشروعك في قائمة المشكلات.



نقاط الضعف في المكتبة



هل تعرف أسهل طريقة لاختراق عدة تطبيقات في وقت واحد من خلال فحص شفرة مصدر واحدة فقط؟ نحتاج إلى العثور على خطأ في مكتبة كبيرة يستخدمها العديد من المطورين. ومن خلال هذه الثغرة يمكنك الوصول إلى بيانات التطبيق الخاص بك. إذا كنت لا تطور تطبيقًا يتطلب مزيدًا من الاهتمام بسلامة المستخدم ، فيمكنك حينئذٍ غض الطرف عن هذه النقطة. إذا لم يكن الأمر كذلك ، فابحث عن مشكلة تعالج نقاط الضعف المحتملة.



دعم المكتبة



إذا لم يتم تحديث المكتبة لمدة عام ، اطرح سؤالاً عما إذا كانت تستحق استخدامها. الحقيقة هي أن هناك أخطاء في المكتبات بشكل منتظم. إذا لم يتم إصلاح هذه الأخطاء ، فهل يستحق استخدام هذه المكتبة؟ من الممكن أن تتعثر في المستقبل القريب على خطأ في المكتبة وسيتعين عليك البحث عن طرق بديلة لتنفيذ الميزة. هناك بعض المكتبات التي تحتاج إلى التكيف مع إمكانيات واجهة برمجة تطبيقات Android الحالية. على سبيل المثال ، إذا ظهر عنصر جديد في Android ، فأنت بحاجة إلى إضافة دعم له. تتضمن هذه المكتبات Anko ، والتي لم تعد مدعومة. الآن ليس من المنطقي استخدام هذه المكتبة في المشاريع الكبيرة.



المكتبة موجودة في جميع طبقات المشروع



تقوم المكتبات مثل RxJava أو PagingLibrary بإجبار المطور على استخدام API الخاص به في كل طبقة من التطبيق. إذا كنت متأكدًا من أن المكتبة ستكون دائمًا في المشروع ، فلا توجد مشكلة. ولكن إذا اضطررت إلى قطع المكتبة لسبب ما ، فستبذل جهودًا هائلة! سيكون عليك إعادة كتابة نصف المشروع.



قيود المكتبة



يوفر كل lib واجهة برمجة تطبيقات مقيدة بكل من توفر الأساليب العامة والتنفيذ الداخلي. تأكد من أن إمكانيات المكتبة كافية لك تمامًا. على سبيل المثال ، تعتبر مكتبة Android Navigation Component الشائعة عملية جدًا للمطورين. لا يوفر أساليب إظهار أو إخفاء أو إضافة (التي يمتلكها FragmentTransaction). بالإضافة إلى ذلك ، تعقد المكتبة العمل مع BottomNavigationView عندما يكون من الضروري تخزين محفوظات علامات التبويب.



ملف Gradle ضخم به تبعيات



عندما أصل إلى مشروع جديد ، فإن أول شيء أفعله هو إلقاء نظرة على التبعيات في ملف Gradle. إنه يوضح ما يمكن للتطبيق القيام به وكيف يتم حل بعض المهام. لكنني فوجئت عندما رأيت أن كلاً من OkHttp و Retrofit و Volley (fork) يُستخدمان للعمل مع الشبكة. وهذا مجرد شبكات. يتكون ملف Gradle نفسه من عدد كبير من المكتبات ، والتي انتهى دعمها منذ فترة طويلة. عندما يكون المطور بمفرده ، يمكنه إبقاء المشروع بأكمله في رأسه ، ولكن عندما يأتي مطورون جدد ، يصبح من الصعب للغاية فهم مثل هذا المشروع.



قائمة الأسئلة قبل تنفيذ المكتبة



  1. ما هو موضوع هذه المكتبة؟ هل هم مهمون لمشروعي؟
  2. ما مدى اختبار هذه المكتبة / التكنولوجيا من قبل مجتمع المطورين؟ كم عدد النجوم لديها على جيثب؟
  3. كم مرة يستجيب المطور لمشكلة ما؟
  4. كم مرة يقوم المطور بتحديث المكتبة؟
  5. كم من الوقت سيقضي المطورون الجدد في تعلم التكنولوجيا المستخدمة؟
  6. كيف ستؤثر المكتبة على حجم التطبيق؟
  7. كيف ستؤثر المكتبة على سرعة التطبيق؟
  8. كيف ستؤثر المكتبة على سرعة البناء؟ هل يساعدك على توفير وقت التطوير؟
  9. هل المكتبة بها نقاط ضعف؟
  10. هل ستتواجد المكتبة في كل طبقة من المشروع؟ ما مدى أهمية هذا؟
  11. كيف تحد المكتبة من خيارات المطور (دائمًا ما تكون محدودة). هل هو جيد أو سيئ؟
  12. هل سأكون قادرًا على كتابة حل بنفسي يتم صقله لمشروعي في إطار زمني معقول؟


من الممتع جدًا أن تسمع ما الذي يمكنك البحث عنه أيضًا عند اختيار مكتبة. نتطلع إلى تعليقاتك وردود الفعل والأسئلة!



All Articles