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

ساخت وبلاگ

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

معامله چیست؟

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

  • انواع داده های ورودی را تأیید کنید، قدرت رمز عبور و مطابقت عبارات منظم را بررسی کنید.
  • داده های جدید را برای منحصر به فرد بودن در برابر پایگاه داده بررسی کنید.
  • ذخیره کاربر در پایگاه داده؛
  • برای تایید ثبت نام به کاربر ایمیل بفرستید.

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

بیایید به عملیات از نظر جواهر تراکنش خشک نگاه کنیم. هر عملیات باید یک متد #تماس عمومی داشته باشد و یا Success(value) یا Failure(error) را برمی گرداند، جایی که شما مقدار و خطا را توسط خودتان تعریف می کنید. کلاس های موفقیت و شکست بخشی از سنگ های قیمتی خشک موناد هستند. ما در این مقاله در مورد این مورد صحبت نمی کنیم.

اگر Success(value) برگردانده شود، تراکنش ادامه می یابد و «value» به عنوان پارامتر به مرحله بعدی ارسال می شود. اگر همه عملیات با موفقیت به پایان برسد، نتیجه تراکنش، Success (مقدار) بازگشتی در آخرین عملیات خواهد بود. اگر در طول پردازش تراکنش، برخی عملیات Failure(error) را برگرداند، کل تراکنش لغو می شود و در نتیجه عملیات ناموفق، Failure (خطا) دریافت می کنید. این رویکرد برنامه نویسی راه آهن گرا نامیده می شود.

آماده سازی اپلیکیشن

حالا می توانیم با کد شروع کنیم. در مقاله قبلی ما شروع به ساخت یک برنامه ساده کردیم که قیمت سهام را بررسی می کند. میتوانید اینجا پیدایش کنید. اول از همه، شما باید یک Gem تراکنش خشک جدید به Gemfile اضافه کنید:

بیایید پوشه lib/notifier را به روز کنیم. تمام کلاس هایی که در آنجا بودند را حذف کنید و دو پوشه ایجاد کنید: تراکنش ها و عملیات. فعلاً آنها را خالی بگذارید.

اکنون بیایید با پوشه سیستم اقدام کنیم. یک پرونده Application. rb ایجاد کنید:

در این برنامه ما به وابستگی های لازم برای برنامه خود نیاز داریم. اکنون باید این منطق را از سیستم/boot. rb حذف کنید:

اکنون ، یک تغییر کوچک کوچک و در عین حال ارزشمند در سیستم/کانتینر. RB:

اگر آنچه را که ما در اینجا با تغییرات قبلی انجام داده ایم مقایسه کنید ، می بینید که ما Config. Default_Namespace = "Notifier" را اضافه کردیم. این به ما امکان می دهد تا از نوشتن نوتیکار در نام کلید کانتینر استفاده کنیم. بنابراین ، به عنوان مثال notifer. Operations. Operation به عملیات تبدیل می شود.

اکنون می توانیم در نهایت معامله را توصیف کنیم. روند بررسی قیمت را می توان به 4 مرحله تقسیم کرد:

  1. تجزیه و تحلیل پیکربندی ؛
  2. قیمت فعلی سهام
  3. بررسی قیمت ؛
  4. اعلان می گوید چه چیزی را بفروشید و چه چیزی را بخرید.

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

ما 4 کلاس ایجاد کرده ایم که موفقیت را برمی گرداند (ورودی). این بدان معناست که اگر آنها در یک معامله ترکیب شوند ، آنها به یک ترتیب مشخص اجرا می شوند و در نتیجه همان موفقیت (ورودی) وجود خواهد داشت. توضیحات معامله در اینجا آمده است:

در اینجا ما کلیدهای توضیحات کلاس را از ظرف "اعلان کننده" به معامله می دهیم. آنها برای پردازش هر مرحله معامله مورد نیاز هستند. شما می توانید این مراحل را با روش ها توصیف کنید. مثلا:

