مقدمة
مع تطوير Android ، نستخدم الحلول المعمارية المختلفة (الأنماط). على سبيل المثال ، Mvp ، Mvvm ، Mvi ، إلخ ... يحل كل من هذه الأنماط العديد من المشكلات المهمة ، ولأنها ليست مثالية ، فإنها تترك لنا بعض المشكلات التي لم يتم حلها. على سبيل المثال ، تتضمن هذه المهام التنقل داخل التطبيق (التوجيه) ، ونقل المعلومات من شاشة إلى أخرى (تحدث الشاشة ، أقصد النشاط ، أو التجزئة ، أو العرض) ، وحفظ حالة التطبيق عند تغيير التكوين (تغيير التكوين).
في شركتنا ، واجهنا هذه المشكلات أيضًا ، تم حل بعضها بطريقة سهلة ، لكن أولها لم يجد حلاً محددًا ، بعد تجربة طرق مختلفة لحلها ، كتبنا مكتبة Flowzard الخاصة بنا .
التحدي
في شركتنا ، نستخدم بنية Mvp . لتحقيق أقصى قدر من المرونة عند عرض البيانات وتغييرها ونقلها بين الشاشات ، نحاول اتباع المبدأ المسمى مبدأ المسؤولية الفردية . ينص المبدأ على أن كل وحدة يجب أن تحل مشكلة محددة. في حالتنا ، يجب عزل الشاشة عن المهمة العالمية ويجب أن تحل مهمتها المحددة المتمثلة في إظهار / تلقي المعلومات. يجب أن لا يعرف عن الشاشات الأخرى على الإطلاق. حتى نتمكن من تحقيق أقصى قدر من المرونة. فيما يلي مثال على إعداد واستخدام المكتبة.
Flowzard
خلق التدفق
class MainFlow(flowManager: FlowManager) : Flow(flowManager) {
إنشاء تدفق الملاح
يؤدي المستكشفون وظيفتين: إنشاء حاويات التدفق (نشاط ، تجزئة ، عرض) للتحولات بين التدفق وشاشات للتحولات داخل التدفق.
class DefaultFlowNavigator(activity: AppCompatActivity) : SimpleFlowNavigator(activity){
انجذاب إلى النشاط
لربط النشاط بـ Flow ، نرث FlowActivity ونوفر Navigator ، في حالتنا DefaultFlowNavigator.
class MainActivity : FlowActivity() { override val navigator: Navigator get() = DefaultFlowNavigator(this) }
إنشاء FlowManager
class DefaultFlowManager : FlowManager() {
المراسلة بين التدفق والشاشة
عند النقر فوق زر تسجيل الدخول ، يرسل النشاط رسالة إلى التدفق الرئيسي. ينشئ التدفق تدفق SIGN_UP وينتظر استجابة منه. في حالة نجاح تسجيل الدخول ، يرسل تدفق SIGN_UP النتيجة إلى التدفق الرئيسي و onFlowResult: يسمى MainFlow بالرمز وكائن النتيجة. يتحقق التدفق الرئيسي من صحة النتيجة ، ثم يرسل رسالة مرة أخرى إلى التنشيط الذي قام المستخدم بتسجيل الدخول بنجاح.
class MainFlow(flowManager: FlowManager) : Flow(flowManager) { companion object { const val LOGIN_REQUEST_CODE = 1 }
حفظ الحالة عند تغيير التكوين أو عندما تتوقف العملية عن نظام التشغيل
نظرًا لأن Android يحفظ مجموعات النشاط و Fragment ، فإن التدفقات التي تم إنشاؤها باستخدام هذه الحاويات ستوفر حالتها وتستعيدها. باستخدام حاوية "العرض" ، ستحتاج إلى كتابة FlowManager المخصص لأن المكتبة لا يوجد بها مثل هذا المدير بعد. في التحديث القادم ، ستكون هناك ميزة لحفظ البيانات الوسيطة من التدفق.
بما أنني لم أرغب في الحصول على الكثير من التعليمات البرمجية في المقالة ، فسأقتصر على هذا المثال. هنا رابط إلى مستودع الدراسة التفصيلية للمكتبة.