چرا باید FutureBuilder و StreamBuilder را دور از ویوها استفاده کنیم؟
بررسی مشکلات استفاده از FutureBuilder و StreamBuilder در فلاتر مانند عدم جدایی نگرانیها و بارگذاری مجدد ناخواسته، و معرفی جایگزینهایی مثل AsyncSignal.
در توسعه نرمافزار با فلاتر، معمولاً با استفاده از ابزارهای مختلفی برای مدیریت حالت و بارگذاری دادهها مواجه میشویم. یکی از این ابزارها، FutureBuilder و StreamBuilder هستند. اما سوال اینجاست که آیا واقعاً باید این ابزارها را در درخت ویجتهایمان قرار دهیم؟
مشکلات استفاده از FutureBuilder و StreamBuilder
استفاده از FutureBuilder و StreamBuilder در درخت ویجتها میتواند مشکلات متعددی ایجاد کند. در ادامه به برخی از این مشکلات اشاره میکنیم:
۱. جدایی نگرانیها
یکی از اصول اساسی در طراحی نرمافزار، جداسازی نگرانیهاست. وقتی که FutureBuilder یا StreamBuilder را در درخت ویجتها قرار میدهیم، از این اصل دور میشویم. این مدل باعث میشود که منطق بارگذاری دادهها و نمایش آنها به هم مرتبط شوند و مدیریت آنها دشوار گردد.
برای مثال، تصور کنید که یک اپلیکیشن خبری دارید که اخبار را از یک API بارگذاری میکند. اگر شما از FutureBuilder برای بارگذاری اخبار در داخل ویجتهای خود استفاده کنید، در صورت نیاز به تغییر در منطق بارگذاری، مجبورید تمام ویجتهای مربوطه را نیز تغییر دهید.
۲. بارگذاری مجدد ناخواسته
استفاده از FutureBuilder و StreamBuilder میتواند منجر به بارگذاری مجدد ناخواسته دادهها شود. برای مثال، اگر یک ویجت در حال بارگذاری دادهها باشد و کاربر به صفحه دیگری برود و دوباره برگردد، ممکن است دادهها دوباره بارگذاری شوند. این مسئله میتواند باعث کاهش کارایی و تجربه کاربری نامناسب شود.
۳. تغییرات ناخواسته در طرحبندی
هنگامی که دادهها بارگذاری میشوند، ممکن است طرحبندی ویجتها تغییر کند. این تغییر میتواند منجر به ناپایداری در رابط کاربری شود. برای مثال، اگر محتوای یک لیست بارگذاری شود و بعد از بارگذاری دوباره تغییر کند، کاربر تجربهی ناخوشایندی خواهد داشت.
راهکارهای جایگزین
با توجه به مشکلات فوق، بهتر است از راهکارهای دیگری برای مدیریت دادههای غیرهمزمان استفاده کنیم. دو گزینهی مناسب در این زمینه AsyncSignal و BlocSignal هستند.
۱. AsyncSignal
AsyncSignal میتواند به عنوان یک لایهی جداگانه عمل کند که منطق بارگذاری دادهها را از نمایش آنها جدا میکند. این کار به توسعهدهندگان این امکان را میدهد که به سادگی منطق بارگذاری را تغییر دهند بدون اینکه نیازی به تغییر در ساختار ویجتها باشد.
۲. BlocSignal
BlocSignal نیز به شما این امکان را میدهد که از الگوی BLoC (Business Logic Component) استفاده کنید. این الگو به شما کمک میکند تا منطق کسبوکار خود را به طور مستقل از رابط کاربری پیادهسازی کنید. به این ترتیب، میتوانید به راحتی تستهای مربوط به منطق کسبوکار را انجام دهید و تغییرات را بدون نگرانی از تأثیرات آن بر روی UI اعمال کنید.
نتیجهگیری
استفاده از FutureBuilder و StreamBuilder در درخت ویجتها ممکن است در ابتدا ساده به نظر برسد، اما با گذشت زمان میتواند مشکلاتی جدی ایجاد کند. به جای این ابزارها، بهتر است از روشهای جداسازی نگرانیها مانند AsyncSignal و BlocSignal استفاده کنیم تا تجربه کاربری بهتری را فراهم کنیم.
منبع: dev.to