استرجع بيننا
هذا هو واحد من أكثر
مديري الدولة شعبية.
إنه سهل الاستخدام وشفاف ويمكن التنبؤ به. مع ذلك ، يمكنك تنظيم تخزين وتعديل البيانات. وإذا افترضنا أن
الإجراء والمخفض هما جزء من عملية
الإعادة ، فيمكننا القول دون مبالغة أنه صاحب كل منطق مجال الموضوع (ويعرف أيضًا باسم منطق العمل) في طلباتنا.
هو كل شيء وردية جدا؟
على الرغم من بساطته وشفافيته ، فإن استخدام
redux له عدد من العيوب ...
البيانات في
الحالة "
مسترجعة " وتكمن في كائن
جافا سكريبت بسيط ويمكن الحصول عليها بالطريقة المعتادة ، ما عليك سوى
معرفة المسار .
لكن كيف ننظم هذه البيانات؟ لا يوجد سوى خياران:
قائمة مسطحة ونموذج هرمي .
تعتبر القائمة المسطحة خيارًا رائعًا للتطبيق الذي يوجد به فقط ، على سبيل المثال ، عداد ... لشيء أكثر خطورة ، نحتاج إلى بنية هرمية. بالإضافة إلى ذلك ، سيكون لكل مستوى من البيانات معرفة أقل من المستوى السابق. كل شيء منطقي ومفهوم ، ولكن يصبح
مسار البيانات مركبًا .
مثالconst dataHierarchy = { user: { id, name, experience, achievements: { firstTraining, threeTrainingsInRow, }, }, training: { currentSetId, status, totalAttemptsCount, attemptsLeft, mechanics: { ... }, }, };
هنا ، تحت مفتاح المستخدم ، يتم تخزين بيانات المستخدم ، ولا سيما
الإنجازات . لكن الإنجازات لا تحتاج إلى معرفة أي شيء عن بقية بيانات المستخدم.
بنفس الطريقة ، لا تحتاج آليات التدريب المحددة إلى معرفة عدد المحاولات التي تركها المستخدم - إنها بيانات تدريب بشكل عام.
يؤدي وجود بنية بيانات هرمية وعدم وجود نهج وحدات لهذه البيانات إلى حقيقة أنه
في كل مكان يتم فيه استخدام هذه البيانات ،
من الضروري معرفة المسار الكامل لها. بمعنى آخر ، يؤدي هذا إلى
تماسك بنية تخزين البيانات وهياكل العرض الخاصة به ويؤدي إلى صعوبات مع refactor المسار و / أو إعادة تنظيم بنية البيانات.

