Sample Sidebar Module

This is a sample module published to the sidebar_top position, using the -sidebar module class suffix. There is also a sidebar_bottom position below the menu.

Sample Sidebar Module

This is a sample module published to the sidebar_bottom position, using the -sidebar module class suffix. There is also a sidebar_top position below the search.
معماری MVVM در اندروید

MVVM چیست؟

ابتدا، در مورد آنچه که الگوی MVVM است صحبت خواهیم کرد. الگوی MVVM یک الگوی برگرفته از الگوی MVP است که در دهه 1990 توسط مارتین فاولر تعریف شده است. الگوی MVVM (Model-View-ViewModel) به جداسازی کامل منطق ارائه (presentation) و ارائه از UI کمک می کند و منطق کسب و کار و رابط کاربری را می توان به طور واضح برای آزمایش راحت تر و نگهداری راحت تر از هم جدا کرد. بیایید نگاهی بهView ، ViewModel و Model بیندازیم.

View

view مسئول ساختار طرح نمایش داده شده روی صفحه است. شما همچنین می توانید منطق UI را اجرا کنید.

ViewModel

ViewModel داده ها و دستورات متصل به View را پیاده سازی می کند تا ویو همواره هماهنگ با تغییرات باشد و تغییرات حالت را از طریق رویدادهای مطلع کند. سپس view که اعلان تغییر وضعیت را دریافت می کند تعیین می کند که آیا این تغییر را اعمال کند یا خیر. ViewModel در اینجا با ViewModel در AAC (Android Architecture Component) متفاوت است. ViewModel در AAC یک کلاس است که Lifecycle را برای نگهداری داده های مورد استفاده توسط View در تغییراتی مانند چرخش صفحه می شناسد. اگر می خواهید در حین توسعه اندروید از الگوی MVVM استفاده کنید، می توانید بدون استفاده از AAC ViewModel آن را پیاده سازی کنید.

Model

Model یک کلاس غیر بصری است که داده هایی برای استفاده دارد. مثالها شامل DTO (اشیاء انتقال داده) ، POJO (اشیاء ساده قدیمی جاوا) و اشیاء موجودیت هستند. معمولاً از این سرویس یا مخزن استفاده می شود که به دسترسی یا ذخیره اطلاعات نیاز دارد.

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

Architecture

در این مثال، بر اساس الگوی MVVM و الگوی مخزن پیاده سازی می شود و Local DataSource استفاده نمی شود.

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

چهار قدم برای اجرای MVVM

  1. ایجاد مدل
  2. ایجاد مخزن یا همان repository (برای گرفتن اطلاعات از API یا دیتابیس)
  3. ایجاد ویومدل (برای گرفتن زنده اطلاعات از مخزن)
  4. ایجاد اکتیویتی (برای نمایش داده های گرفته شده از viewModel)

قبل از شروع اگر از اندروید x استفاده نمیکنید لازم است کد زیر را به گرادل اضافه کنید:

implementation “android.arch.lifecycle:extensions:1.0.0”

قدم اول: ایجاد مدل

بیایید یک کلاس Pojo ایجاد کنیم تا اطلاعات هر تعطیلات را ذخیره کنیم:

public class HolidayModel {

    private String date;
    private String name;

    public String getDate() {
        return date;
    }

    public void setDate(String date) {
        this.date = date;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

}

قدم دوم: ایجاد مخزن

مخزن کلاس است که در آن داده های API یا DB را واکشی می کنیم.

در روش گیرنده مخزن یک متغیر با MutableLiveData ایجاد کنید.

final MutableLiveData<List<HolidayModel>> mutableLiveData = new MutableLiveData<>();

داده ها را از API گرفته و داده ها را در این متغیر قرار میدهیم.

mutableLiveData.setValue(response.body());

ارجاع به مثال زیر:

public class HolidayRepo {

    private final String TAG = getClass().getSimpleName();

