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

基础活动

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);

}


基本视图

public interface IBaseView {

    BaseActivity getCurrentContext();

    BasePresenter getPresenter();
}


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

最佳答案

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


您可以从Mosby的MvpActivity作为基础类,并添加您的员工,例如initView()initLibraries()等。然后BaseActivity<P extends BasePresenter<? extends BaseView>> extends MvpActivity<P> implements BaseView。因此,您只需在MyFooActivity extends BaseActivity<FooPresenter>中加入Butterknife,它就可以正常工作。但是,您可能必须为Fragment复制类似Butterknife.bind()`的代码,因为Activity和Fragments显然没有相同的超类。我将在上面向您展示如何解决该问题。
采取其他方法:将Mosby的功能集成到您的BaseActivity中。 Mosby的构建原则是“偏向于继承而不是继承”。那么,这实际上意味着什么呢? Mosby提供了一个BaseActivity。顾名思义,此委托完成了实例化Presenter等的所有工作。但是,不是从ActivityMvpDelegate继承,而是使用此委托并调用相应的委托方法。实际上,如果您查看source code,Mosby的MvpActivity正是在这样做。因此,无需从Mosby的MvpActivity进行扩展,只需在MvpActivity中使用MvpActivityDelegate


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

因此,您可以应用相同的原理:可以将共享代码放入委托中,并从活动和片段中调用委托。
问题是:是否值得,即Butterknife.bind()只是一个电话。您还必须打一个电话Butterknife.bind() ...
但是,如果您必须在活动和片段之间重用“关键代码”,那么就喜欢像Mosby这样的合成。

如果您知道只使用yourDelegate.doSomething(),那么从Mosby的MvpActivity进行扩展也将是一个不错的选择,如1.解决方案中所述。

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

10-09 13:17