gpt4 book ai didi

android - 我应该在 Mosby MvP 概念中创建 BaseActivity/Presenter 和 View 吗?

转载 作者:行者123 更新时间:2023-11-29 00:04:26 26 4
gpt4 key购买 nike

我正在尝试理解 MvP 设计模式的概念。我的意思是,我明白了,这很容易。主要问题是最佳实现。我试图制作自己的 BaseActivity、BasePresenter 和 BaseView,只是为了从我的所有 Activity 中提取关节的一部分,我是这样做的:

基础 Activity

public abstract class BaseActivity<T extends BasePresenter<? extends IBaseView>> extends FragmentActivity implements IBaseView {

protected T presenter;
private ActivityConfig activityConfig;

@Override
final protected void onCreate(Bundle savedInstanceState) {
activityConfig = getConfig();

super.onCreate(savedInstanceState);

presenter = createPresenter();

setContentView();
initLibraries();

prepareView(savedInstanceState);
addFragments();
}

protected abstract ActivityConfig getConfig();

protected abstract T createPresenter();

protected abstract void prepareView(Bundle savedInstanceState);

protected abstract void addFragments();

private void setContentView(){
View root = View.inflate(this, activityConfig.layoutId, null);
setContentView(root);
}

private void initLibraries() {
ButterKnife.bind(this);
Timber.plant(new Timber.DebugTree());

}

@Override
public BaseActivity getCurrentContext() {
return this;
}

@Override
public T getPresenter() {
return presenter;
}
}

基础演示者

public abstract class BasePresenter<T extends IBaseView> {

public abstract void loadData(boolean refresh);

}

基础 View

public interface IBaseView {

BaseActivity getCurrentContext();

BasePresenter getPresenter();
}

它工作正常,但我觉得这设计不好,所以我想改用 Mosby。问题是所有教程都没有涉及基类的方面,它们只是使用 Mosby 的基类作为基础(我想这不好吗?因为我必须复制我的代码(例如 Butterknife.bind())。所以可以你们给我一些设计良好的 Mosby MVP 快速入门类(class),或者给我一些提示,我应该如何划分我的项目?谢谢!

最佳答案

所以我看到了两种可能性:

  1. 您可以从 Mosby 的 MvpActivity 进行扩展作为您的基类并添加您的员工,例如 initView() , initLibraries()等等 这样BaseActivity<P extends BasePresenter<? extends BaseView>> extends MvpActivity<P> implements BaseView .那么MyFooActivity extends BaseActivity<FooPresenter> .所以你在 BaseActivity 中包含 Butterknife 一次它应该工作。但是,您可能必须为 Fragment 复制类似 Butterknife.bind()` 的代码,因为 Activity 和 Fragments 显然没有相同的父类(super class)。我将向您展示如何解决上面的问题。

  2. 反其道而行之:将 Mosby 的功能集成到您的 BaseActivity 中. Mosby 的构建原则是“优先组合优于继承”。那么这到底是什么意思呢? Mosby 提供 ActivityMvpDelegate .顾名思义,这个委托(delegate)完成了实例化 Presenter 等所有工作。但不是从 MvpActivity 继承。您使用此委托(delegate)并调用相应的委托(delegate)方法。实际上莫斯比的 MvpActivity如果你看一下 source code 就是这样做的.所以不是从 Mosby 的 MvpActivity 扩展你只需使用 MvpActivityDelegate在你的BaseActivity .

那么复制像Butterknife.bind()这样的代码呢?即在 Activity 和 fragment 中。好吧,Mosby 可以在 Activity 和 Fragment 之间共享他的代码,例如实例化 Presenter 等,因为两者都使用 mosby 委托(delegate)。

因此您可以应用相同的原则:您可以将共享代码放入委托(delegate)中并从 Activity 和 fragment 中调用委托(delegate)。问题是:是否值得,即 Butterknife.bind()只是一个电话。您还必须调用一个电话 yourDelegate.doSomething() ...但是,如果您必须在 Activity 和 Fragment 之间重用“关键代码”,那么像 Mosby 那样支持组合。

如果您知道您只使用 Activites然后从 Mosby 的 MvpActivity 扩展也是一个不错的选择,如 1. 解决方案中所述。

关于android - 我应该在 Mosby MvP 概念中创建 BaseActivity/Presenter 和 View 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34967154/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com