حول هندسة Redux في تطبيقات Flutter

في الآونة الأخيرة كان هناك مقال عن العمارة النظيفة في Flutter. أرغب في تغطية الموضوع من زاوية مختلفة قليلاً وتطوير موضوع إدارة الحالة العالمية باستخدام Redux.

والقليل عن نفسي: أقوم بإنشاء منتجات تجارية منذ حوالي 10 سنوات ، أعمل منها في Flutter منذ ما يقرب من عامين ، وتمكنت من تجربة جميع مديري الدولة المشهورين. يستحضر البعض ذكريات محايدة - BLoC ، Provider ، كتلة فئة عالمية بتدفقاتها الخاصة ، وبعضها سلبي - MobX.

نتيجة لذلك ، بالنسبة لي ، استقرت على Redux للحالة العالمية والمكتبات لتنفيذ هيكل التطبيق:

  • بنيت_القيمة

  • المجموعة المبنية

  • rxdart (اختياري)

  • flutter_simple_dependency_injection (أو dioc)

  • بنيت _ مسترجع

هذا هو الحد الأدنى من مجموعة المكتبات الخاصة بي لتنفيذ المشاريع من أي مستوى.

الآن خطوة بخطوة

الهيكل العام للتطبيق

الهيكل العام للتطبيق
الشكل:  1. الهيكل العام للتطبيق
الشكل: 1. الهيكل العام للتطبيق

  جميع المجلدات الموجودة في الجذر قياسية ، ويتم إنشاؤها تلقائيًا ، ولكن هناك مجلدات إضافية:

  • build.yaml - built_value,

  • analysis_options.yaml - . .

  • scripts - /// : , , , Flutter, . -. : prepare_app - Flutter, prepare_app_hover - hover. , ( ) dartfix -

  • application_bundle - . , JSON - - "" , , ..

-
الشكل:  2. مثال على المراسلات المسبقة
. 2. -

الشكل:  3. مثال من مجموعة من النصوص
. 3.

Flutter-

lib :

  • domain - : , , , , , ,

  • tools -

  • di - ,

  • features - UI , ,

  • services - , , ,

  • app - . MaterialApp CupertinoApp

  • app_routes.dart -

Domain

-
الشكل:  4. مثال على تطبيق النموذج الطبقي
. 4. -

  • actions

    built_redux Redux-

-
الشكل:  5. مثال على تنفيذ فئة نموذج العمل
. 5. -

  • middlewares

, built_redux

-
الشكل:  6. مثال على تنفيذ فئة البرامج الوسيطة
. 6. -

  • epics

    . built_redux. rxdart

-
الشكل:  7. مثال على تنفيذ الطبقة الملحمية
. 7. -

  • reducers

,

-
الشكل:  8. مثال على تنفيذ فئة المخفض
. 8. -

  • states

    Redux. - - AppState, : , .. built_redux

-
الشكل:  9. مثال على تطبيق الدولة الطبقية
. 9. -

DI

. flutter_simple_dependency_injection

الشكل:  10. مثال على تنفيذ عكس التبعيات
. 10.

Features

- , . - blocs, components, widgets, tools. - widgets . (BLoC) - , . - - . StatefulWidget’

  • initState

  • - StreamBuilder’

  • dispose

components - -,

BLoC

- -. , di-. ,   -

BLoC
الشكل:  11. مثال على فئة BLoC أساسية مجردة
. 11. BLoC

- BaseBloc .

BLoC-
الشكل:  12. مثال على فئة BLoC
. 12. BLoC-

  :

  1. ,

  2. . / , , . , - (, , , ..), ( , , , nextSubstate)

-

الشكل:  13. مثال على طريقة لاستدعاء إجراء
. 13.

StreamBuilder:

الشكل:  14. تقديم التغييرات الحالة
. 14.

, , , .

:

  1. . , . 300 2

  2. Redux , ,

:

  1. , , built_value “ ”

  2. Redux

  3. /

  4. . , 13 Flutter ,

  5. , UI - , ( Redux , )

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

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




All Articles