Ember چیست؟ – امبر چیست؟ – Ember و کاربرد آن

۳۰ آبان ۱۳۹۸

توسعه دهندگان اِمبر(Ember)گزینه های خوبی برای نحوه رسیدگی به داده ها از طریق API بک اِند دارند.

اِمبر، خودش با هر نوع بک اِند کار می کند:از قبیل: REST, JSON:API, GraphQL  و دیگر موارد.

بسیاری از توسعه دهندگان Ember Data تصمیم می گیرند از مجموعه ای قدرتمند برای قالب بندی درخواست ها

، عادی سازی پاسخ ها و مدیریت موثر حافظه پنهان محلی داده ها استفاده کنند.

Ember Data شامل داده های پیش فرض است که در Ember CLI گنجانده شده است.

با این حال، اگر شما مایل به استفاده از آن نیستید، با حذف ember-data ازPackage.json قابل حذف است.

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

واکشی (Fetch) یا کتابخانه های شخص ثالث، تمام کد های خود را برای رسیدگی به درخواست های API می نویسند. بسیاری از برنامه ها از ترکیبی از رویکردها استفاده می کنند.

این بخش از راهنما، ویژگی های اساسی Ember Data را شرح می دهد. برای کسب اطلاعات در مورد روش های دیگر  را برای مدیریت داده ها،Ember Observerبررسی کنید یا به دنبال دوره های آموزشی ساخته شده باشید.

مدل Ember Data  چیست؟

در Ember Data ، مدل ها ، داده های اساسی را نشان می دهند که برنامه شما به کاربر ارائه می دهد.

توجه داشته باشید که مدل های Ember Data، مفهومی متفاوت از روش مدل در روت ها دارند، هرچند اسم مشابهی دارند.

با در نظر گرفتن اینکه آنها میخواهند چه مشکلی را حل کنند، ممکن است برنامه های مختلف مدل های متفاوتی داشته باشند. به عنوان مثال، یک برنامه اشتراک گذاری عکس ممکن است یک مدل عکس برای نشان دادن یک عکس خاص داشته باشد،  و یک آلبوم عکس که نمایانگر گروهی از عکس ها است. در مقابل، یک برنامه خرید آنلاین احتمالاً حاوی مدل های  مختلفی مانند، کارت خرید، فاکتور خرید و لیست قیمت کالا  است.

این مدل ها احتمالا  همیشگی هستند. این یعنی که کاربر با بسته شدن پنجره مرورگر انتظار ندارد که داده های مدل از بین برود. برای اینکه مطمئن شوید هیچ داده ای از بین نمی رود، در صورت ایجاد تغییر در یک مدل، باید داده های مدل را در جایی ذخیره کنید که از بین نرود.

به طور معمول، اکثر مدل ها، بارگذاری می شوند و در سرورهایی ذخیره میشوند که از داده های موجود در فروشگاه استفاده

می کنند.  که نوشته اید، معمولا شما مدل های ارائه شده ی JSON را به سرور HTTP ارسال خواهید کرد.

با این حال، اِمبر، استفاده از سایر حافظه های بادوام را آسان می کند، ، مثل ذخیره ی محتوای هارد دیسک با

IndexedDB ، یا ذخیره سازی در حافظه ی پنهان، که به شما این امکان را می دهد که از نوشتن وب سرویس یا

میزبانی سرورهای شخصی خودداری کنید.

هنگامی که مدل های خود را از طریق کارت حافظه بارگیری کردید، مؤلفه ها می دانند که چگونه می توانند داده های مدل

را به رابط کاربری UI انتقال دهند که کاربر شما بتواند با آن تعامل داشته باشد. برای کسب اطلاعات بیشتر در مورد

نحوه ی ایجاد مولفه توسط مدل داده، به راهنمای مدل Route’s Model مراجعه کنید. در ابتدا، استفاده از

Ember Data ممکن است متفاوت از روشی باشد که شما برای نوشتن برنامه های جاوا اسکریپت استفاده می کنید.

بسیاری از توسعه دهندگان با نحوه ی استفاده ازAjax برای واکشی داده های JSON ، آشنایی دارند، که در ابتدا ممکن

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

Ember Data مدیریت مدلها با رشد برنامه ی شما ساده تر و آسان تر می شود. پس از درک  ،Ember Data شما می توانید یک روش بهتر برای مدیریت پیچیدگی بارگذاری داده ها در برنامه ی خود داشته باشید.

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

