رح انشر الان سلسلة فيها جواب لسؤال انطرح من أحد المطورين،
السؤال:
شو هو الفرق الجوهري بالخيارات الخاصة ب state & data mangment
وهم bloc pattern, redux, mobx اذا حدا عندو الخبرة فيهم. وهل ضروري اتعلمهم كلهم انا بعرف bloc pattern ؟
#Flutter #State_Managment
السؤال:
شو هو الفرق الجوهري بالخيارات الخاصة ب state & data mangment
وهم bloc pattern, redux, mobx اذا حدا عندو الخبرة فيهم. وهل ضروري اتعلمهم كلهم انا بعرف bloc pattern ؟
#Flutter #State_Managment
الجواب (1/10):
هادا يا طويل العمر :
أول نوع redux : المستوحى من فيسبوك ، وبرأيي أسوأ خيار ممكن يتخذه المبرمج بسبب كترة الأكواد الي لازم يكتبها ، لازم بأيده يكتب الأكواد الي تحفظ الحالة متل يعمل ToString ل Classes تبعونه وكمان لازم لما تنادي على أية دالة تنادي بطريقة غير مباشرة
هادا يا طويل العمر :
أول نوع redux : المستوحى من فيسبوك ، وبرأيي أسوأ خيار ممكن يتخذه المبرمج بسبب كترة الأكواد الي لازم يكتبها ، لازم بأيده يكتب الأكواد الي تحفظ الحالة متل يعمل ToString ل Classes تبعونه وكمان لازم لما تنادي على أية دالة تنادي بطريقة غير مباشرة
الجواب (2/10):
عن طريق دالة وحدة بيسموها dispatcher هي الدالة بيكون الها معطى ActionType جوا هي الدالة بيكون في select case على حسب الأكشن بيتم نداء الدالة الازمة ، صعب كتير أنك تتنقل بالكود وتفهمه بسبب استخدام هالاسلوب غير انه في كتييير أكواد زيادة على المبرمج لازم يكتبها لحتى
عن طريق دالة وحدة بيسموها dispatcher هي الدالة بيكون الها معطى ActionType جوا هي الدالة بيكون في select case على حسب الأكشن بيتم نداء الدالة الازمة ، صعب كتير أنك تتنقل بالكود وتفهمه بسبب استخدام هالاسلوب غير انه في كتييير أكواد زيادة على المبرمج لازم يكتبها لحتى
الجواب (3/10):
يحقق مبدأ ال Redux ،غير أنه البرنامج تبعك كله لازم يكون مرتبط ب object واحد لإدارة الحالة الخاصة فيه.
مقدمة صغيرة قبل لا كمل Stream : هو مجموعة من الأحداث لنوع معين من البيانات فيك تضيف عليهم حدث عن طريق نداء الدالة الخاصبة بال stream والي اسمها Sink او فيك تتنصت
يحقق مبدأ ال Redux ،غير أنه البرنامج تبعك كله لازم يكون مرتبط ب object واحد لإدارة الحالة الخاصة فيه.
مقدمة صغيرة قبل لا كمل Stream : هو مجموعة من الأحداث لنوع معين من البيانات فيك تضيف عليهم حدث عن طريق نداء الدالة الخاصبة بال stream والي اسمها Sink او فيك تتنصت
الجواب (4/10):
على هي الأحداث يدويا عن طريق نداء الدالة الخاصة بال Stream والي اسمها listen أو فيك تتنصت على هي الأحداث من داخل شاشات فلاتر Flutter widget tree عن طريقة Widget اسمها StreamBuilder
ال Bloc : بيعتمد على مبدأ واحد أنه الداخل والخارج لازم يكون يا Sink يا Stream
على هي الأحداث يدويا عن طريق نداء الدالة الخاصة بال Stream والي اسمها listen أو فيك تتنصت على هي الأحداث من داخل شاشات فلاتر Flutter widget tree عن طريقة Widget اسمها StreamBuilder
ال Bloc : بيعتمد على مبدأ واحد أنه الداخل والخارج لازم يكون يا Sink يا Stream
الجواب (5/10):
يعني مثلا لما المستخدم بيضغط على زر تسجيل الدخول من الواجهة ما فيك بالكود فورا تنادي void او function لازم تضيف مدخل على sink تبع stream تسجيل الدخول
ال mobx : هو متل ال bloc من ناحية اعتماده على Streams من أجل تعديل شاشات فلاتر بس فيه توليد تلقائي للأكواد لحتى
يعني مثلا لما المستخدم بيضغط على زر تسجيل الدخول من الواجهة ما فيك بالكود فورا تنادي void او function لازم تضيف مدخل على sink تبع stream تسجيل الدخول
ال mobx : هو متل ال bloc من ناحية اعتماده على Streams من أجل تعديل شاشات فلاتر بس فيه توليد تلقائي للأكواد لحتى
الجواب (6/10):
يخفف من كمية الأكواد الي لازم يكتبها المبرمج لما بيتعامل مع Stream Sink والقصص المرتبطة فيهم.
رأيي بالموضوع:
لا تقرب على Redux لأنه في عبئ زايد على المبرمج ماله داعي وبيصعب عملية فهم الكود، اعمل بالبرنامج تبعك كلاس سميه AppBloc مثلا وحط فيه Streams و functions
يخفف من كمية الأكواد الي لازم يكتبها المبرمج لما بيتعامل مع Stream Sink والقصص المرتبطة فيهم.
رأيي بالموضوع:
لا تقرب على Redux لأنه في عبئ زايد على المبرمج ماله داعي وبيصعب عملية فهم الكود، اعمل بالبرنامج تبعك كلاس سميه AppBloc مثلا وحط فيه Streams و functions
الجواب(7/10):
للأمور الي بتحتاجها من أكثر من مكان بالبرنامج مثلا متل showAlertMessage و loggedIn و .... الخ . بسسسسسس أهم شي لا تلتزم بمبدأ ال Bloc بأنه أي مدخل لازم يكون عن طريق Sink لأنه بدل ما يكون الكود تبعك :
login(String username,String password)
للأمور الي بتحتاجها من أكثر من مكان بالبرنامج مثلا متل showAlertMessage و loggedIn و .... الخ . بسسسسسس أهم شي لا تلتزم بمبدأ ال Bloc بأنه أي مدخل لازم يكون عن طريق Sink لأنه بدل ما يكون الكود تبعك :
login(String username,String password)
الجواب(8/10):
رح يصير الكود تبعك
class LoginInfo{
String usernamej;
String password;
}
Function login(LoginInfo loginInfo) get => loginStreamCotroller.sink.add;
هنن عملوا هادا الشرط المتعب ب Bloc للناس الي بدها تشارك نفس البرنامج تبعها بين Flutter وبين AngularDart .......
رح يصير الكود تبعك
class LoginInfo{
String usernamej;
String password;
}
Function login(LoginInfo loginInfo) get => loginStreamCotroller.sink.add;
هنن عملوا هادا الشرط المتعب ب Bloc للناس الي بدها تشارك نفس البرنامج تبعها بين Flutter وبين AngularDart .......
الجواب(9/10):
وبعد هيك أي شاشة بالبرنامج تبعك اعملها bloc خاص فيها بنفس الطريقة الي حكيتها فوق، بالنسبة ل mobx ما شفت الها داعي تعقيد زايد لو تعتمد على Stream بشكل مباشر أسهلك.
وبعد هيك أي شاشة بالبرنامج تبعك اعملها bloc خاص فيها بنفس الطريقة الي حكيتها فوق، بالنسبة ل mobx ما شفت الها داعي تعقيد زايد لو تعتمد على Stream بشكل مباشر أسهلك.
الجواب(10/10):
في دورة صغيرة شغال عليها لو بتحب فيك تتابعها ان شاء الله ناوي اعتمد فيها على ال Stream بإدارة الحالةstate managment .
#Flutter
في دورة صغيرة شغال عليها لو بتحب فيك تتابعها ان شاء الله ناوي اعتمد فيها على ال Stream بإدارة الحالةstate managment .
#Flutter
جاري تحميل الاقتراحات...