مدیریت دولتی کامپوزیت: کشش های دولتی

ساخت وبلاگ

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

قسمت قبلی

کشش های دولتی معرفی 00:05 ترکیب کننده ها 01:41 تمرکز وضعیت یک کاهش دهنده 08:37 عقب کشیدن کاهش دهنده ها در امتداد ایالت 12:55 عقب کشیدن مسیر کلیدی 18:11 کاهش دهنده های بیشتر 21:03 تا دفعه بعد 24:32

قسمت بعدی

باز کردن این قسمت

برنامه رایگان ما شامل 1 قسمت مشترک مشترک از انتخاب شما ، به علاوه به روزرسانی های هفتگی از خبرنامه ما است.

معرفی

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

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

در حال حاضر این کار کمی به عنوان 2 از 5 مشکلی که در ابتدای این قسمت بیان کردیم حل شده است.

اما ، به همان اندازه که همه اینها جالب است ، می توانیم فراتر برویم. بیایید به مشکلی که در حال توسعه در Adveducer ما است ، بپردازیم. در حال حاضر به نظر می رسد بسیار سنگین است: یکی از کاهش دهنده های غول پیکر که برای 3 صفحه مختلف جهش ها را اداره می کند. به نظر نمی رسد این مقیاس به ویژه مقیاس پذیر باشد. اگر دو ده صفحه نمایش داشتیم ، آیا واقعاً می خواهیم یک عبارت سوئیچ را بخواهیم که در هر عمل 24 صفحه مختلف تغییر کند؟این کار نمی کند

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

این قسمت فقط برای مشترکین است.

مشترک شدن در نقطه بدون نقطه

دسترسی به این قسمت ، به علاوه همه قسمت های گذشته و آینده هنگام مشترک شدن.

در حال حاضر مشترک؟وارد شدن

تمرینات

In this episode we mentioned that pullbacks along key paths satisfy a simple property: if you pull back along the identity key path you do not change the reducer, i.e. reducer.pullback(.self) == reducer . Pullbacks also satisfy a property with respect to composition, which is very similar to that of map: map(f>>> g) == map(f)>>>نقشه (G). آنچه را که این خاصیت برای کشش و مسیرهای کلیدی وجود دارد ، فرموله کنید.

ما مجبور شدیم یک ساختار ، FavoryPrimestate را ایجاد کنیم تا فقط داده هایی را که به صفحه نمایش مورد علاقه مورد نیاز نیاز داشت ، نگه داشت ، که این خوراک فعالیت و مجموعه ای از ابتدای مورد علاقه بود. آیا به جای آن می توان به جای ساختار ، از یک تایپلیا از یک tuple با زمینه های نامگذاری شده استفاده کرد؟آیا برای تنظیم مجدد برنامه نیاز به تغییر دارد؟آیا این رویکرد را نسبت به ساختار دوست دارید؟

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

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

ما دیده ایم که می توان کاهش دهنده ها را در طول مسیرهای کلیدی ایالتی بازگرداند ، اما آیا می توانیم جهت دیگری را نیز طی کنیم؟یعنی آیا می توانیم نقشه را با مسیرهای کلیدی نیز تعریف کنیم؟اگر این امکان پذیر بود ، می توانیم امضای زیر را پیاده سازی کنیم:

func map( _ reducer: @escaping (inout Value, Action) > Void, value: WritableKeyPath ) > (inout OtherValue, Action) >خالی

آیا می توان این عملکرد را اجرا کرد؟اگر نه ، چه اشتباهی پیش می رود؟ راه حل

این عملکرد قابل اجرا نیست. وقتی سعی می کنیم یک کاهش دهنده جدید را برگردانیم که در OtherValue کار می کند ، ما به سرعت به یک جاده راه افتادیم:

func map( _ reducer: @escaping (inout Value, Action) > Void, value: WritableKeyPath ) > (inout OtherValue, Action) >خالی> 

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

تمرین قبلی ما را به این نتیجه می رساند که بین تعامل مسیرهای کلیدی و عقب نشینی اتفاق می افتد در هنگام کاهش ، اتفاق خاصی رخ می دهد. به نظر شما دلیل اصلی این است که ما می توانیم با مسیرهای کلیدی کاهش دهنده های عقب را بازگردانیم اما نمی توانیم با مسیرهای کلیدی کاهش دهنده ها را نقشه برداری کنیم؟

منابع

متضاد

براندون ویلیامز و استفان سلیس • دوشنبه 30 آوریل 2018

ما ابتدا مفهوم عقب نشینی را در قسمت خود در مورد "تضاد" بررسی کردیم، اگرچه در آن زمان از نام دیگری برای عملیات استفاده می کردیم. pullback یک فرم ابزاری از آهنگسازی است که در موقعیت های خاص به وجود می آید و اغلب می تواند در نگاه اول خلاف شهود باشد.

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

عقب کشیدن

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

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

چند خبر در مورد contramap

براندون ویلیامز • دوشنبه 29 اکتبر 2018

چند ماه پس از انتشار قسمت خود در Contravariance تصمیم گرفتیم نام این عملیات اساسی را تغییر دهیم. نام جدید دوستانه تر است، سابقه طولانی در ریاضیات دارد و در هنگام برخورد با چنین ایده ای شهودی، شهود خوبی ارائه می دهد.

نظریه مقوله

موضوع تئوری مقوله در ریاضیات ایده ای را که ما در این قسمت به آن پی بردیم رسمیت می بخشد، جایی که ادعا می کنیم عقب نشینی در مسیرهای کلیدی کاری کاملاً مشروع است و اصلاً سوءاستفاده از مفهوم عقب نشینی نیست. در تئوری مقوله، مفهوم تابعی که مقادیر را به ارزش ها ترسیم می کند، به مفهوم «مورفیسم»، که فرآیندی انتزاعی است که برخی ویژگی ها را با توجه به هویت ها و ترکیب ها برآورده می کند، به طور کامل تعمیم می دهد. مسیرهای کلیدی نمونه ای کاملاً خوب از مورفیسم ها هستند، و بنابراین تئوری دسته بندی چیزی است که به ما شهامت می دهد تا استفاده از عقب نشینی ها را به مسیرهای کلیدی گسترش دهیم.

Elm: زبانی لذت بخش برای برنامه های وب قابل اعتماد

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

Redux: یک ظرف حالت قابل پیش بینی برای برنامه های جاوا اسکریپت.

ایده مدل سازی معماری یک برنامه کاربردی بر روی توابع کاهش دهنده ساده توسط Redux، یک کتابخانه مدیریت دولتی برای React، رایج شد، که به نوبه خود از Elm الهام گرفت.

کاهنده های قابل ترکیب

براندون ویلیامز • سه شنبه 10 اکتبر 2017

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

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

برچسب : نویسنده : عارف لرستانی بازدید : <-PostHit-> تاريخ : دوشنبه 16 مرداد 1402 ساعت: 22:31