Ember Dataانعطاف پذیری

به علت استفاده از الگوی آداپتور،Ember Data را می توان طوری پیکربندی کرد تا با انواع مختلف بک اِندها  کار

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

به طور پیش فرض،Ember Data به گونه ای طراحی شده که با JSON API سازگار است.

JSON API، قابلیت ساخت ای پی آی های معمولی ، قدرتمند و عملکردی را دارد که به مشتریان و سرورها امکان برقراری ارتباط مدل های داده را می دهد.

JSON API نحوه ی عملکرد برنامه های جاوا اسکریپت در سرورها را استاندارد می کند، بنابراین شما اتصال بین

بک اِند و فرانت اِند را کاهش می دهید،و آزادی بیشتری برای تغییر بخش Stack یا پشته دارید. اگر نیاز به ادغام برنامه ی

از سرور  آی پی آی Ember.js هایی خود با سروری دارید که آداپتور آن در دسترس نیست (به عنوان مثال، شما از

استفاده می کنیدکه از قابلیت JSON بهره ای نمی برد).

Ember Data طوری طراحی شده است که می تواند روی هر نوع اطلاعاتی که در سرورتان است کار کند.

Ember Data همچنین برای کار با استریمینگ سرور مانند برنامه هایی که توسط

WebSockets طراحی شده اند،یز طراحی شده است.شما می توانید، socket  را در سرورتان باز کنید، و تغییراتی در

Ember Data اعمال کنید،  به برنامه شما یک رابط کاربری که دائما در حال به روز رسانی است، می دهد.

فروشگاه و تنها منبع حقیقت

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

ممکن است شما وسوسه شوید تا بخشی را مسئول واکشی داده و ذخیره ی آن کنید:

Ember چیست؟ - امبر چیست؟ - Ember و کاربرد آن

سپس می توانید لیست پیش نویس ها را در الگوی خود مانند این نشان دهید:

این برای لیست پیش نویس مؤثر است. با این حال، برنامه شما به احتمال زیاد از مؤلفه های مختلف تشکیل شده است. در صفحه دیگر ممکن است یک بخش برای نمایش تعداد پیش نویس ها بخواهید. ممکن است شما وسوسه شوید تا کد willRender موجود را در مولفه ی جدید جایگذاری کنید.

Ember چیست؟ - امبر چیست؟ - Ember و کاربرد آن

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

تنگاتنگی وجود دارد. اگر نشانی اینترنتی یا JSONتغییر کند، به احتمال زیاد تمام مولفه های   UI را از بین می برد.

اصول طراحی شی گرا یاSOLID به ما می گوید که اشیاء باید مسئولیت واحدی داشته باشند. مسئولیت یک جزء، باید

ارائه داده های مدل به کاربر باشد، نه اینکه مدل را واکشی کند.

برنامه های خوب امبر، رویکرد متفاوتی دارند.

Ember Data، یک فروشگاه واحد به شما می دهد که مخزن اصلی مدل ها در برنامه ی شما است.

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

زوئی می گوید:

Ember Data خدمات فروشگاه را در هر روت و کنترلر وارد می کند. بنابراین می توانید با عنوان

this.store به آن دسترسی داشته باشید.

مدل ها

در Ember Data ، هر مدل حاوی زیرمجوعه هایی است که ویژگی ها، روابط و وضع داده هایی را که به کاربر ارائه

می دهید را معین می کند.

مدل ها، نوع داده هایی را که توسط سرور ارائه می شود را معین می کنند.

به عنوان مثال، یک مدل Person می تواند ویژگی First Name که یک رشته است. و مشخصه ی

birthday که یک تاریخ است:

Ember چیست؟ - امبر چیست؟ - Ember و کاربرد آن

یک مدل، همچنین روابط خود را با اشیاء دیگر توصیف می کند. به عنوان مثال، یک

order  ممکن است line-item داشته باشد و  line-items ممکن است به  order خاص تعلق داشته باشد.

Ember چیست؟ - امبر چیست؟ - Ember و کاربرد آن

مدل ها خودشان، اطلاعات ندارند، آنها ویژگی ها، روابط و وضع نمونه های خاص را معین می کنند که به آنها رکوردها یا

Records گفته می شود.

رکوردها(Records)

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

یک رکورد منحصر به فرد با Type و ID مدلش مشخص می شود.

مثلا، اگر شما در حال نوشتن یک برنامه مدیریت تماس هستید، ممکن است یک مدل

