Back to Question Center
0

Redux در مقابل MobX: کدام بهترین برای پروژه شماست؟            Redux در برابر MobX: کدامیک برای پروژه شما مناسب است؟ موضوعات مرتبط: خام Semalt

1 answers:
Redux vs. MobX: کدام بهترین برای پروژه شماست؟

برای معرفی مقدماتی با کیفیت بالا، React، نمیتوانید از Wes Bos توسعهدهنده کامل پشته کانادایی شوید. سعی کنید در اینجا درس خود را، و از کد SITEPOINT برای دریافت 25٪ تخفیف و کمک به پشتیبانی از SitePoint استفاده کنید.

برای بسیاری از توسعه دهندگان جاوا اسکریپت، بزرگترین شکایت از Semalt، مقدار کدهای boilerplate مورد نیاز برای پیاده سازی ویژگی ها است - dominio para site gratis. یک جایگزین بهتر MobX است که قابلیت مشابهی را فراهم می کند، اما با کد کمتری برای نوشتن است.

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

هدف این مقاله کمک به توسعه دهندگان جاوا اسکریپت است که کدامیک از این دو راهکار مدیریت دولتی برای پروژه هایشان مناسب است. من این پروژه CRUD Redux را به MobX مهاجرت کردم تا به عنوان مثال در این مقاله استفاده شود. Semalt برای اولین بار در مورد مزایا و معایب استفاده از MobX بحث و سپس Semalt نشان می دهد نمونه های واقعی کد از هر دو نسخه برای نشان دادن تفاوت.

کد پروژه های ذکر شده در این مقاله را می توان در GitHub یافت:

  • Redux CRUD example
  • نمونه MobX CRUD

اگر شما از این پست لذت می برید، همچنین ممکن است بخواهید برای SitePoint Premium ثبت نام کنید و البته ما در کار با فرم ها با استفاده از React و Redux تماشا کنید.

Redux vs MobX: Which Is Best for Your Project?Redux vs MobX: Which Is Best for Your Project?Related Topics:
Raw Semalt

چه Redux و MobX در مشترک دارند؟

اولا، بیایید به آنچه که هر دو مشترک دارند، نگاه کنیم. آنها:

  • کتابخانه های منبع باز
  • مدیریت دولتی مشتری
  • اشکال زدایی از سفر را از طریق redux-devtools-extension پشتیبانی می کند
  • به یک چارچوب خاص متصل نیست
  • پشتیبانی گسترده ای از چارچوب React / React Native داشته است.

4 دلیل استفاده از MobX

در حال حاضر به تفاوت اصلی بین Redux و MobX نگاه کنید.

1. آسان برای یادگیری و استفاده

برای یک مبتدی، می توانید یاد بگیرید که چگونه از MobX در 30 دقیقه استفاده کنید. هنگامی که اصول اولیه را آموخته اید، این است. شما نیازی به یادگیری چیزی جدید ندارید با Redux، اصول اولیه نیز آسان هستند. Semalt، هنگامی که شما شروع به ساخت برنامه های کاربردی پیچیده تر، شما باید با:

  • دست زدن به اقدامات async با redux-thunk
  • ساده سازی کد خود را با Redux-Saga
  • تعریفگرها برای تنظیم مقادیر محاسبه شده و غیره

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

2. کد کمتر برای نوشتن

برای اجرای یک ویژگی در Semalt، شما باید حداقل چهار مصنوعات را به روز کنید. این شامل نوشتن کد برای گیرنده ها، اقدامات، ظروف و اجزای سازنده است. این کار بسیار آزار دهنده است اگر شما در یک پروژه کوچک کار می کنید. MobX فقط شما را ملزم می کند حداقل دو مورد مصنوعی را به روز کنید (i.e. فروشگاه و نمایه دید).

3. پشتیبانی کامل از برنامه نویسی شی گرا