IDE السحر لن يساعديمكننا أن نقول الآن أن هناك IDEs قوية تقوم بتغيير المسارات بأمر واحد ، لكن القليل يمكن أن يغير عدة مفاتيح متداخلة لكائن أو يفهم أن جزءًا من المسار يكمن في متغير.
التحدي الآخر هو الاختبار. نعم ، هناك مقالة منفصلة في وثائق اختبار
الإعادة ، لكن الآن لا يتعلق الأمر باختبار القطع الأثرية الفردية مثل
المخفض و
Action-creater .
وعادة ما تكون مترابطة البيانات ، والعمل
سيصدره المخفض . غالبًا ما يتم تقديم شجرة واحدة من البيانات ذات الصلة المنطقية بواسطة عدة
مخفضات ، والتي تحتاج إلى اختبار بما في ذلك معًا.
إضافة إلى هذه القائمة
محدد ، والتي تعتمد نتائجها بشكل خاص على عمل
المخفض ...
بشكل عام ، يمكنك اختبار كل هذا ، ولكن عليك التعامل مع مجموعة من القطع الأثرية المرتبطة ببعضها البعض فقط عن طريق المنطق والاتفاقيات.
وماذا لو توصلنا إلى هيكل ، على سبيل المثال ، مع بيانات المستخدم ، بما في ذلك قوائم الأصدقاء والأغاني المفضلة وشيء آخر ، بالإضافة إلى وظيفة تغييرها من خلال
مخفضات الإجراءات . ربما كتبنا حتى مجموعة من الاختبارات لجميع هذه الوظيفة. والآن في المشروع التالي نحتاج إلى نفس الشيء ...
كيفية رمز بثمن بخس؟ابحث عن حل
لمعرفة كيفية الحفاظ على فوائد
الإعادة والتخلص من العيوب الموصوفة ، تحتاج إلى فهم ما يعتمد عليه في دورة حياة البيانات:
- أحداث الأحداث سيصدره ، والعرف وأكثر من ذلك
- رد فعل المخفض إلى العمل وتغيير أو عدم تغيير حالة البيانات
- تغيير البيانات حدث بحد ذاته وقد يتسبب في تغيير البيانات الأخرى.
تعتبر وحدة التحكم في هذه الحالة عبارة عن تجريد يعالج إجراءات المستخدم وتغييرات البيانات في
المتجر . ليس من الضروري أن يكون فصلًا منفصلاً على الإطلاق ، وكقاعدة عامة ، يتم نشره بواسطة المكونات.
الجمع بين جميع حديقة الحيوانات المعادة في صندوق أسود
لكن ماذا لو قمنا
بلف التصرف و
المخفض و
المحدد في وحدة نمطية واحدة
وعلمناه عدم الاعتماد على المسار المحدد لموقع بياناته؟
ماذا لو كانت جميع إجراءات
المستخدم ، على سبيل المثال ، ملتزمة من خلال استدعاء طريقة المثيل:
user.addFriend (friendId) ؟ ويتم الحصول على البيانات من خلال getter:
user.getFriendsCount () ؟
ماذا لو استطعنا استيراد جميع وظائف المستخدم
باستيراد بسيط؟
const userModule from 'node_modules/user-module';
هل هي مريحة؟ خاصة وأنك لا تحتاج إلى كتابة مجموعة من الرموز الإضافية:
توفر الحزمة npm redux-module-creator جميع الوظائف اللازمة لإنشاء
وحدات مسترجعة فضفاضة ، قابلة لإعادة الاستخدام ، ومختبرة .
تتكون كل وحدة من
وحدة تحكم ومخفض الحركة وإجراء ما ، وتتمتع بالميزات التالية:
- يدمج في المتجر من خلال دعوة لطريقة التكامل ، ولتغيير مكان التكامل ، تحتاج إلى تغيير مكان مكالمة الموحد والمعلمة الخاصة به فقط

- وحدة التحكم لديها اتصال مع جزء من البيانات في المخزن ، وتذكر المسار الذي تم تمريره إلى integrator () مرة واحدة. هذا يلغي الحاجة إلى معرفة ذلك عند استخدام البيانات.

- جهاز التحكم هو حامل جميع المحددات والمحولات الضرورية ، إلخ.
- لتتبع التغييرات ، من الممكن الاشتراك في التغييرات في البيانات الخاصة بك
- يمكن أن يستخدم المخفض سياق الاتصال - مثيل للوحدة والحصول على actionType سيصدره الوحدة. هذا يلغي الحاجة لاستيراد مجموعة من الإجراءات ويقلل من احتمال حدوث خطأ.
- الإجراء سيحصل على سياق الاستخدام ، لأنهم يصبحون جزءًا من مثيل الوحدة النمطية: الآن ، لا يقتصر الأمر على التدريب ، بل إنه يقرأModule.actions.trainingFinished
- يوجد الإجراء الآن في مساحة اسم الوحدة النمطية ، والذي يسمح لك بإنشاء أحداث بنفس الاسم لوحدات نمطية مختلفة
- يمكن إنشاء مثيل لكل وحدة عدة مرات ، ويتم دمج كل مثيل في أجزاء مختلفة من المتجر
- يحتوي الإجراء الخاص بمثيلات الوحدة النمطية المختلفة على نوع مختلف من الإجراء - يمكنك الرد على أحداث مثيل معين
نتيجة لذلك ، حصلنا على مربع أسود يمكنه إدارة بياناته بنفسه ولديه مقابض للتواصل مع الكود الخارجي.
في الوقت نفسه ، هو نفس
الإعادة ، مع تدفق البيانات أحادي الاتجاه والشفافية والقدرة على التنبؤ.
ونظرًا لأن هذه جميعها هي نفس عمليات الاستعادة وكلها تعمل على
تقليل نفس
المخفضات ، يمكنك إنشاء أي بنية منها يتطلبها مجال مجال التطبيق.