استفاده از توکن ها برای رسیدگی به کد Swift Async

ساخت وبلاگ

استفاده از کد ناهمزمان به روشی که قابل پیش بینی ، قابل خواندن و اشکال زدایی آسان باشد می تواند واقعاً چالش برانگیز باشد. این همچنین چیزی است که بسیار متداول است ، تقریباً همه کد های مدرن دارای قطعاتی هستند که بسیار ناهمزمان هستند - خواه این داده ها را از طریق شبکه بارگیری می کند ، مجموعه داده های بزرگ را بصورت محلی یا هر عملیات محاسباتی دیگر پردازش می کند.

بنابراین جای تعجب آور نیست که در اکثر زبانها ، چندین انتزاع ایجاد شده است تا سعی کنید با کارهای ناهمزمان آسانتر شود. ما قبلاً در پست های قبلی به چند تکنیک و انتزاع از این دست نگاه کرده ایم - از جمله استفاده از GCD و Futures & Promises. این هفته ، بیایید نگاهی به تکنیک دیگری بیندازیم که می تواند مدیریت تماس های ناهمزمان را کمی ساده تر و خطای کمتر مستعد ایجاد کند - با استفاده از نشانه ها.

API های مبتنی بر توکن

ایده اصلی API های مبتنی بر توکن این است که تابعی که یک عمل ناهمزمان یا تأخیر را شروع می کند ، یک نشانه را برمی گرداند. سپس می توان از این نشانه برای مدیریت و لغو آن عمل استفاده کرد. امضای چنین عملکردی می تواند به این شکل باشد:

توکن ها بسیار سبک تر از ، به عنوان مثال ، آینده و وعده ها هستند - از آنجا که این نشانه به سادگی به عنوان راهی برای پیگیری درخواست عمل می کند ، نه اینکه کل خود درخواست را داشته باشد. این همچنین باعث می شود که به جای اینکه مجبور به بازنویسی بسیاری از کد های ناهمزمان با استفاده از یک الگوی متفاوت یا نیاز به افشای جزئیات اجرای شوند ، اضافه کردن آنها به یک پایگاه کد موجود بسیار ساده تر شود.

بنابراین چه فایده ای دارد که عملکردی مانند بازگشت به یک نشانه فوق داشته باشد؟بیایید به یک مثال نگاهی بیندازیم ، که در آن ما در حال ساخت یک کنترلر نمایش هستیم تا به کاربر اجازه دهد سایر کاربران را در برنامه ما جستجو کند:

همانطور که در بالا مشاهده می کنید ، این همه بسیار استاندارد به نظر می رسد ، اما اگر قبلاً این نوع ویژگی های جستجو را به عنوان شما اجرا کرده اید-احتمالاً می دانید که یک اشکال در آنجا پنهان است. مشکل این است که سرعت تایپ کردن شخصیت ها در قسمت جستجو لزوماً با نحوه تکمیل سریع درخواست ها مطابقت نخواهد داشت. این امر منجر به یک مشکل بسیار شایع در ارائه تصادفی نتایج قدیمی می شود که درخواست قبلی پس از یک مورد بعدی به پایان برسد.

بیایید نگاهی بیندازیم که چگونه توکن ها می توانند به ما در حل مشکل فوق کمک کنند

نشانه ای برای هر درخواست

بیایید با نگاهی دقیق تر به UserLoader شروع کنیم. در حال حاضر مانند این اجرا شده است:

کاری که ما برای جلوگیری از اشکالات موجود در کاربران ما ، WearchViewController خود باید انجام دهیم ، امکان لغو هر کار مداوم است. چند روش وجود دارد که ما می توانیم به آن دست یابیم. یکی از گزینه ها این است که به سادگی UserLoader خود را ردیابی کنید و کار داده های فعلی خود را پیگیری کنید و هر زمان که جدید شروع شود ، آن را لغو کنید:

موارد فوق ، و یک رویکرد کاملاً معتبر است. با این حال ، این باعث می شود API کمی آشکار شود - زیرا لغو اکنون اجباری است و در اجرای آن پخته می شود. اگر UserLoader در زمینه دیگری استفاده شود که در آن درخواست های قبلی نباید لغو شود ، می تواند باعث ایجاد اشکالات در آینده شود.

گزینه دیگر ، بازگشت وظیفه داده خود در هنگام نام بارگذاری بار است:

همچنین یک رویکرد معتبر ، اما نکته منفی در اینجا این است که ما به عنوان بخشی از API جزئیات اجرای را نشت می کنیم. هیچ دلیلی (به غیر از اجازه لغو) وجود ندارد که کد دیگر با استفاده از userloader باید بداند که از urlsessiondatatask در زیر کاپوت استفاده می کند - که باید در حالت ایده آل یک جزئیات اجرای خصوصی را حفظ کند تا مواردی مانند آزمایش و بازپرداخت آسانتر شود.

در آخر ، بیایید به جای آن ، این کار را با استفاده از یک API مبتنی بر توکن حل کنیم. برای انجام این کار ، ما ابتدا می خواهیم یک نوع توکن ایجاد کنیم که بعداً هنگام انجام درخواست ، بعداً برمی گردیم:

همانطور که در بالا مشاهده می کنید ، درخواست ما بسیار ساده است ، و واقعاً فقط حاوی اشاره ای به کاری است که می تواند لغو شود. واقعاً هیچ دلیلی برای پیچیده تر بودن آن وجود ندارد ، و کاملاً خوب است که به خودی خود این کار را ارجاع دهید ، تا زمانی که ما آن را به صورت عمومی در معرض دید قرار ندهیم.

بیایید پیش برویم و از RequestToken به عنوان نوع بازگشت در userLoader استفاده کنیم:

توجه داشته باشید که ما همچنین ویژگی discardableresult را به این روش اضافه می کنیم ، به طوری که ما کاربر API را وادار نمی کنیم در صورت عدم نیاز ، از توکن استفاده کند.

نتیجه یک API مرتب و انتزاعی است که بدون معرفی وضعیت اضافی ، لغو را امکان پذیر می کند - بسیار شیرین! حساب اسلامي...

ما را در سایت حساب اسلامي دنبال می کنید

برچسب : نویسنده : کامران فیوضات بازدید : <-PostHit-> تاريخ : چهارشنبه 3 خرداد 1402 ساعت: 23:53