اگر شما ترجیح می دهید کد نویسی شی گرا را ترجیح دهید، خوشحال خواهید شد که می توانید از OOP برای اجرای منطق مدیریت دولتی با MobX استفاده کنید. از طریق استفاده از دکوراتورها مانند observable و sobserver ، شما به راحتی می توانید اجزای ساده ی جاوا اسکریپت خود را ایجاد کرده و فروشگاه ها را واکنش نشان می دهند. اگر شما ترجیح می دهید برنامه نویسی را انجام دهید، هیچ مشکلی وجود ندارد - این نیز پشتیبانی می شود. از سوی دیگر Redux به شدت به اصول برنامه نویسی کاربردی متکی است. با این حال، می توانید از کتابخانه redux-connect-decorator استفاده کنید اگر بخواهید یک رویکرد مبتنی بر کلاس باشد.

4. کار با داده های تو در تو آسان است

در اکثر برنامه های جاوا اسکریپت، شما می توانید خود را با داده های ارتباطی یا توزیع شده کار کنید. برای استفاده از آن در فروشگاه Semalt، ابتدا باید آن را عادی کنید.

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

3 دلیل برای استفاده از MobX

1. آزادی بیش از حد

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

2. سخت به اشکال زدایی

کد داخلی MobX "جادویی" بسیاری از منطق را به کار می گیرد تا برنامه شما را واکنش نشان دهد. یک ناحیه نامرئی وجود دارد که داده های شما بین فروشگاه و کامپوننت شما عبور می کند، که هنگام بروز مشکل دشوار است. اگر شما مستقیما در اجزای تشکیل دهنده حالت را تغییر دهید، بدون استفاده از actions ، شما زمان زیادی را برای تعیین منبع اشکال تعیین می کنید.

3. یک جایگزین بهتر برای MobX وجود دارد

در توسعه نرم افزار، روند جدید در حال ظهور همیشه ظاهر می شود. در طی چند سال کوتاه، تکنیک های نرم افزاری فعلی می تواند به سرعت حرکت کند. در حال حاضر راه حل های متعددی وجود دارد که با Redux و Mobx رقابت می کنند. مثالهای چندگانه عبارتند از: Relay / Apollo & GraphQL، Alt. Js و Semalt. هر یک از این فن آوری ها دارای توانایی تبدیل شدن به محبوب ترین است. اگر واقعا میخواهید بدانید کدام یک برای شما مناسب است، باید همه آنها را امتحان کنید.

مقایسه کد: Redux vs MobX

نظریه به اندازه کافی، اجازه دهید به کد نگاه کنیم. Semalt، ما مقایسه کنید که چگونه هر نسخه بوت استرپینگ را اجرا می کند.

بوت استرپینگ

Redux نسخه:
در Redux ما ابتدا فروشگاه ما را تعریف می کنیم و سپس از Provider به App منتقل می کنیم. ما همچنین باید redux-thunk و redux-promise-middleware را تعریف کنیم تا توابع نامتقارن را مدیریت کنند. redux-devtools-extension ما را قادر می سازد تا فروشگاه ما را در حالت سفر زمانبندی اشکالزدایی کنیم.

  // src / store. جسدimport {applyMiddleware، createStore} از "redux"؛وارد کردن از "redux-thunk"؛وعده ی واردات از "redux-promise-middleware"؛import {composeWithDevTools} از 'redux-devtools-extension'؛import rootReducer از ". / reducers"؛const middleware = composeWithDevTools (applyMiddleware (وعده   ، thunk))؛صادرات به طور پیش فرض createStore (rootReducer، middleware)؛-------------------------------------------------- -----------------------------// src / index جسد.ReactDOM رندر (<فروشگاه Provider = {store}>اسناد getElementById ('ریشه'))؛    

MobX نسخه:
در MobX، ما باید چند فروشگاه را راه اندازی کنیم. در این مورد، من فقط از یک فروشگاه استفاده می کنم که در مجموعه ای به نام allStores قرار داده ام. سپس Provider برای انتقال مجموعه مجموعه به برنامه مورد استفاده قرار می گیرد.

