Android 在MVP模式中为回调函数创建单独的接口可以吗
我正在尝试使用Android 在MVP模式中为回调函数创建单独的接口可以吗,android,performance,android-layout,android-mvp,Android,Performance,Android Layout,Android Mvp,我正在尝试使用MVP设计模式创建一个应用程序。这是我第一次使用这个模式,这就是为什么我很少担心我是否正确地遵循了这个模式 这就是我到目前为止所做的。我没有使用匕首2 接口 public interface MainActivityMVP { interface Model{ void sendTokenToServer(MainActivityMVP.Presenter presenter); } interface View{ boo
MVP设计模式创建一个应用程序。这是我第一次使用这个模式,这就是为什么我很少担心我是否正确地遵循了这个模式
这就是我到目前为止所做的。我没有使用匕首2
接口
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构造函数
main活动
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上,我调用模型的
方法来执行操作,并将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
类的实例,该类从SharedReference
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模式的方法是好的,还是我好
这里遗漏了一些东西
- 如果我为回调或传递添加其他接口,可以吗
演示者到模型是更好的方法,正如我已经看到的一些示例
它们传递给模型的
interactior
引用的位置
- 是否有必要在MVP模式中创建
交互类
- 如果我创建一个单独的
存储库的接口
开发人员实现MVP的方式多种多样。很少有人使用交互器。在MVP中不强制使用交互器。我会在下面建议你,因为你正处于起步阶段
public interface MainView extends BaseView {
boolean isPnTokenRegistered();
void tokenUpdated();
void tokenFailedToUpdate();
}
那么让你的basepresenter像这样
public interface BasePresenter<V extends BaseView> {
void setView(V view);
void destroyView();
void destroy();
}
感谢@Raja提供的详细答案,BaseView
是一个标记接口吗?BaseView是一个通用接口,您可以在其中为Context get Context()声明您的函数;错误和重试功能。
public class MainPresenter implements BasePresenter<MainView>{
MainView view;
PreferencesHelper preferencesHelper;
MainPresenter(){
preferencesHelper= new PreferencesHelper();
}
@Override
public void setView(MainView view) {
this.view = view;
}
@Override
public void destroyView() {
this.view = null;
}
@Override
public void destroy() {
}
public void sendFCMTokenToServer() {
//Do whatever you want
}
}
public class MainActivity extends BaseActivity implements MainView {
MainPresenter mainPresenter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_base);
mainPresenter= new MainPresenter();
mainPresenter.attachView(this)
mainPresenter.sendFCMTokenToServer();
}