جت پک وردپرس چیست؟

جت پک وردپرس چیست؟
زمان تقریبی مطالعه : 5 دقیقه

جت پک چیست : در این مقاله خواهیم دید که Jetpack که به تازگی شرکت گوگل برای توسعه اپلیکیشن‌های اندرویدی ارائه کرده است شامل چه بخش‌ها و امکاناتی است. Jetpack در مراسم گوگل IO ۲۰۱۸ معرفی شد و از استقبال خوبی در میان مجمع برنامه نویسان اندروید برخوردار شده است و روز به روز در حال پیشرفت می‌باشد. برای اینکه بفهمید jetpack چیست همراه ما باشید تا در ادامه با جت پک آشنا شوید.

جت پک چیست

به طور خیلی ساده Jetpack راهکار جدیدیست برای  ساخت اپلیکیشن‌های اندرویدی اما ساده تر، بی دردسر تر، تست پذیر‌تر و توسعه پذیر تر.

یکی از مشکلاتی که همواره برنامه نویسان اندروید با آن مواجه بودند، ساختار پیچیده Android Support Library بود. این لایبرری در ابتدا به این دلیل وجود آمد که روشی برای سازگار کردن ورژن‌های قدیمی اندروید با امکانات جدید باشد. مثلا زبان طراحی متریال دیزاین در ورژن Lollipop اضافه شد که در ورژن‌های پایین‌تر قابل پیاده سازی نبود ولی Support Library این امکان رو به برنامه نویس می‌داد که در ورژن‌های قبل از Lollipop هم از متریال دیزاین استفاده کند. اما به عنوان مثال یکی از مشکلات ساختار Support Library نام گذاری‌های عجیب و غریب آن بود. مثلا Support Library v13, Support Library v7, Support Library v4!!! که برنامه نویس باید می‌دانست مثلا RecyclerView در Support Library v7 قرار دارد و Fragment در Support Library v4!!! خب همین نام گذاری عجیب که دلیل آن ساختار پیچیده بود باعث می‌شد خیلی از برنامه نویسان از ادامه مسیر دل زده شوند.

 

جت پک وردپرس

 

 

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

مجموعه Jetpack به چهار قسمت تقسیم می‌شود: معماری (Architecture)، رابط کاربری (UI)، رفتاری (Behavior)، پایه (Foundation) که در این مقاله در مورد مهمترین بخش آن یعنی Architecture صحبت خواهیم کرد.

معماری یا Architecture

یکی از مهمترین مسائل در رابطه با برنامه نویسی توسعه پذیر بودن، خوانایی کد و تست پذیری می‌باشد. این بخش تمام تمرکزش روی همین مسائل هست و با استفاده از Android Architecture Component می‌توانید به خاصیت هایی که یک نرم افزار با کیفیت لازم است داشته باشد برسید.

معماری پیشنهادی گوگل MVVM که Android Architecture Component به شما کمک می‌کند آن را به سادگی پیاده سازی کنید. به طور خلاصه MVVM نرم افزار را به ۳ لایه تقسیم می‌کنید. View, ViewModel, Model. لایه مدل وظیفه اش تامین اطلاعات است مثلا گرفتن اطلاعات از سرور یا  دیتابیس، لایه View تنها وظیفه اش نمایش اطلاعات است و ViewModel رابط بین لایه Model و View.

 

جت پک وردپرس ViewModel

وظیفه ViewModel ارتباط بین لایه View (مثلا  Fragment شما) و لایه Model (مثلا دیتابیس شما) می‌باشد. فرض کنید می‌خواهید لیست یادداشت هایی را از دیتابیس دریافت کنید. در این شرایط نباید مستقیما از Fragment به دیتابیس درخواست بفرستید. بلکه شما هر رویدادی که برای Fragment تان اتفاق می‌افتد را فقط به ViewModel اطلاع می‌دهید و ViewModel تصمیم می‌گیرد که چه زمانی باید اطلاعات را از دیتابیس بگیرد. مثلا وقتی متد onStart فرگمنت صدا زده شد به ViewModel اطلاع داده می‌شود و ViewModel لیست یادداشت‌ها را از دیتابیس درخواست می‌کند و نتیجه را به Fragment اعلام می‌کنید. اما چطور اطلاعات را به Fragment اطلاع بدهد. پاسخ  این سوال LiveData هست.

LiveData

