Android MVP пример для начинающих. Без библиотек и интерфейсов.

Обсуждение статей из раздела Блог
Ответить
Аватара пользователя
damager82
Администратор
Сообщения: 1383
Зарегистрирован: 07 янв 2012, 11:32
Контактная информация:

Android MVP пример для начинающих. Без библиотек и интерфейсов.

Сообщение damager82 » 17 июл 2017, 11:22

В этом посте описывается несложный пример MVP, без использования запутывающих интерфейсов и сложных библиотек. 


Click here to read this article!
Последний раз редактировалось damager82 25 июл 2018, 21:54, всего редактировалось 16 раз.
Добро пожаловать на форум сайта StartAndroid
ИзображениеИзображение

danek130995
Сообщения: 42
Зарегистрирован: 25 янв 2015, 18:57

Re: MVP для начинающих. Без библиотек и интерфейсов.

Сообщение danek130995 » 04 авг 2017, 10:42

Спасибо за отличный материал!
В UsersActivity в методе onCreate() вызов метода presenter.loadUsers() скорее всего необязателен в данном случае, так как ему предшествует вызов метода init(), в конце которого вызывается presenter.viewIsReady(), который также внутри себя содержит вызов loadUsers();

MichaelG
Сообщения: 1
Зарегистрирован: 04 авг 2017, 11:19

Re: MVP для начинающих. Без библиотек и интерфейсов.

Сообщение MichaelG » 04 авг 2017, 11:35

Вопрос по import
Зачем делать import ru.startandroid.mvpsample.* и делать отдельныא packages
Если классы в томже приложении?
И откуда взять import ru.startandroid.mvpsample.R;?
Спасибо за уроки

Аватара пользователя
damager82
Администратор
Сообщения: 1383
Зарегистрирован: 07 янв 2012, 11:32
Контактная информация:

Re: MVP для начинающих. Без библиотек и интерфейсов.

Сообщение damager82 » 13 авг 2017, 20:17

danek130995 писал(а):Спасибо за отличный материал!
В UsersActivity в методе onCreate() вызов метода presenter.loadUsers() скорее всего необязателен в данном случае, так как ему предшествует вызов метода init(), в конце которого вызывается presenter.viewIsReady(), который также внутри себя содержит вызов loadUsers();
Верно, лишний вызов. Спасибо, что заметили!
Добро пожаловать на форум сайта StartAndroid
ИзображениеИзображение

Аватара пользователя
damager82
Администратор
Сообщения: 1383
Зарегистрирован: 07 янв 2012, 11:32
Контактная информация:

Re: MVP для начинающих. Без библиотек и интерфейсов.

Сообщение damager82 » 13 авг 2017, 20:22

MichaelG писал(а):Вопрос по import
Зачем делать import ru.startandroid.mvpsample.* и делать отдельныא packages
Если классы в томже приложении?
И откуда взять import ru.startandroid.mvpsample.R;?
Спасибо за уроки
Если классы в разных пакетах, то необходимо прописывать импорт при использовании. А разные пакеты нужны, чтобы классы были удобно организованы. В таком небольшом приложении может быть еще и можно все классы в один пакет поместить. Но когда таких классов сотни и тысячи, уже не прокатит.
Более того, clean architecture подразумевает разделение классов не только по разным пакетам, но и по разным модулям. Но это уже другая история.
Добро пожаловать на форум сайта StartAndroid
ИзображениеИзображение

zoomeee
Сообщения: 1
Зарегистрирован: 17 апр 2018, 20:00

Re: Android MVP пример для начинающих. Без библиотек и интер

Сообщение zoomeee » 17 апр 2018, 20:22

Спасибо за ваш блог. Интересует такой вопрос: на сколько корректно согласно идеи MVP реализовывать так метод в UserPresenter (код из вашего примера):

Код: Выделить всё

public void add() {
        UserData userData = view.getUserData();
        if (TextUtils.isEmpty(userData.getName()) || TextUtils.isEmpty(userData.getEmail())) {
            view.showToast(R.string.empty_values);
            return;
        }

        ContentValues cv = new ContentValues(2);
        cv.put(UserTable.COLUMN.NAME, userData.getName());
        cv.put(UserTable.COLUMN.EMAIL, userData.getEmail());
        view.showProgress();
        model.addUser(cv, new UsersModel.CompleteCallback() {
            @Override
            public void onComplete() {
                view.hideProgress();
                loadUsers();
            }
        });
    }
Выходит так, что из-за того что передаем в модель объект класс ContentValue, мы становимся привязаны к конкретной реализации UsersModel. Тем самым нарушаем принцип о независимости реализаций модели, представления и презентора. Вместо этого можно было передавать значения имени и имейла в model.addUse(..), а дальше модель сама решает каким образом она будем обрабатывать и хранить полученные данные.

zuzka
Сообщения: 3
Зарегистрирован: 14 июн 2015, 03:52

Re: Android MVP пример для начинающих. Без библиотек и интер

Сообщение zuzka » 18 июн 2018, 00:30

Отличный урок, но есть вопрос:

к примемр: метод add в mvp - UserPresenter, в asynctask имеется вызов sleep, и далее идет вызов callback.onComplete где попытка обратиться к view. Если в момент паузы активность закроется и обнулит себя в презентере, проверка view отсутствует потому что из asynctask в onPostExecute при проверке callback срубит дальнейший вызов?

Ответить