آموزش معماری MVP در اندروید (بخش اول)
جلسات دوره
مهدی عباسی
مهدی عباسی هستم، مسلط به حداقل ۲۰ زبان مطرح برنامه نویسی به صورت پیشرفته، مدیر عامل شرکت آریا نرم افزار و بنیانگذار آکادمی درسمن، مسلط به تدریس دروس تخصصی کاردانی و کارشناسی کامپیوتر، پایگاه داده ها، برنامه نویسی پیشرفته، مبانی برنامه نویسی، مباحث ویژه طراحی وب و .... مشاهده رزومه
آموزش معماری MVP در اندروید (بخش اول)
در این جلسه می خواهیم به آموزش معماری MVP در اندروید، یکی از معماریهای محبوب آشنا شویم.
تا اینجا برنامههای خود را نوشتیم و به فکر توسعه آنها در آینده نبودیم یعنی فقط به قابلیتهایی که قرار بود امروزه اپلیکیشن ما داشته باشد را اضافه میکردیم. حال اگر یک پروژه را برای کارفرما نوشته باشیم و کارفرما بعد از مدتی برگردد و بخواهد چند قابلیت جدید به پروژه اضافه کند و یا چند قسمت را ویرایش کند، باید چه کنیم؟
چون از روز اول اپلیکیشنی که نوشتیم ساختار و چهارچوب مشخصی نداشته، ارتقای آن به شدت سخت است. حتی در بعضی از مواقع نیاز داشته باشید برای یک تغییر کوچک قسمتی از پروژه را پاک و دوباره بنویسید. اما چرا این اتفاقها میافتد؟ به دلیل وابستگیهای بین کدها.
زمانی که میخواهید یک قسمت از کد را تغییر دهید، متوجه میشوید که بسیار سخت است و به باگهای زیادی برخورد میکنید. اما راه حل، استفاده از ساختار و چهارچوب است که به آن معماری گفته میشود.
معماریهای زیادی برای ساخت نرمافزار معرفی شده اما برای اندروید 2 معماری MVP و MVVM از بهترینها هستند و اکثر برنامهنویسان از این 2 معماری استفاده میکنند. در این جلسه میخواهیم با معماری MVP آشنا شویم.
در تصویر بالا ساختار معماری MVP را مشاهده می کنید. معماری MVP از 3 لایه زیر تشکیل شده است:
-
View: هر صفحه که کاربر مشاهده میکند درون لایه View قرار میگیرد (Activity ،Fragment).
-
Model: در این لایه تمام دیتا (موجودیتها) قرار دارد و میتواند هر جایی ذخیره شده باشد (Database ،SharedPrefrence، .…).
-
Presenter: لایه مدیر است و توسط این لایه تمام دستورات بین لایه View و Model اجرا میشود. به عنوان مثال اگر درون صفحه، کاربر دکمهای را کلیک کند لایه View به لایه Presenter خبر میدهد و سپس لایه Presenter به لایه Model عملیات مدنظر را ارسال میکند و نتیجه عملیات را از لایه Model به لایه Presenter ارسال کرده و سپس از لایه Presenter به لایه View منتقل و در نهایت نتیجه عملیات به کاربر نمایش داده میشود.
در تصویر بالا نیز ساختار معماری MVP را مشاهده میکنید که از 3 لایه View ،Presenter و Model تشکیل شده است اما خود لایه Model نیز 2 بخش دارد به نامهای Use Cases و Entities و حتی در شرایطی میتوان بیشتر از 2 بخش هم باشد.
در بخش Entities موجودیتها قرار دارد و در بخش Use Cases فعالیت و عملیاتها قرار گرفته است مانند عملیات درج، حذف، ویرایش و...
در تصویر بالا نیز ارتباط معماری MVP را مشاهده میکنید که در لایه Model، دادهها با Data Manager(Data access) ارتباط برقرار میکنند و سپس با لایه Presenter و سپس با لایه View.
در تصویر بالا نحوه پیادهسازی معماری MVP را مشاهده میکنید. برای هر ویو باید یک Interface درست کرد و کلاس View باید از آن ارثبری کند. سپس برای Presenter باید یک Interface درست کرد تا کلاس Presenter از آن ارثبری کند. رابطه Presenter با View رابطه 1 به 1 است.
به عنوان مثال برای ویو MainActivity تمام عملیاتهای آن را درون یک Interface تعریف می کنیم مثال عملیات درج، عملیات نمایش لیست و...
سپس درون کلاس ویو که در اینجا مثال MinActivity را زدیم، باید از آن Interface ارثبری کند و تمام عملیاتهایی که درون Interface تعریف کرده را پیادهسازی کند.
سپس به ازای هر کلاس View، باید یک کلاس Presenter تعریف کرد. همانطور که در بالا گفته شد برای هر Presenter هم باید یک Interface تعریف و برای تمام رفتاریی که باید پاسخ دهد را درون آن تعریف میکنیم. سپس باید درون کلاس Presenter از آن ارثبری کرد.
در آخر لایه Model را داریم که هر رابطهای با Presenter داشته باشد و باید درون خودش Entities و Data access داشته باشد. در ادامه نیز با روش پیادهسازی معماری MVP در پروژه آشنا میشویم.
در ابتدا یک پروژه ساختیم و Ui بالا را طراحی کردیم. در این پروژه میخواهیم اطلاعات یک کتاب (Id ،Name) را از کاربر گرفته و با زدن دکمه ADD BOOK آن را به لیست اضافه کنیم. سپس با زدن دکمه SHOW ALL BOOKS تمام لیست کتابها را درون TextView نمایش دهد. اگر لیست خالی باشد و کاربر دکمه SHOW ALL BOOKS را کلیک کند، پیغام لیست خالی به کاربر نمایش داده میشود.
برای بهتر دیده شدن پکیچها و پوشهبندیها نمای پروژه را از Android به Project تغییر میدهیم. سپس درون پکیچ اصلی برنامه یک پکیچ دیگر به نام Model اضافه و درون پکیچ Model، یک کلاس مدل به نام Book اضافه میکنیم.
public class Book {
private int bookId;
private String bookName;
public Book(int bookId, String bookName) {
this.bookId=bookId;
this.bookName=bookName;
}
public int getBookId() {
return bookId;
}
public void setBookId(int bookId) {
this.bookId=bookId;
}
public String getBookName() {
return bookName;
}
public void setBookName(String bookName) {
this.bookName=bookName;
}
}
سپس یک کلاس Data access برای کلاس مدل Book اضافه میکنیم و عملیاتها را درون آن مینویسم.
public class BookDataAccess {
List<Book> books=new ArrayList<>();
public void addBook(Book book) {
book.add(book);
}
public List<Book> getBooks() {
return books;
}
}
به همین راحتی لایه Model تمام شد.
نظر شما در تصمیم دیگران اثرگذار است.
لطفا برای همراهان درسمن و بهتر شدن دوره نظر خود را بنویسید.