به طور ساده LiveData یک ظرف نگه دارنده اطلاع (Data Holder) می‌باشد. بسته‌های اطلاعاتی که بین View و ViewModel جابه جا می‌شود می‌توانند از نوع LiveData باشند. اما چه مزیتی دارد؟ در ادامه خواهیم دید.

در اندروید لایه View چه Fragment باشد چه Activity چرخه حیاتی مخصوص به خود دارد. این چرخه حیات بسیار حائز اهمیت است از این بابت که درخواست و دریافت اطلاعات از Model کاملا به چرخه حیات View وابسته است. مثلا زمانی لیست یادداشت‌های باید دریافت شود که طبیعتا Fragment درحال نمایش باشد و زمانی که Fragment بسته شده باشد دیگر نیازی به دریافت نیست. یکی از مزیت‌های اصطلاحا Lifecycle Aware بودن آن است. به این معنی که لازم نیست شما نگران چرخه حیات View باشید، LiveData هوشمندانه آن را مدیریت می‌کند.

WorkManager

این ابزار برای زمان بندی انجام کارهای زمان بر کاربرد دارد. مثلا با WorkManager می‌توانید تعیین کنید که هر ۱۲ ساعت یک بار اطلاعات دیتابیس با سرور همگام سازی شوند.

یکی از مشکلات بزرگی که در اندروید وجود داشت نبود سیستمی یکپارچه و دقیق برای زمان بندی کارهای خاص بود. ابزارهای مختلفی مثل Alarm Service یا Job scheduler وجود داشتند ولی مثلا Alarm Service دقیق نبود و فقط تا ورژن ۱۹ اندروید کار می‌کرد و از طرف دیگر Job Scheduler روی ورژن‌های پایین‌تر کار نمی‌کرد. اما با  Work Manager دیگر چنین نگرانی وجود ندارد و تضمین می‌شود که درصورتی که شرایط انجام کار شما فراهم باشد، سر تایم مشخص شده کارتان انجام شود.

یکی از موارد جالب در مورد WorkManager این است که مثلا می‌توانید مشخص کنید هر ۱۲ ساعت و زمانی که کاربر به اینترنت متصل بود ولی با گوشیش کار نمی‌کرد، کار خاصی را انجام دهد. خب این موضوع می‌تواند در موارد بسیاری کمک کننده باشد مثلا برای گرفتن پشتیبان از عکس‌های گرفته شده و ارسال آن‌ها به سرور.

Paging

در خیلی از اپلیکیشن‌ها مشاهده کردید که مثلا وقتی می‌خواهند لیست اخبار را نمایش دهند، ۲۰ خبر ابتدا گرفته می‌شود و زمانی که کاربر به انتهای لیست رسید دوباره ۲۰ خبر بعدی گرفته می‌شود، دلیل این موضوع افزایش سرعت اجرای دستورات، صرفه جویی در رم و حجم دیتای کاربر می‌باشد. اصطلاحا به این روش Lazy Loading یا Infinite Scroll می‌گویند. برای پیاده سازی این سناریو از این بعد می‌توانید از لایبرری Paging استفاده کنید. مهم‌ترین مزیت استفاده از Paging سادگی و ساپورت کردن RecyclerView می‌باشد.

Navigation

از Navigation Component برای ارتباط و کنترل Navigation اپلیکیشن بین فرگمنت‌ها استفاده می‌شود. مثلا با این ابزار می‌توانید فرگمنت‌ها را به صورت بصری به هم متصل کنید و تعیین کنید از هر فرگمنتی به کجا می‌توان رفت و حتی آرگومان هایی که هر فرگمنت لازم دارد را مشخص کنید.

 

جت پک وردپرس

 

در سال ۲۰۱۸ گوگل از مفهوم جدیدی به نام SingleActivity پرده برداشت و رسما آن را جایگزین مناسبی برای روش‌های گذشته مثلا اپلیکیشن‌های شامل چند اکتیویتی معرفی کرد. هر چند قبل از گوگل اینستاگرام از این مفهوم استفاده کرده بود و عملا اپلیکیشن اینستاگرام سال هاست که SingleActivity می‌باشد. اما معنی اپلیکیشن SingleActivity چیست؟ به این معنی است که اپلیکیشن باید فقط یک اکتیویتی داشته باشد و همه صفحات با فرگمنت پیاده سازی شوند و این فرگمنت‌ها داخل اکتیویتی Load شوند. اما مزیت این روش و دلیل انتخاب آن خود مقاله ای کامل برای توضیح لازم دارد.