مدیریت خطای کمی بیشتر – انجمن DEV

Summarize this content to 400 words in Persian Lang
چارچوب کمی بیشتر برای Flutter Framework باعث ایجاد برنامه های بهتر می شود
بخشی از سری “بیشتر کوچک”، این مقاله به جزئیات رسیدگی به خطا هنگام استفاده از چارچوب Fluttery در دسترس شماست.
خطاهای خود را مدیریت کنید درست است، شما بزرگترین برنامه نویسی هستید که تا به حال زندگی کرده اید و کد شما هرگز خراب نمی شود. با این حال، من کدی را در آنجا می بینم که فرض می کند همه چیز طبق انتظار اجرا می شود، و ما می دانیم که خوب نیست. کد شما باید موارد غیرمنتظره را پیش بینی کند. آن باید! در اینجا چگونه است.
داستان های دیگر از گرگ پری
در اولین اسکرین شات زیر، شاهد راه اندازی یک برنامه نمونه Fluttery Framework هستیم. توجه داشته باشید، این سنت شما نیست runApp() تابع. اصلی runApp() تابع فراخوانی می شود، اما نه قبل از ایجاد برخی خطاها در ابتدا (نمایش دوم را در زیر ببینید).
حتی قبل از آن، هنگام استفاده از Fluttery، اگر ویجت نمونه سازی شده و به آن منتقل شود runApp() تابع کلاس را گسترش می دهد، AppStatefulWidget، شیء کلاس AppErrorHandler را درست در سازنده خود ایجاد می کند (نگاه کنید به تصویر سوم). و بنابراین، از همان ابتدا، برنامه شما دارای یک Error Handler آماده کار است! برای مشاهده کد، روی زیرنویس اسکرین شات ضربه بزنید.
اصلی.دارت
run_app.dart
app_statefulwidget.dart
اگر دوست دارید، میتوانید مجدداً با Error Handler برنامه تماس بگیرید (به زیر مراجعه کنید) و هر کنترل کننده خطای شخص ثالث (Firebase Crashlytics، Catcher 2 و غیره) را ایجاد کنید. سپس آنها به روشی که انجام می دهند برای شما خطاها را دریافت می کنند.
working_memory_app.dart
وضعیت خطا
در ویدیوی زیر، با هر ضربه زدن روی دکمه یک استثنا وجود دارد، اما شما هرگز آن را نمی دانید. استثنا همانجا در کلاس State شناسایی می شود که منجر به افزایش صحیح شمارنده می شود.
در Fluttery، هر شیء State می تواند مدیریت خطای خود را انجام دهد. تصور کنید هر از گاهی یک خطای خاص در برنامه شما ایجاد می شود. برای مثال یک افت شبکه. هر چه که باشد، برنامه شما در شرایط خاصی با خطا مواجه می شود، اما شما برای آن آماده هستید. شی State شما دارای یک کنترل کننده خطا داخلی است:
void onError(FlutterErrorDetails details) {
این ویدیو برنامه نمونه خود Fluttery Framework را به تصویر می کشد. شما می توانید در اولین تصویر زیر، a FloatingActionButton ویجت (اگر برنامه را آزمایش نکنید) به صراحت یک استثنا ایجاد می کند. اسکرین شات دوم مربوط به شی موجود در State است. کنترل کننده خطا آن را فراخوانی می کند در مطبوعات() در پاسخ به این خطای خاص عمل می کند و شمارنده را با موفقیت افزایش می دهد.
app_counter.dart
app_counter.dart
این یک مثال بسیار ساده است، اما در اینجا پتانسیل را برای مدولار کردن مدیریت خطا در برنامه شما نشان می دهد. جداسازی بخش هایی از کد شما که بیشتر در معرض خطا هستند، به سادگی یک برنامه قابل اعتمادتر و قوی تر را ایجاد می کند.
آن را منتقل کنید
اکنون خطا تا درخت ویجت ادامه می یابد. ممکن است توسط شی State مدیریت شود، اما هر خطا یک “خطای برنامه” است و توسط شی State برنامه به تنهایی ثبت می شود. یک خطا() تابع. به عنوان مثال، خطای معرفی شده در بالا از شبیه ساز تلفن اجرا می شود. از این رو، خطا در نهایت در صفحه کنسول IDE گزارش می شود. زیر را ببینید.
وقتی میگویم «بهوسیله شیء دولت اداره میشود»، منظورم این است که خطا را تصدیق میکند و حتی ممکن است به خطا رسیدگی کند. با این حال، پس از آن، هر خطایی باید بیشتر تا کنترل کننده خطای برنامه منتشر شود. شما نمیخواهید که خطاهای ظاهراً کنترل شده در یک شیء State متوقف شوند یک خطا() تابع. من احساس می کنم چنین ترتیبی مستعد سوء استفاده است – توسعه دهندگان با تمام وجود انتشار را متوقف می کنند و خطاها را نادیده می گیرند! این هم خوب نخواهد بود.
نه، توسعه دهندگانی که بر برنامه به عنوان یک کل نظارت دارند (یعنی با دسترسی به شیء وضعیت برنامه) باید حرف آخر را بزنند و هر خطا را در Error Handler خود برطرف کنند. به نحوه عملکرد Fluttery برای توسعه دهنده تنها و همچنین در یک محیط تیمی توجه کنید.
علاوه بر این، آیا می بینید که چگونه Fluttery به طور طبیعی کد برنامه را تقسیم می کند؟ من احساس میکنم فلاتر بهطور طبیعی همانطور که مهندسان گوگل در نظر داشتند، «مرکز حالت شی» است. هر شیء ایالتی میتواند بهعنوان برنامه خاص خود بهعنوان یک معنا باشد، و این مفهوم تنها با استفاده از بسته Fluttery Framework برجسته میشود.
در مورد شیء App State، دارای دو Error Handler است. ممکن است شما یک Error Handler شخص ثالث ایجاد کرده باشید، و آنها مطمئناً خطاها را دریافت خواهند کرد، اما این خطاها همچنین از طریق onError Handler() تابع و inError Handler() در صورتی که آنها را پیاده سازی کرده اید، عمل کنند.
متوجه خواهید شد که شیء وضعیت برنامه دارای تعدادی توابع با پیشوند «روشن» و «در» است (به Little More Adaptive مراجعه کنید). به طور سنتی، نسخه «روشن»، در صورت اجرا، جایگزین نسخه «در خط» خواهد شد. با این حال، من آنقدر بر مدیریت خطا تأکید کرده ام که به هر دو نسخه «روشن» و «در خط» اجازه می دهم به نوبه خود اجرا شوند. در ذهن من، شما نمی توانید به اندازه کافی Error Handling داشته باشید! اگر می خواهید هر دو را اجرا کنید.
دو تصویر زیر نحوه استفاده از آنها را نشان می دهد. نسخه «روشن» در اولین تصویر زیر آمده است – یک تابع مستقل که پس از کنترل خطای شخص ثالث در صورت فراخوانی فراخوانی می شود، یا به تنهایی در پاسخ به یک خطا در برنامه فراخوانی می شود. اسکرین شات دوم نسخه “در خط” را نشان می دهد. همیشه یافت می شود که به سازنده App State منتقل می شود و همیشه بلافاصله بعد از نسخه «روشن» فراخوانی می شود.
می توانید ببینید که من حتی شیء State را لغو کرده ام یک خطا() تابع. در صورت لزوم می توانید آن را نادیده بگیرید. با این حال، لطفاً خطاها را نادیده نگیرید – در نهایت به نفع کسی نخواهد بود. صرف نظر از این، شما قدرت کاملی بر مدیریت خطاهای برنامه خود دارید.
app.dart
app.dart
با فلاتری، هیچ بهانه ای ندارید. با وجود مهارت آشکار شما، خطاهایی در کد شما رخ می دهد. Fluttery از شما دعوت میکند تا خطاها را در جایی که احتمال رخ دادن آنها وجود دارد را تأیید کنید – درست در شیء در حال اجرا State. سپس به اولین شیء State برنامه می روند. این کلاسی است که نه تنها نحوه ظاهر و رفتار برنامه را کنترل می کند، بلکه نحوه رسیدگی به خطاهای آن را نیز کنترل می کند.
به سلامتی.
← سری “کمی بیشتر”.
← داستان های دیگر از گرگ پری
چارچوب کمی بیشتر برای Flutter Framework باعث ایجاد برنامه های بهتر می شود
بخشی از سری “بیشتر کوچک”، این مقاله به جزئیات رسیدگی به خطا هنگام استفاده از چارچوب Fluttery در دسترس شماست.
خطاهای خود را مدیریت کنید درست است، شما بزرگترین برنامه نویسی هستید که تا به حال زندگی کرده اید و کد شما هرگز خراب نمی شود. با این حال، من کدی را در آنجا می بینم که فرض می کند همه چیز طبق انتظار اجرا می شود، و ما می دانیم که خوب نیست. کد شما باید موارد غیرمنتظره را پیش بینی کند. آن باید! در اینجا چگونه است.
در اولین اسکرین شات زیر، شاهد راه اندازی یک برنامه نمونه Fluttery Framework هستیم. توجه داشته باشید، این سنت شما نیست runApp() تابع. اصلی runApp() تابع فراخوانی می شود، اما نه قبل از ایجاد برخی خطاها در ابتدا (نمایش دوم را در زیر ببینید).
حتی قبل از آن، هنگام استفاده از Fluttery، اگر ویجت نمونه سازی شده و به آن منتقل شود runApp() تابع کلاس را گسترش می دهد، AppStatefulWidget، شیء کلاس AppErrorHandler را درست در سازنده خود ایجاد می کند (نگاه کنید به تصویر سوم). و بنابراین، از همان ابتدا، برنامه شما دارای یک Error Handler آماده کار است! برای مشاهده کد، روی زیرنویس اسکرین شات ضربه بزنید.
اگر دوست دارید، میتوانید مجدداً با Error Handler برنامه تماس بگیرید (به زیر مراجعه کنید) و هر کنترل کننده خطای شخص ثالث (Firebase Crashlytics، Catcher 2 و غیره) را ایجاد کنید. سپس آنها به روشی که انجام می دهند برای شما خطاها را دریافت می کنند.
وضعیت خطا
در ویدیوی زیر، با هر ضربه زدن روی دکمه یک استثنا وجود دارد، اما شما هرگز آن را نمی دانید. استثنا همانجا در کلاس State شناسایی می شود که منجر به افزایش صحیح شمارنده می شود.
در Fluttery، هر شیء State می تواند مدیریت خطای خود را انجام دهد. تصور کنید هر از گاهی یک خطای خاص در برنامه شما ایجاد می شود. برای مثال یک افت شبکه. هر چه که باشد، برنامه شما در شرایط خاصی با خطا مواجه می شود، اما شما برای آن آماده هستید. شی State شما دارای یک کنترل کننده خطا داخلی است:
void onError(FlutterErrorDetails details) {
این ویدیو برنامه نمونه خود Fluttery Framework را به تصویر می کشد. شما می توانید در اولین تصویر زیر، a FloatingActionButton ویجت (اگر برنامه را آزمایش نکنید) به صراحت یک استثنا ایجاد می کند. اسکرین شات دوم مربوط به شی موجود در State است. کنترل کننده خطا آن را فراخوانی می کند در مطبوعات() در پاسخ به این خطای خاص عمل می کند و شمارنده را با موفقیت افزایش می دهد.
این یک مثال بسیار ساده است، اما در اینجا پتانسیل را برای مدولار کردن مدیریت خطا در برنامه شما نشان می دهد. جداسازی بخش هایی از کد شما که بیشتر در معرض خطا هستند، به سادگی یک برنامه قابل اعتمادتر و قوی تر را ایجاد می کند.
آن را منتقل کنید
اکنون خطا تا درخت ویجت ادامه می یابد. ممکن است توسط شی State مدیریت شود، اما هر خطا یک “خطای برنامه” است و توسط شی State برنامه به تنهایی ثبت می شود. یک خطا() تابع. به عنوان مثال، خطای معرفی شده در بالا از شبیه ساز تلفن اجرا می شود. از این رو، خطا در نهایت در صفحه کنسول IDE گزارش می شود. زیر را ببینید.
وقتی میگویم «بهوسیله شیء دولت اداره میشود»، منظورم این است که خطا را تصدیق میکند و حتی ممکن است به خطا رسیدگی کند. با این حال، پس از آن، هر خطایی باید بیشتر تا کنترل کننده خطای برنامه منتشر شود. شما نمیخواهید که خطاهای ظاهراً کنترل شده در یک شیء State متوقف شوند یک خطا() تابع. من احساس می کنم چنین ترتیبی مستعد سوء استفاده است – توسعه دهندگان با تمام وجود انتشار را متوقف می کنند و خطاها را نادیده می گیرند! این هم خوب نخواهد بود.
نه، توسعه دهندگانی که بر برنامه به عنوان یک کل نظارت دارند (یعنی با دسترسی به شیء وضعیت برنامه) باید حرف آخر را بزنند و هر خطا را در Error Handler خود برطرف کنند. به نحوه عملکرد Fluttery برای توسعه دهنده تنها و همچنین در یک محیط تیمی توجه کنید.
علاوه بر این، آیا می بینید که چگونه Fluttery به طور طبیعی کد برنامه را تقسیم می کند؟ من احساس میکنم فلاتر بهطور طبیعی همانطور که مهندسان گوگل در نظر داشتند، «مرکز حالت شی» است. هر شیء ایالتی میتواند بهعنوان برنامه خاص خود بهعنوان یک معنا باشد، و این مفهوم تنها با استفاده از بسته Fluttery Framework برجسته میشود.
در مورد شیء App State، دارای دو Error Handler است. ممکن است شما یک Error Handler شخص ثالث ایجاد کرده باشید، و آنها مطمئناً خطاها را دریافت خواهند کرد، اما این خطاها همچنین از طریق onError Handler() تابع و inError Handler() در صورتی که آنها را پیاده سازی کرده اید، عمل کنند.
متوجه خواهید شد که شیء وضعیت برنامه دارای تعدادی توابع با پیشوند «روشن» و «در» است (به Little More Adaptive مراجعه کنید). به طور سنتی، نسخه «روشن»، در صورت اجرا، جایگزین نسخه «در خط» خواهد شد. با این حال، من آنقدر بر مدیریت خطا تأکید کرده ام که به هر دو نسخه «روشن» و «در خط» اجازه می دهم به نوبه خود اجرا شوند. در ذهن من، شما نمی توانید به اندازه کافی Error Handling داشته باشید! اگر می خواهید هر دو را اجرا کنید.
دو تصویر زیر نحوه استفاده از آنها را نشان می دهد. نسخه «روشن» در اولین تصویر زیر آمده است – یک تابع مستقل که پس از کنترل خطای شخص ثالث در صورت فراخوانی فراخوانی می شود، یا به تنهایی در پاسخ به یک خطا در برنامه فراخوانی می شود. اسکرین شات دوم نسخه “در خط” را نشان می دهد. همیشه یافت می شود که به سازنده App State منتقل می شود و همیشه بلافاصله بعد از نسخه «روشن» فراخوانی می شود.
می توانید ببینید که من حتی شیء State را لغو کرده ام یک خطا() تابع. در صورت لزوم می توانید آن را نادیده بگیرید. با این حال، لطفاً خطاها را نادیده نگیرید – در نهایت به نفع کسی نخواهد بود. صرف نظر از این، شما قدرت کاملی بر مدیریت خطاهای برنامه خود دارید.
با فلاتری، هیچ بهانه ای ندارید. با وجود مهارت آشکار شما، خطاهایی در کد شما رخ می دهد. Fluttery از شما دعوت میکند تا خطاها را در جایی که احتمال رخ دادن آنها وجود دارد را تأیید کنید – درست در شیء در حال اجرا State. سپس به اولین شیء State برنامه می روند. این کلاسی است که نه تنها نحوه ظاهر و رفتار برنامه را کنترل می کند، بلکه نحوه رسیدگی به خطاهای آن را نیز کنترل می کند.
به سلامتی.
← سری “کمی بیشتر”.
← داستان های دیگر از گرگ پری