علاوه بر این ، شما می توانید از یک روش و یک کلید کانتینر استفاده کنید. این روش در اولویت قرار خواهد گرفت و شما قادر خواهید بود داده های ورودی را برای یک عملیات از ظرف تهیه کرده و پس از آن با Super تماس بگیرید:

شاید متوجه شده باشید که مرحله Notify به جای قدم مانند سایر موارد به عملکرد TEE منتقل می شود. با انجام این کار ، ما نشان می دهیم که این مرحله نیازی به بازگشت چیزی ندارد. این در مواردی بسیار راحت است که قدم فقط چیزی را ثبت می کند. اگر ما بعد از اطلاع رسانی قدم دیگری داشتیم ، همان مواردی را که در ورودی به آن اطلاع می داد دریافت می کرد. بسیاری از آداپتورهای دیگر وجود دارد ، بیشتر در مورد آنها در اینجا. اکنون می توانیم با تحقق کلاس ها شروع کنیم. در اینجا به نظر می رسد:

در اینجا این است که معامله ما کامل و آماده برای اجرای است! همانطور که رفتار برنامه را به روز کرده ایم ، باید وظیفه Rake را نیز به روز کنیم:

اکنون می توانید نام پرونده را با قیمت سهام و سهام مورد نیاز به عنوان استدلال منتقل کنید. باید شبیه چیزی شبیه به این باشد:

بررسی کنید که آیا با اجرای بسته نرم افزاری Exec Rake Check_prices [قیمت ها] در کنسول همه چیز به درستی کار می کند. ممکن است توجه داشته باشید که سیاهههای مربوط به log/development. log نوشته شده اند:

از آنجا که ما از پرونده برای پیکربندی اسکریپت استفاده می کنیم ، قبل از پردازش باید بررسی کنیم که پرونده پیکربندی وجود دارد و در صورت عدم استفاده از کاربر به کاربر اطلاع می دهد. برای انجام این کار ما باید روش #CALL تجزیه کننده خود را تغییر دهیم:

ما خرابی بازگشت ("پرونده پیکربندی گمشده") را اضافه کرده ایم ، مگر اینکه پرونده. exist؟ (مسیر) که معامله را متوقف می کند و آن را مجبور می کند برای بازگشت به خرابی ("پرونده پیکربندی گمشده"). بنابراین در صورت وجود پیکربندی ، معامله خراب نمی شود. با این حال ، کاربر در مورد خطا مطلع نمی شود و باید انجام شود. Matcher بهترین ابزار برای انجام این کار است. این مبتنی بر گوهر خشک کن است و امکان ایجاد رفتار متفاوتی برای موفقیت و عدم موفقیت به دست آمده در مراحل مختلف فراهم می شود. این همان چیزی است که در مورد ما به نظر می رسد:

در اینجا بلوک را که نتیجه معامله (متغیر "نتیجه") را به عنوان یک پارامتر به معامله منتقل می کند ، منتقل می کنیم. ما رفتار را برای مقادیر مختلف برگشتی در داخل این بلوک تعیین می کنیم. اگر همه چیز خوب باشد و متغیر نتیجه برابر با موفقیت باشد ، اولین شعبه کد اجرا می شود. اگر "نتیجه" برابر با شکست باشد ، شعبه مربوط به مرحله ای که "شکست" بازگردد ، اجرا می شود. در مورد ما این قدم با parse_yaml است. باید در نظر داشته باشید که "شکست" ممکن است در هر مرحله برگردانده شود ، اما موفقیت تنها پس از آخرین مرحله ، هنگامی که تمام عملیات معامله با موفقیت انجام شده است ، بازگردانده می شود.

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

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

بازار رمزارزها...
ما را در سایت بازار رمزارزها دنبال می کنید

برچسب : نویسنده : محمود کیانوش بازدید : <-PostHit-> تاريخ : سه شنبه 26 ارديبهشت 1402 ساعت: 13:22