كيفية تطبيق العمارة النظيفة على الأندرويد؟

كيفية تطبيق العمارة النظيفة على الأندرويد؟


ما سوف تجد في هذا المقال؟


في عام 2016 ، بدأت أتعلم Java ، وفي بداية عام 2017 ، Android. منذ البداية ، كنت أعرف بالفعل أن هناك مفهومًا لبنية التطبيق ، لكنني لم أكن أعرف كيفية تطبيق ذلك في الكود الخاص بي. لقد وجدت العديد من الأدلة المختلفة ، لكنها لم تتضح أكثر من ذلك.


هذا المقال هو بالضبط المقال الذي أود قراءته في بداية رحلتي.


أهمية تطبيق العمارة


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


هندسة البرمجيات الجيدة تجعل من السهل فهم وتطوير وصيانة وصيانة النظام [كتاب "الهندسة المعمارية النظيفة" ، الفصل 15]

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


مثال


العناصر في RecyclerView:


عناصر في RecyclerView


  1. سوف نستلم بيانات من واجهة برمجة التطبيقات ونعرض النتائج على المستخدم.
  2. ستكون النتيجة قائمة من البيرة تحتوي على اسم ووصف ومحتوى كحول لكل منها.
  3. يجب أن يتم طلب البيرة حسب درجة الحصن.

لحل هذه المشكلة:


  1. نحن بحاجة إلى الحصول على البيانات من API.
  2. فرز العناصر من أدنى إلى أعلى درجة من القلعة.
  3. إذا كان محتوى الكحول أقل من 5 ٪ ، سيتم رسم دائرة خضراء ، إذا كانت تتراوح بين 5 ٪ و 8 ٪ - ستكون الدائرة برتقالية ، وأكثر من 8 ٪ - دائرة حمراء.
  4. أخيرًا ، نحتاج إلى عرض قائمة بالعناصر.

ما هو الحل الأقل مرونة؟


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


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


كيف نفهم بنية التطبيقات في Android؟


سأقدم مثال بسيط للغاية. تخيل مصنع سيارات بخمس مناطق:


  1. المنطقة الأولى تخلق الهيكل.
  2. المنطقة الثانية تربط الأجزاء الميكانيكية.
  3. المنطقة الثالثة تجمع الدائرة الإلكترونية.
  4. المنطقة الرابعة هي الطلاء.
  5. وتضيف المنطقة الأخيرة التفاصيل الجمالية.

هذا يعني أن كل منطقة لها مسؤوليتها الخاصة ، وأنها تعمل في سلسلة من المنطقة الأولى إلى الخامسة لتحقيق نتيجة.


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


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


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


تطبيق هندسة أندرويد


سنحرص على عدم وجود فصل يمكنه القيام بجميع الأعمال بمفرده: طلب بيانات من واجهة برمجة التطبيقات (API) وفرزها وعرضها. سيتم توزيع كل هذا على عدة مناطق تسمى الطبقات.


ما هي هذه الطبقات؟


طبقات بنية أندرويد


على سبيل المثال ، سنقوم بإنشاء بنية نظيفة ، تتكون من ثلاثة مستويات ، والتي بدورها سيتم تقسيمها إلى خمسة:


  1. مستوى العرض.
  2. مستوى منطق العمل.
  3. ومستوى البيانات.

1. مستوى العرض


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


في المثال الخاص بنا ، يتم تقسيم هذه العمليات بين طبقة واجهة المستخدم ومستوى ViewModel:


  • تحتوي طبقة واجهة المستخدم على النشاط والشظايا التي تلتقط أحداث المستخدم وتعرض البيانات.
  • تقوم طبقة ViewModel بتنسيق البيانات بحيث تعرضها واجهة المستخدم بطريقة محددة.

بدلاً من استخدام ViewModel ، يمكننا استخدام طبقة أخرى تؤدي هذه الوظيفة ، من المهم ببساطة فهم مسؤوليات كل طبقة.


في مثالنا ، تعرض طبقة واجهة المستخدم قائمة من البيرة ، وتبلغ طبقة ViewModel عن اللون الذي يجب عليك استخدامه حسب نطاق الكحول.


2. مستوى منطق العمل


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


3. طبقة البيانات


في هذا المستوى هي البيانات وطريقة الوصول إليها.


يتم تقسيم هذه العمليات بين مستوى المخزون ومستوى مصدر البيانات:


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

كيف تتفاعل الطبقات؟


دعونا نلقي نظرة على النهج النظرية والعملية للتفاعل.


من الناحية النظرية:


التفاعل بين الطبقات


يجب على كل طبقة التواصل فقط مع جيرانها المباشرين. في هذه الحالة ، إذا نظرنا إلى مخطط بنية البرنامج:


  • يمكن لواجهة المستخدم التواصل مع ViewModel فقط.
  • يمكن لـ ViewModel التواصل فقط مع مستوى منطق العمل.
  • يمكن لمستوى منطق العمل التواصل فقط مع مستوى مستودع التخزين.
  • ويمكن للمستودع التواصل فقط مع مصدر البيانات.

في الممارسة العملية:


بنية الحزمة في Android Studio IDE بهندسة نظيفة:


هيكل الحزمة


لدينا بنية الحزمة التي يتم فيها إنشاء الفئات ، ولكل منها مجال مسؤوليتها.


الملاحظات الختامية على بنية التطبيق


لقد رأينا أن كل مستوى من مستويات بنية البرنامج له مجال مسؤوليته الخاصة وأن جميعها مترابطة.


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


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


أشارك مستودعًا حيث يمكنك رؤية:


  • مثال على بنية أندرويد النظيفة مع Kotlin.
  • استخدم LiveData لتوصيل واجهة المستخدم بـ ViewModel.
  • استخدام كوروتين.
  • Kodein لحقن التبعية.
  • JUnit و Mockito لاختبار منطق الأعمال.

Source: https://habr.com/ru/post/ar459402/


All Articles