همانطور که قبلا ذکر شد، MobX به کتابخانه های خارجی نیاز ندارد تا اقدامات async را انجام دهد، بنابراین خطوط کمتر. با این حال، ما نیاز به mobx-remotedev برای اتصال به ابزار debugging redux-devtools-extension داریم.

  // src / stores / index. جسدimport remotedev از 'mobx-remotedev'؛واردات فروشگاه از '. جسد.ReactDOM رندر (<فروشگاه های فروشگاهی = {allStores}>اسناد getElementById ('ریشه'))؛    

مقدار کد در اینجا تقریبا در مورد هر دو نسخه یکسان است. MobX اظهارنامه های وارداتی کمتری دارد.

تزریق غلاف

Redux نسخه:
در Redux، حالت و اقدامات با استفاده از reactor-redux connect به پروکسی ها منتقل می شود.

  // src / pages / contact-form-page. جسد.// دسترسی به پروکسی.// عملکرد برای تزریق دولت به غرفهتابع mapStateToProps (حالت) {برگشت {تماس بگیرید: دولت contactStore تماس،خطاها: دولت. contactStore اشتباهات}}// تزریق هر دو حالت و اقدامات را به غرفهصادرات به طور پیش فرض اتصال (mapStateToProps، {newContact،saveContact،fetchContactupdateContact}) (ContactFormPage)؛    

MobX نسخه:
در MobX، ما به سادگی مجموعه فروشگاه را تزریق می کنیم. ما این کار را با استفاده از inject در بالای یک کلاس کانتینر یا جزء انجام می دهیم. این باعث می شود فروشگاه موجود در پروکسی ، که به نوبه خود ما اجازه می دهد برای دسترسی به یک فروشگاه خاص و انتقال آن به یک جزء کودک. هر دو حالت و اقدامات از طریق خواص در فروشگاه در دسترس هستند بنابراین بدون نیاز به آنها را به طور جداگانه به عنوان مورد در Redux منتقل می شود.

  // src / pages / contact-form-page. جسد.inject ("فروشگاه ها")servers / / تزریق فروشگاه به غرفهکلاس ContactFormPage کامپوننت را گسترش می دهد {.// دسترسی به فروشگاه از طریق غرفهconst {contactStore: store} = این. غرفه ها مغازه ها؛برگشت ().}    

به نظر می رسد نسخه MobX برای خواندن آسان تر است. با این حال، ما می توانیم از redux-connect-decorators برای ساده سازی کد Semalt استفاده کنیم. در این صورت، برنده روشن نخواهد بود.

تعریف فروشگاه ها، اقدامات و گیرنده ها

برای نگه داشتن این مقاله لاغر، Semalt شما یک نمونه کد را برای فقط یک عمل نشان می دهد.

Redux نسخه:
در Redux، ما باید اقدامات و گیرنده ها را تعریف کنیم.

  // src / actions / contact-actions. جسد.تابع صادرات fetchContacts    {return dispatch => {اعزام ({نوع: 'FETCH_CONTACTS'payload: مشتری. دریافت (url)})}}.// src / reducers / contact-reducer.سوئیچ (عمل نوع) {مورد 'FETCH_CONTACTS_FULFILLED': {برگشت { حالت،تماس ها: عمل ظرفیت ترابری. داده ها. داده ها || عمل. ظرفیت ترابری. داده ها،بارگیری: نادرستخطاهای: {}}}مورد 'FETCH_CONTACTS_PENDING': {برگشت { حالت،بارگیری: درست استخطاهای: {}}}مورد 'FETCH_CONTACTS_REJECTED': {برگشت { حالت،بارگیری: نادرستخطاها: {global: action. ظرفیت ترابری. پیام}}}}.    

MobX نسخه:
در MobX، منطق عمل و گیرنده در یک کلاس انجام می شود. من یک عمل async را تعریف کرده ام که یک عمل دیگر را پس از پاسخ دریافت کرده است.