    public MutableLiveData<List<HolidayModel>> requestHolidays() {
        final MutableLiveData<List<HolidayModel>> mutableLiveData = new MutableLiveData<>();

        ApiInterface apiService =
                MyApplication.getRetrofitClient().create(ApiInterface.class);

        apiService.getHolidays().enqueue(new Callback<List<HolidayModel>>() {
            @Override
            public void onResponse(Call<List<HolidayModel>> call, Response<List<HolidayModel>> response) {
                Log.e(TAG, "getCurrencyList response="+response );

                if (response.isSuccessful() && response.body()!=null ) {
                    Log.e(TAG, "requestHolidays response.size="+response.body().size() );
                    mutableLiveData.setValue(response.body());
                }
            }

            @Override
            public void onFailure(Call<List<HolidayModel>> call, Throwable t) {
                Log.e(TAG, "getProdList onFailure" + call.toString());
            }
        });

        return mutableLiveData;
    }

}

در این مثال از Retrofit برای گرفتن اطلاعات استفاده شده است.

قدم سوم: ایجاد ViewModel

ViewModel فقط یک کلاس است که با ارث بری از ViewModel برای نگهداری داده ها ایجاد شده است، تعریف رسمی آن عبارت است از:

"کلاس ViewModel برای نگهداری و مدیریت داده های مرتبط با UI به روش آگاهی از چرخه زندگی طراحی شده است. این اجازه می دهد تا داده ها ضمن تغییرات پیکربندی مانند چرخش صفحه، بروز و زنده بمانند."

برای ایجاد یک ViewModel، یک کلاس را با ViewModel گسترش دهید، شیء مخزن را در سازنده تعریف کنید، متغیر LiveData را ایجاد کنید، یک متد getter ایجاد کنید تا از مخزن مقدار دریافت کنید و وارد LiveData نمایید.

public class HolidayViewModel extends ViewModel {

    private HolidayRepo holidayRepo;
    private MutableLiveData<List<HolidayModel>> mutableLiveData;

    public HolidayViewModel(){
        holidayRepo = new HolidayRepo();
    }

    public LiveData<List<HolidayModel>> getHolidays() {
        if(mutableLiveData==null){
            mutableLiveData = holidayRepo.requestHolidays();
        }
        return mutableLiveData;
    }

}

اکنون که Model ،Repository و ViewModel را ایجاد کرده ایم. بیایید قدم نهایی را برداریم

قدم چهارم: ایجاد اکتیویتی

در Activity یک شیء از ViewModel ایجاد کنید، با روش getter داده ها را بگیرید و داده ها را با استفاده از LiveData مانند شکل زیر مشاهده کنید:

HolidayViewModel holidayViewModel = new HolidayViewModel();

holidayViewModel.getHolidays().observe(this, new Observer<List<HolidayModel>>() {
    @Override
    public void onChanged(List<HolidayModel> currencyPojos) {
        adapter.addHolidayList(currencyPojos);
        adapter.notifyDataSetChanged();
    }
});

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

برای مشاهده کد کامل، بسته "جاوا" و "کاتلین" را در این پروژه را در گیت هاب بررسی کنید.

https://github.com/kashifo/easymvvm

مترجم: هاشمی

پینوشت مترجم: بعد از ایجاد این مطلب تصمیم گرفتم تا با ایجاد یک branch در repository که قبلا در GitHub ایجاد نموده بودم، ساختار آنرا به برای نمونه به MVVM تغییر دهیم. این repository یک برنامه نمونه ایجاد note در گوشی اندرویدی است. میتوانید کدهای این نمونه برنامه از طریق لینک های زیر مشاهده نمایید:

MVVM structure: https://github.com/AppAfzar/My_notes_application_mvp_realm/tree/mvvm-pattern

MVP structure: https://github.com/AppAfzar/My_notes_application_mvp_realm

برنامه نویسی اندروید پرواز پاراگلایدر کوهنوردی

فرم ورود

فرم ثبت نام