آموزش و پیاده سازی معماری MVP در اندروید

معماری MVP چیست و پیاده سازی MVP در اندروید چگونه است؟

برای آموزش MVP در اندروید ابتدا باید بدانید معماری MVP چیست! الگوی (MVP (Model View Presenter از معماری شناخته شده (MVC (Model View Controller مشتق شده است و یکی از محبوب ترین الگوها برای سازماندهی لایه Presenter در برنامه های Android است. با ما همراه باشید تا با ذکر یک مثال شما را با پیاده سازی MVP در اندروید آشنا کنیم.

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

اولین چیزی که باید روشن شود این است که MVP به خودی خود یک معماری نیست ، بلکه تنها مسئولیت لایه Presenter را بر عهده دارد. این یک ارزیابی بحث برانگیز بوده است ، بنابراین می خواهم آن را کمی عمیق تر توضیح دهم.

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

آموزش معماری mvvm اندروید - آموزش معماری mvvm در اندروید - آموزش برنامه نویسی اندروید پروژه محور - آموزش پروژه محور برنامه نویسی اندروید استودیو - آموزش MVP در اندروید

مزایای آموزش MVP در اندروید چیست و چرا باید از این معماری استفاده کنیم؟

  1. خیلی از شرکت ها برنامه نویسانی را استخدام می کنند که با پیاده سازی MVP در اندروید آشنایی داشته باشند و اگر در سبد آموزش برنامه نویسی اندروید خود این موضوع را یاد بگیرید، می توانید با خیلی از شرکت ها همکاری کنید که هم برای شما درآمد زایی دارد و هم شرکت ها می توانند از توانایی شما استفاده کنند.
  2. بعد از آموزش MVP در اندروید ، به عنوان مدیر پروژه براحتی می توانید بدون توضیحات اضافه کار گروهی راحتی با همکاران خود داشته باشید.
  3. بعد از اینکه پروژه خود را با معماری MVP نوشتید، براحتی می توانید آن را تغییر و آپدیت کنید
  4. با پیاده سازی MVP در اندروید در پروژه های بزرگ می توانید تست نویسی را راحت تر انجام دهید
  5. در Android مشکل ما ناشی از این واقعیت است که Activity های Android با مکانیزم های دسترسی UI و مکانیزم دسترسی به داده ها نزدیک است. ما می توانیم نمونه های افراطی مانند CursorAdapter را پیدا کنیم ، که آداپتورها را که بخشی از view هستند ، ترکیب کنند با cursors ، چیزی که باید به اعماق لایه دسترسی به داده ها منتقل شود.
  6.  برای اینکه یک برنامه به راحتی قابل توسعه و نگهداری باشد ، باید لایه های کاملاً جدا از هم تعریف کنیم. فردا چه کاری انجام میدهیم اگر به جای بازیابی همان داده ها از یک پایگاه داده ، بخواهیم آن را از یک سرویس وب دریافت کنیم؟ ما مجبوریم کل view های خود را دوباره از اول بسازیم.
  7.  معماری MVP در واقع لایه view را از منبع داده های ما مستقل می کند. ما برنامه را حداقل به سه لایه مختلف تقسیم می کنیم، که به ما امکان می دهد آنها را بطور مستقل تست کنیم. با MVP بیشتر منطق را از Activity خارج می کنیم تا بتوانیم بدون استفاده از تست های ابزار دقیق آن را آزمایش کنیم

ایجاد یک پروژه ساده برای درک بهتر پیاده سازی MVP در اندروید :

یک پروژه جدید در اندروید استودیو ایجاد میکنیم . نام لی اوت را به activity_login تغییر میدهیم . روت لی اوت را به LinearLayout تغییر داده و درون آن 2 EditText و یک TextView به صورت زیر میگذاریم :

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:orientation="vertical"
    android:gravity="center_vertical"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".activities.LoginActivity">

    <EditText
        android:id="@+id/etUserName"
        android:layout_marginRight="25dp"
        android:layout_marginLeft="25dp"
        android:hint="Enter UserName ..."
        android:inputType="textPersonName"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" />

    <EditText
        android:id="@+id/etPassword"
        android:layout_marginTop="25dp"
        android:layout_marginRight="25dp"
        android:layout_marginLeft="25dp"
        android:hint="Enter Password ..."
        android:inputType="textPassword"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" />

    <TextView
        android:id="@+id/tvLogin"
        android:padding="12dp"
        android:textSize="22sp"
        android:textColor="#fff"
        android:textStyle="bold"
        android:background="@color/colorPrimaryDark"
        android:text="LOGIN"
        android:gravity="center"
        android:layout_marginTop="25dp"
        android:layout_marginRight="25dp"
        android:layout_marginLeft="25dp"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" />

</LinearLayout>

سه پکیج جدید با نام های model ، view و presenter در پروژه ایجاد میکنیم . یک پکیج دیگر به نام activities نیز ایجاد کرده. اکتیویتی اصلی را به LoginActivity تغییر نام داده و درون پکیج activities میگذاریم .حال باید 2 اینترفیس در پکیج های view و presenter ایجاد کنیم . ابتدا روی پکیج view راست کلیک کرده ، New و سپس Java Class را میزنیم . نوع آنرا از Class به Interface تغییر می دهیم. نام این اینترفیس را LoginView گذاشته و ok را می زنیم تا اینترفیس ایجاد شود.

سپس روی پکیج presenter راست کلیک کرده، New و سپس Java Class را میزنیم . نوع آنرا از Class به Interface تغییر می دهیم. نام این اینترفیس را LoginPresenter گذاشته و ok را میزنیم تا اینترفیس دوم نیز ایجاد شود.

کد های اینترفیس LoginView به صورت زیر میباشد :

package com.elecomco.simplemvp.view;

public interface LoginView {
    void loginValidations();
    void loginSuccess();
    void loginError();
}

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

یک بدنه تابع با نام preFormLogin در اینترفیس LoginPresenter ایجاد کرده که شامل 2 ورودی از نوع رشته می باشد. در واقع می خواهیم یوزر نیم و پسورد در این اینترفیس گرفته شود. یا بهتر بگم ورودی ها رو از لایه Presenter دریافت می کنیم.

package com.elecomco.simplemvp.presenter;

public interface LoginPresenter {
    void preFormLogin(String userName,String password);
}

حالا یه کلاس می خوایم که از اینترفیس LoginPresenter ارث بری کنه (implements) ، و توابع اون رو پیاده سازی کنه. در پکیج model که در واقع نقش لایه مدل رو بازی می کنه، یه کلاس جدید با نام PresenterImpl میسازیم .کد های این کلاس به صورت زیر می باشد:

package com.elecomco.simplemvp.model;

import android.text.TextUtils;

import com.elecomco.simplemvp.presenter.LoginPresenter;
import com.elecomco.simplemvp.view.LoginView;

public class PresenterImpl implements LoginPresenter {

    LoginView mLoginView;

    public PresenterImpl(LoginView mLoginView) {
        this.mLoginView = mLoginView;
    }

    @Override
    public void preFormLogin(String userName, String password) {
        if(TextUtils.isEmpty(userName) || TextUtils.isEmpty(password)){
            mLoginView.loginValidations();
        }else {
            if(userName.equals("mohammad") && password.equals("123")){
                mLoginView.loginSuccess();
            }else {
                mLoginView.loginError();
            }
        }
    }
}

همانطور که مشاهده می کنید ورودی Constractor ما همان اینترفیسی هست که در لایه ویو ایجاد کرده ایم. یوزر نیم و پسورد را چک می کنیم. اگر مقدار آنها خالی بود تابع loginValidations فراخوانی می شود. اگر مقدار آنها برابر مقادیر دلخواه خودم بود تابع loginSuccess و اگر مقادیر وارد شده اشتباه بود ، تابع loginError فراخوانی می شود.

در اینجا کاملا اختیار از view گرفته شده است و اصلا نمیداند از کجا گرفته می شوند و به چه شکلی پیاده سازی می شوند. لایه مدل اطلاعات را از لایه Presenter دریافت می کند و view فقط یک شکل نمایشی دارد و دستورات اصلی را لایه Presenter ایجاد می کند و لایه View فقط اطاعت می کند.

حالا میرسیم به کدنویسی اکتیویتی :

package com.elecomco.simplemvp.activities;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;

import com.elecomco.simplemvp.R;
import com.elecomco.simplemvp.model.PresenterImpl;
import com.elecomco.simplemvp.presenter.LoginPresenter;
import com.elecomco.simplemvp.view.LoginView;

public class LoginActivity extends AppCompatActivity implements View.OnClickListener, LoginView {

    EditText etUserName,etPassword;
    TextView tvLogin;

    LoginPresenter mLoginPresenter;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_login);

        etUserName=findViewById(R.id.etUserName);
        etPassword=findViewById(R.id.etPassword);

        tvLogin=findViewById(R.id.tvLogin);
        tvLogin.setOnClickListener(this);

        mLoginPresenter=new PresenterImpl(LoginActivity.this);

    }

    @Override
    public void onClick(View v) {
        String userName=etUserName.getText().toString();
        String password=etPassword.getText().toString();

        mLoginPresenter.preFormLogin(userName,password);

    }

    @Override
    public void loginValidations() {
        Toast.makeText(this, "Please Enter username and password!", Toast.LENGTH_SHORT).show();
    }

    @Override
    public void loginSuccess() {
        Toast.makeText(this, "Login Success!", Toast.LENGTH_SHORT).show();
    }

    @Override
    public void loginError() {
        Toast.makeText(this, "Login Failure!", Toast.LENGTH_SHORT).show();
    }
}

این ساده ترین پروژه ای بود که برای مفهوم معماری MVP در اندروید ایجاد کردیم. همینطور که می بینید محتوای ادیت تکست ها دیگه در لی اوت چک نمیشن، لی اوت ما دیگه اینجا هیچ کاره هست و فقط حالت نمایشی داره. کارهای اصلی رو لایه Presenter داره انجام میده . حالا اگه بخواین اکتیویتی رو به فرگمنت تبدیل کنید ، خیلی راحت و بدون اینکه در برنامتون تغییری ایجاد بشه ، این کار رو انجام میدین .

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

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

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

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

در صورتیکه می خواهید یک اپلیکیشن اندرویدی برای کسب و کار خودتان یا مشتریان خود درست کنید پکیج آموزش برنامه نویسی اندروید با Android Studio  که در زیر میبینید را به شما پیشنهاد می کنیم.

پیشنهادات ویژه برای شما

پکیج آموزش برنامه نویسی اندروید برای ورود به بازار کار

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

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

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

آموزش اندروید استودیو - آموزش android studio - آموزش برنامه نویسی اندروید الکامکو - ساخت اپلیکیشن اندروید

دوره حرفه ای طراحی اپلیکیشن فروشگاهی اندروید دیجی کالا

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

شک نکنید بعد از دیدن این جلسات رایگان، حتما این دوره ساخت اپلیکیشن دیجیکالا (Digikala) را خریداری خواهید کرد. چون مدرس این دوره، با حرفه ای ترین و جدیدترین روش ها، کاملترین مجموعه ساخت اپلیکیشن فروشگاهی اندروید دیجی کالا را برای شما تهیه کرده است و در نهایت و بعد از تکمیل این پروژه همراه با سورس دیجی کالا php + اپلیکیشن اندروید در اختیار شما قرار خواهد گرفت.

آموزش ساخت اپلیکیشن اندروید دیجی کالا

دوره حرفه ای ساخت اپلیکیشن اندروید فیلیمو در اندروید استودیو

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

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

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

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

دوره حرفه ای آموزش طراحی رابط کاربری (UI) و تجربه کاربری (UX) در اندروید

شما با یادگیری اصول پیاده سازی طراحی رابط کاربری UI و تجربه کاربری UX در اندروید در این دوره که مطابق با سیستم طراحی Material Design شرکت گوگل آموزش دادیم و بکارگیری آن در برنامه اندرویدی که خواهید ساخت، می توانید کاربران بیشتری را جذب کنید تا از اپلیکیشن شما استفاده کنند؛ چون هر چقدر دیزاین اپلیکیشن شما حرفه ای تر و زیباتر باشد تعداد افراد بیشتری به مشتریان و کاربران شما اضافه خواهند شد. پس با این آموزش ها می توانید جذابیت های بصری زیادی در اپلیکیشن اندروید خود ایجاد کنید و این امر از اهمیت زیادی در ساخت اپلیکیشن موبایل برخوردار است.

در ضمن بیش از 50 پروژه حرفه ای طراحی UX UI اندروید به همراه سورس کد مربوطه در این پکیج آموزش تخصصی طراحی رابط کاربری و تجربه کاربری ساخته شده است تا شما با دید بازتری به طراحی اپلیکیشن بپردازید.

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

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

آموزش طراحی رابط کاربری (طراحی UI اندروید) و آموزش طراحی تجربه کاربری (طراحی UX اندروید) - آموزش برنامه نویسی اندروید الکامکو
مشاهده همه دوره های آموزش برنامه نویسی اندروید الکامکو
{ آموزشگاه آنلاین الکامکو }

مرجع آموزش برنامه نویسی اندروید

طراحی اپلیکیشن موبایل

طراحی سایت

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

اشتراک گذاری این صفحه در شبکه های اجتماعی:

2
سوالات و نظرات خود را در این بخش مطرح کنید

avatar
1 نظرات
1 پاسخ ها
0 دنبال کنندگان
 
بیشترین واکنش
پرطرفدار ترین
2 نویسندگان دیدگاه
پشتیبان فنیalireza آخرین نویسندگان دیدگاه
جدید ترین قدیمی ترین
alireza
مهمان
alireza

سلام. با تشکر از این مطلب خوبتون . یه سوال داشتم. مهندس آزاد دوره MVP رو به صورت یک دوره آموزشی جداگانه هم آموزش میدن ؟

فهرست