在 MVP 模式中为回调函数创建一个单独的接口是否可以
Is it fine to create a separate interface for call back function in MVP pattern
我正在尝试使用 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
引用传递给它。
主持人
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
class 的实例,它从 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模式的方法好吗,还是我
这里遗漏了一些东西。
如果我添加另一个接口用于回调或传递,是否可以?
Presenter to model 是更好的方法,正如我看到的一些例子
他们在其中传递 interactor
对模型的引用。
是否有必要在MVP模式中创造Interactor Class
可以吗,不反对MVP rule
如果我单独创建一个
存储库接口,
开发人员实施 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();
}
现在是您的 MainPresenter
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
}
}
终于让你的activity变成这样了,
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();
}
我正在尝试使用 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
引用传递给它。
主持人
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
class 的实例,它从 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模式的方法好吗,还是我 这里遗漏了一些东西。
如果我添加另一个接口用于回调或传递,是否可以? Presenter to model 是更好的方法,正如我看到的一些例子 他们在其中传递
interactor
对模型的引用。是否有必要在MVP模式中创造
Interactor Class
可以吗,不反对
MVP rule
如果我单独创建一个 存储库接口,
开发人员实施 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();
}
现在是您的 MainPresenter
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
}
}
终于让你的activity变成这样了,
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();
}