Привет всем!)
Нужна помощь в понимании/объяснении MVP проектирования.
Я уже второй день воюю с этой штукой и никак не могу дойти до сути! Прочитал статьи:
эту,
эту,
эту и даже
эту, но там всё как-то довольно сложные примеры. Т.е. пишу не от того, что лень гуглить что-то, просто хочу понять)
Вопрос в следующем:
У меня есть уже реализованный ранее фрагмент приложения, которое надо переделать согласно MVP. Всего есть два активити: LoginActivity(скрин ниже), MainActivity.
Логика взаимодействия следующая:
1. На экране Login есть TextView и кнопка Sign In (Gmail API).
2. По нажатию на кнопку Sign In выполняется подключение к Google, потом выпадает окошко с выбором gmail аккаунтов, а после выполняется переход на MainActivity.
3. При создании MainActivity в название Toolbar записывается email, полученный после отправки запроса и пересланный с LoginActivity на MainActivity при помощи putExtra к интенту запуска MainActivity;
Всё, дальше там на MainActivity выводится список и обращение к локальной базе данных, там проблем нет, вроде.
Но
как правильно спроектировать интерфейсы для LoginActivity?
Как я делал:
Я планировал для каждого из активити делать отдельные Model, View, Presenter. Т.е. ModelLogin, ModelMain, ViewLogin, ViewMain и т.д. Но вышло, честно, фигня ещё на стадии создание MVP для Login.
Я просто не смог придумать, что должно быть реализовано в интерфейсах IViewLogin и IModelLogin, в то время, как IPresenterLogin был полон почти всей реализацией...
Кодpublic interface IPresenterLogin {
//соединение к google
void connectionGoogle(FragmentActivity fragment, Context context,
OnConnectionFailedListener error);
//задаёт размер и цвет кнопке
void setBtmLogin(SignInButton signInButton);
//авторизация через акк
Intent signIn();
//тут передаём результат авторизации и метод возвращает Intent,
//который потом внутри активити LoginView вызывается через startActivity(presenter.startActivityFromResult)
Intent startActivityFromResult(Context context, GoogleSignInResult result);
//просто вывод всплывающего сообщения
void getToast(Context context, String msg);
}
Скрин LoginActivity, это так, грубый шаблон))