الإعادة هي مثل حاويات الحالة في SwiftUI. توصيات

صورة

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

حالة التطبيع


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

struct AppState { var allTasks: [Task] var favorited: [Task] } 

هناك بنية AppState التي تخزن قائمة من المهام البسيطة والمختارة . يبدو بسيطًا ، لكن به عيب واحد كبير. افترض أن هناك شاشة لتحرير المهام حيث يمكنك تغيير المهمة المحددة. عندما ينقر المستخدم على زر "حفظ" ، نحتاج إلى البحث عن مهمة محددة ثم تحديثها في قائمة جميع المهام (جميع المهام) ، وفي قائمة المهام المفضلة (المحددة). يمكن أن يؤدي ذلك إلى حدوث أخطاء ومشاكل في الأداء إذا كانت قائمة المهام كبيرة جدًا.

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

 struct AppState { var tasks: [Int: Task] var allTasks: [Int] var favorited: [Int] } 

كما هو موضح في المثال أعلاه ، يتم تخزين المهام في القاموس ، حيث يكون معرف معرف المهمة هو المفتاح ، وتكون المهمة نفسها هي القيمة. يتم تخزين صفيف المعرفات لجميع المهام والمهام المحددة. نحقق حالة من الاستقرار تزامن واجهة المستخدم والبيانات.

الدولة التكوينية


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

 struct AppState { var calendar: CalendarState var trends: TrendsState var settings: SettingState } 

في مثال الكود أعلاه ، نقسم حالتنا إلى ثلاثة أجزاء منفصلة ونجمعها في AppState.

المخفض التكويني


مكون هام آخر من حاوية الحالة Redux-like هو المخفض نفسه. يمكن استخراجها ودمجها ، كما كان الحال مع هيكل الدولة. سيسمح لنا ذلك بالامتثال لمبدأ المسؤولية الفردية والحفاظ على كائنات مثل المخفضات ذات الأحجام الصغيرة.

 enum AppAction { case calendar(action: CalendarAction) case trends(action: TrendsAction) } let trendsReducer: Reducer<TrendsState, TrendsAction> = Reducer { state, action in // Implement your state changes here } let calendarReducer: Reducer<CalendarState, CalendarAction> = Reducer { state, action in // Implement your state changes here } let appReducer: Reducer<AppState, AppAction> = Reducer { state, action in switch action { case let .calendar(action): calendarReducer.reduce(&state.calendar, action) case let .trends(action): trendsReducer.reduce(&state.trends, action) } } 

استنتاج


تحدثنا اليوم عن استراتيجيتين مهمتين يجب أن نستخدمهما عند تطوير التطبيقات التي تستخدم حاويات حالة Redux-like في SwiftUI. كلا التطبيع والتكامل يجعل التطبيق الذي تم إنشاؤه أكثر بساطة وأكثر قابلية للفهم. أتمنى أن تستمتعوا بهذا المقال.

شكرا على القراءة ونراكم الأسبوع المقبل!

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


All Articles