تجارب برمجة Android بجد

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

كينت بيك

التكلفة الإجمالية لامتلاك فوضى

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

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

تنزيلات متجر Google Play لتطبيقنا وتقييمه.

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

لغز Android

بدا الرمز قبيحًا ، تمكنت الأنشطة من كل شيء:

  • خيوط
  • I / O
  • حساب
  • التخطيطات
  • تغييرات التكوين
  • ما لا

بعد كل شيء ، الأنشطة هي وحدات تحكم ، أليس كذلك؟ أم هم آراء؟ لم أعد أعلم.

MVC

إعادة تصميم الكبرى في السماء

لقد احتجنا إلى تصميم التطبيق بطريقة لا تؤدي إلى تغيير سطر التعليمات البرمجية في مكان ما إلى شيء آخر. كان يجب أن يكون التطبيق ، كما يقول العم بوب ، "قويًا ولكن ليس جامدًا ومرنًا ولكن ليس هشًا".

روبرت

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

  • أضفنا طبقة "خدمة" ونقلنا جميع التعليمات البرمجية غير واجهة المستخدم إليها ، خدمة واحدة في كل مرة.
  • قمنا برمي AsyncTasks وانتقلنا إلى ListenableFutures باستخدام الجوافة.
  • قمنا بالتخلص من AsyncHttpClient لـ OkHttp.
  • ولكن الأهم من ذلك ، بدأنا في القراءة كثيرًا: كود نظيف ، هندسة نظيفة ، SOLID ، DRY ، مبرمج عملي ، التزامن جافا في الممارسة ، تصميم مدفوع بالنطاق ، إلخ.

سرعان ما بدأنا نرى فوائد جهودنا. زادت الإنتاجية ، وكنا نكتب الأشياء بشكل أسرع ، وكان الجميع سعداء.

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

فن الشفرة النظيفة

بعد مشاهدة مقاطع فيديو العم بوب على Clean Architecture عدة مرات وقراءة الكثير على بنية تطبيق Android ، قررت تجربة نمط تصميم MVP و RxJava.

بعد أيام قليلة من التجربة ، قررنا التبديل إلى RxJava وتنفيذ MVP باستخدام Clean Architecture. تأكدنا من تغليف جميع الطبقات خلف الواجهات وفصل الاهتمامات بشكل جيد.

  • تحتوي طريقة العرض ، التي يتم تنفيذها عادةً بواسطة جزء ، على مرجع للمقدم. الشيء الوحيد الذي ستفعله طريقة العرض هو استدعاء طريقة من مقدم العرض في كل مرة يكون فيها إجراء واجهة.
  • المقدّم مسؤول عن العمل كوسيط بين العرض والنموذج. يقوم باسترداد البيانات من النموذج وإعادتها المنسقة إلى العرض. ولكن على عكس MVC النموذجي ، فإنه يقرر أيضًا ما يحدث عندما تتفاعل مع طريقة العرض.
  • النموذج هو فقط بوابة إلى طبقة المجال أو منطق الأعمال.
  • يتعامل Interactor مع I / O وهو مزود البيانات ليتم عرضها في طريقة العرض.

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

قاعدة الكشافة

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

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

استنتاج

قد لا تكون طريقتنا في إنشاء تطبيق قابل للتطوير "صحيحة" وقد لا توافق على هذا المنشور. بعد كل شيء ، لا يتفق جميع الفنانين القتاليين على أفضل فنون الدفاع عن النفس ، أو أفضل تقنية داخل واحد ؛)

هناك العديد من الأساليب المختلفة تجاه MVP والكثير من الحلول المثيرة للاهتمام لتكييفها مع Android. الحقيقة الوحيدة التي لا يمكننا أن ننكرها هي أن Clean Code مهم ولا يمكنك مسحه تحت سجادة.

يستعير هذا المنشور بشكل كبير من كود Clean Uncle Bob's ويسرق العنوان من حديث Dashon من Kashif من 2011.

إذا كان Clean Code مهمًا لك ، فلنتحدث :) Twitter:_arunsasi LinkedIn: https://www.linkedin.com/in/arunsasidharan

إذا أحببت هذا المنشور ، يرجى ضرب القلب الصغير! ❤