وبلاگ - مطالب آموزشی

0
318
نحوه بکارگیری Model View Presenter در اندروید

نحوه بکارگیری Model View Presenter در اندروید

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

در این مطلب:

– یک اپلیکیشن نمونه با استفاده از الگوی MVP می سازیم.

– نحوه پیاده سازی الگوی MVP در اندروید را شرح می دهیم.

– به بحث درباره نحوه رفع مشکلاتی که به سبب معماری اندروید پیش آمده اند خواهیم پرداخت.

1. Model View Presenter

الگوی Model View Presenter یک الگوی معماری بر پایه الگوی Model View Controller می باشد که جداسازی وظایف را افزایش داده و فرآیند تست واحد را تسهیل می بخشد. این الگو سه لایه به نام های Model، View و Presenter را می سازد که هرکدام دارای وظایف از پیش تعریف شده می باشند.

لایه Model دربرگیرنده منطق کاری اپلیکیشن است و نحوه ساخت، ذخیره سازی و اعمال تغییرات بر روی داده ها را کنترل می کند. View یک رابط غیرفعال است که داده ها را به نمایش می گذارد و عملیات کاربر را به سمت Presenter هدایت می کند. Presenter در حقیقت در نقش واسط ظاهر می شود و با بازیابی داده ها از Model، آن را در View به نمایش می گذارد، علاوه بر این، لایه مذکور آن دسته از عملیات کاربر را که توسط View برای آن ارسال شده است پردازش می کند.

2. برنامه ریزی پروژه و راه اندازی

به منظور نمایش نحوه عملکرد MVP یک اپلیکیشن notes ساده می سازیم. این اپلیکیشن کاربر را قادر به یادداشت برداری می کند و یادداشت ها را در یک پایگاه داده لوکال ذخیره می نماید، در صورت تمایل کاربر می تواند یادداشت های نوشته شده را پاک کند، برای سادگی کار اپلیکیشن تنها یک اکتیویتی خواهد داشت.

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

نمودار اکشن و لایه های MVP

کار را با ساخت یک یادداشت جدید آغاز می کنیم، در صورتی که این عملیات را به عملکردها کوچک تر بشکنید نمودار جریان کاری با استفاده از الگوی معماری MVP به صورت زیر خواهد بود:

– کاربر یک یادداشت را تایپ کرده و بر روی دکمه افزودن یادداشت کلیک می کند.

– Presenter آبجکت Note را با استفاده از متنی که کاربر وارد کرده می سازد و از لایه Model درخواست می کند تا آن را در پایگاه داده درج نماید.

– Model یادداشت را در پایگاه داده درج نموده و Presenter را از بابت تغییر اعمال شده در فهرست یادداشت ها مطلع می سازد.

– Presenter فیلد متنی را پاک کرده و از View درخواست بازنشانی فهرست خود و نمایش یادداشت جدید را می کند.

blog_17892_3

رابط های MVP

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

RequiredViewOps: عملیات موردنیاز View که در دسترس Presenter قرار دارد.

ProvidedPresenterOps: عملیاتی که به View به منظور برقراری ارتباط با View پیشنهاد شده است.

RequiredPresenterOps: عملیات موردنیاز Presenter که در دسترس Model قرار دارند.

ProvidedModelOps: عملیاتی که به Model جهت برقراری ارتباط با Presenter پیشنهاد شده است.

3. پیاه سازی MVP در اندروید

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

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

– EditText برای یادداشت های جدید

– Button برای افزودن یک یادداشت جدید

– RecyclerView برای فهرست بندی تمامی یادداشت ها

– دو عنصر TextView و یک Button در داخل یک هولدر RecyclerView

رابط ها

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

لایه View

در این مرحله لازم است تا لایه های Model، View و Presenter را بسازیم.

MainActivity در نقش View ظاهر می شود، بنابراین باید به پیاده سازی رابط RequiredViewOps بپردازد.

لایه Presenter

همانطور که پیشتر نیز اشاره شد، Presenter در نقش واسطه ای عمل می کند و باید به پیاده سازی دو رابط بپردازد.

– ProvidedPresenterOps به منظور پذیرفتن فراخوانی های صورت گرفته از سمت View

– RequiredPreesnterOps به منظور بازیابی نتایج از Model

به رابط لایه View توجه داشته باشید، باید <WeakReference<MVP_Main.RequiredViewOps را مورد استفاده قرار دهیم، زیرا MainActivity ممکن است هر زمانی از بین برود و باید از نشتی های حافظه جلوگیری به عمل آید. علاوه بر این، لایه Model هنوز ساخته نشده و زمانی که لایه های MVP را به یکدیگر متصل کردیم، آن را خواهیم ساخت.

لایه Model

لایه Model مسئول مدیریت منطق کاری اپلیکیشن است و ArrayList از یادداشت هایی که به پایگاه داده افزوده شده، یک رابط DAO برای اجرای عملیات پایگاه داده و یک مرجع به Presenter را نگه می دارد.

4. آزمودن همه چیز با هم

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

نمونه سازی لایه ها

از آنجایی که نمونه سازی یک اکتیویتی در اندروید امکان پذیر نمی باشد، لایه View آن را نمونه سازی خواهد کرد. اما نمونه سازی لایه های Presenter و Model بر عهده ما قرار دارد. متاسفانه نمونه سازی این لایه ها در خارج از اکتیویتی می تواند مشکل ساز باشد.

پیشنهاد می شود تا از یک فرم از تزریق وابستگی برای انجام این کار استفاده گردد. از آنجایی که هدف ما بر روی پیاده سازی MVP نهاده شده، رویکرد ساده تری را در پیش خواهیم گرفت. این رویکرد بهترین گزینه ممکن نیست، اما درک آن ساده تر صورت می پذیرد.

– نمونه سازی Presenter و Model در اکتیویتی با استفاده از متغیرهای محلی

– راه اندازی RequiredViewOps و ProvidedModelOps در Presenter

– راه اندازی RequiredPresenterOps در Model

– ذخیره سازی ProvidedPresenterOps به عنوان مرجعی جهت استفاده در View

مدیریت تغییرات پیکربندی

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

باید یک متد Ondestroy را به Presenter و Model افزوده و آنها را از حالت کنونی اکتیویتی مطلع گردانیم. علاوه بر این لازم است تا یک متد setView را به Presenter بیفزاییم، این متد مسئول دریافت یک مرجع جدید View  از اکتیویتی ساخته شده می باشد.

جمع بندی

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

در این مرحله قادر به ساخت یک لایبرری MVP و یا استفاده از یک راه حل در دسترس مانند Mosby یا simple-mvp می باشید. هم اکنون عملکرد این لایبرری ها برای شما قابل درک تر و ملموس تر از گذشته شده است.

در مطلب آینده به فرآیند تست واحد و ادغام و سازگار کردن کد به منظور استفاده از تزریق وابستگی با کمک Dagger خواهیم پرداخت.

 

منبع:

http://code.tutsplus.com

این نوشته را به گوگل توصیه کنید :

بسته های آموزشی جذاب!بیشتر