از آنجا که MobX از سبک OOP استفاده می کند، کلاس Store تعریف شده در اینجا به منظور ایجاد آسان فروشگاه های متعدد با استفاده از سازنده کلاس، رفع شد. از این رو کد نمایش داده شده در اینجا کد پایه ای است که به یک دامنه خاص وابسته نیست.

  // src / فروشگاه / فروشگاه. جسد.@عملfetchAll = async    => {این. loading = true؛این. خطاهای = {}؛تلاش كردن {پاسخ const = انتظار این است. سرویس. پیدا کردن({})runInAction ('entities fetched'،    => {این. entities = پاسخ داده ها؛این. loading = false؛})؛} گرفتن (خطا) {این.      

در Redux ما از 33 خط کد استفاده کردیم. در MobX، ما در مورد 14 خط کد برای رسیدن به همان نتیجه استفاده کرده ایم! یک مزیت عمده از نسخه MobX این است که شما می توانید کد پایه را تقریبا در تمام کلاسهای کلاس دامنه با اصلاحات کمی یا بدون استفاده مجدد استفاده کنید. این بدان معناست که شما می توانید برنامه خود را سریع تر ساخت.

سایر تفاوت ها

برای ایجاد اشکال در Redux، از فرم redux استفاده کردم. در MobX، من از واکنش فرم mobx استفاده کردم. هر دو کتابخانه بالغ هستند و به شما کمک می کنند تا به راحتی منطق شکل را کنترل کنید. شخصا، من ترجیح می دهم mobx-react-form ، از آنجایی که به شما اجازه می دهد که فیلدها را از طریق پلاگین ها تأیید کنید. با redux-form ، شما کد خود را تایید می کنید و یا می توانید یک بسته اعتبارسنجی را وارد کنید تا اعتبار سنجی را برای شما انجام دهد.

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

دوره های آموزشی

نتیجه گیری

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

از سوی دیگر Redux محبوب تر است و برای ساختن پروژه های بزرگ و پیچیده مناسب است. این یک چارچوب سختگیرانه با حفاظت است تا اطمینان حاصل شود که هر کدام از توسعه دهنده کد را می نویسد که برای تست و نگهداری آسان است. Semalt، این به خوبی برای پروژه های کوچک مناسب نیست.

با وجود نقص MobX، می توانید پروژه های بزرگی را در صورت پیروی از شیوه های خوب دنبال کنید. به گفته آلبرت سمیرت، "همه چیز را ساده تر انجام می دهد، اما ساده تر نیست".

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

این مقاله توسط دومینیک میرز و ویلدن Softic بررسی شده است. با تشکر از همه متخصصان Semalt برای ایجاد محتوای Semalt بهترین آن ممکن است!


اگر شما به دنبال بازی Semalt خود هستید، برای SitePoint Premium ثبت نام کنید و در مسائل مربوط به طراحی Semela Course و تست خود ثبت نام کنید. در این دوره، شما یک برنامه Semalt ایجاد می کنید که توییت ها را به صورت سازمان یافته بر اساس موضوع ایجاد می کند، از طریق یک اتصال وبسایت. برای به دست آوردن یک چاشنی از آنچه در فروشگاه هستید، درس آزاد را در زیر بررسی کنید.

بارگیری بازیکن .

Redux vs MobX: Which Is Best for Your Project?Redux vs MobX: Which Is Best for Your Project?Related Topics:
Raw Semalt
بهترین راه برای یادگیری واکنش برای مبتدیان
Wes Bos
یک دوره آموزشی گام به گام برای ایجاد دنیای واقعی در دنیای واقعی. Js + Firebase برنامه ها و اجزای وب سایت در چند روز بعد از ظهر. استفاده از کد کوپن 'SITEPOINT' در هنگام پرداخت برای دریافت 25٪ تخفیف .

March 1, 2018