Я пытаюсь создать приложение, используя MVP design pattern
. Это первый раз, когда я использую этот шаблон, поэтому меня мало волнует, правильно ли я следую шаблону или нет.
Это то, что я сделал до сих пор. Я не использую Dagger2
.
Интерфейс
public interface MainActivityMVP {
interface Model{
void sendTokenToServer(MainActivityMVP.Presenter presenter);
}
interface View{
boolean isPnTokenRegistered();
void tokenUpdated();
void tokenFailedToUpdate();
}
interface Presenter{
void tokenUpdatedSuccessfully();
void tokenAlreadyExists();
void detachView();
}
На MainActivity
я создал экземпляр Presenter
и Model
и передал объект Model
на Presenter Constructor
MainActivity
public class MainActivity extends BaseActivity implements MainActivityMVP.View {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_base);
mainPresenter= new MainPresenter(this, new MainModel());
mainPresenter.sendFCMTokenToServer();
}
В Presenter я вызываю Model's
метод для выполнения операции и передаю presenter
ссылку на него.
Presenter
public class MainPresenter implements MainActivityMVP.Presenter{
MainActivityMVP.View view;
MainActivityMVP.Model model;
public MainPresenter(MainActivityMVP.View view, MainActivityMVP.Model model){
this.view= view;
this.model= model;
}
public void sendFCMTokenToServer() {
model.sendTokenToServer(this);
}
@Override
public void tokenUpdatedSuccessfully() {
view.tokenUpdated();
}
@Override
public void tokenAlreadyExists() {
view.tokenFailedToUpdate();
}
В модели я создаю экземпляр класса PreferenceManager
, который получает данные из SharedPreference
public class MainModel implements MainActivityMVP.Model {
PreferencesHelper preferencesHelper;
public MainModel(){
preferencesHelper= new PreferencesHelper();
}
@Override
public void sendTokenToServer(MainActivityMVP.Presenter presenter) {
if (preferencesHelper.getNotificationSettings().isEmpty()) {
//do stuff
presenter.tokenUpdatedSuccessfully();
}
}
Теперь у меня есть эти вопросы.
Является ли вышеуказанный подход к реализации шаблона MVP в порядке, или я
здесь чего-то не хватает.
Это нормально, если я добавлю другой интерфейс для обратных вызовов или передачи
Лучше подходить к моделирующему, так как я видел пример
где они проходят interactor
ссылка на модель.
Нужно ли создавать Interactor Class
в шаблоне MVP
Это нормально, а не против MVP rule
, если я создаю отдельный
интерфейс для репозитория,