Person داشته باشید. یک رکورد فردی در برنامه ی شما ممکن است یک نوع Person یا یک ID یا یک اسم داشته باشد.

Ember چیست؟ - امبر چیست؟ - Ember و کاربرد آن

وقتی برای اولین بار آن را ذخیره می کنید، یک آیدی معمولاً توسط یک سرور به یک رکورد اختصاص می یابد، اما می توانید آیدی های مشتری محور تولید کنید.

آداپتور(Adapter)

آداپتور، شیئی است که درخواست های امبر (مثل پیدا کردن کاربر با آیدی1) را به درخواست های سرور تغییر می دهد.

به عنوان مثال، اگر برنامه شما از شخصی با ایدی 1سوال کند که چطور باید امبر را بارگذاری کرد؟ از طریق

 WebSocket یا HTTP؟

اگر از HTTP استفاده می کنید،  آیا  person1 or /resources/people URL است؟

آداپتور، وظیفه پاسخگویی به همه این سؤالات را دارد. هرگاه برنامه شما از فروشگاه خواست رکوردی را ارائه دهد که در حافظه ی پنهان ذخیره نشده است، این سوال را از آداپتور می پرسد. اگر رکورد  را تغییر داده و آن را ذخیره کردید، فروشگاه رکورد را به آداپتور ارسال می کند تا داده های مناسب را به سرور شما ارسال کند و تأیید کند که ذخیره موفقیت آمیز بوده است.

آداپتورها به شما این امکان را  می دهند که بدون اینکه روی کد برنامه امبر خود تأثیر بگذارید، نحوه اجرای

API خود را کاملاً تغییر دهید.

ذخیره سازی

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

می دهد تا هرچه سریعتر UI خود را به کاربر ارائه دهد.

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

با این حال، دفعه دیگر که برنامه شما از شخصی با ایدی1 سؤال می کند، فروشگاه متوجه خواهد شد که قبلاً آن اطلاعات را از سرور بازیابی کرده و ذخیره کرده است. به جای ارسال درخواست دیگری برای همان اطلاعات، به برنامه تان گذارشی ارائه می دهد که اولین بار ایجاد شده است. این ویژگی، گزارشهای مشابه را برمی گرداند، مهم نیست که چقدر زمان گذشته، این نامیده می شود. استفاده از آن بسیار مهم است زیرا تضمین می کند تغییراتی که در یک قسمت ازidentity map ویژگی

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

یک نکته مهم در بازگشت یک رکورد ذخیره شده ذخیره شده این است که شما می توانید وضعیت داده ها را تغییر دهید زیرا اولین بار در identity map فروشگاه بارگذاری شده است. به منظور جلوگیری از طولانی شدن بروز این مشکل، Ember Data بطور خودکار درخواستی را ایجاد می کند وقتی که حافظه ی رکورد به فروشگاه برمیگردد. وقتی اطلاعات

جدید وارد می شوند، رکورد به روز رسانی می شود و اگر از رندر اولیه تغییراتی در رکورد ایجاد شده باشد، الگو با اطلاعات جدید وارد می شود.

نمای کلی معماری

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

JSON از رکوردهای ارائه شده از سرور  HTTP خواهد بود.

Ember چیست؟ - امبر چیست؟ - Ember و کاربرد آن

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

به دلیل همین ناهنجاری، فروشگاه بلافاصله  از findRecord استفاده می کند. .

وقتی که درخواست سرور با پیلود JSON برای رکورد درخواست شده برگشت داده شده ، آداپتور به قولی که به

درباره JSON داده بود، عمل می کند.

فروشگاه JSON را دریافت می کند،رکورد را با داده های JSON آغاز می کند و وعده ی بازگشت برنامه تان را با رکورد تازه

بارگذاری شده حل می کند.

بیایید نگاهی به این موضوع داشته باشیم که چه اتفاقی خواهد افتاد اگر بخواهید درخواست رکوردی را  دهید که فروشگاه قبلاً در حافظه خود داشته است.

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

Store  وAdaptersو Models, Records،  اصلی ترین مفاهیمی هستند که برای بدست آوردن بیشترین استفاده از

Ember Data باید آنها را درک کنید. بخش های زیر در مورد هر یک از این مفاهیم و نحوه استفاده از آنها اطلاعات بیشتری را ارائه می دهد.

https://guides.emberjs.com/release/models/