美文网首页
android model层架构

android model层架构

作者: yqyzxd | 来源:发表于2016-09-23 16:27 被阅读271次

    Favor composition over inheritance.

    #示例图

    图画的有点丑,见谅。简单说一下,Presenter就是Mvp中的P,View即MVP中的V需要什么功能都由Presenter提供,事实上Presenter也是借助Usecase来完成相应功能的,Presenter持有完成所有功能的Usecase(注:每一个Usecase完成一个功能,比如登录就是LoginUsecase,注册就是RegisterUsecase)。

              为什么一个Usecase只完成一个功能?

    1,单一职责原则。这个不多说。

    2,我倾向于使用组合去完成功能的复用,而不是继承。就像积木,需要哪个材料就选取哪个材料,精简、高效。因为最小功能单位的复用性才算最大的。

    事实上,不管View层需要什么功能,直接调用presenter.execute(BaseRequest request)方法即可。当然request是具体的请求对象,继承BaseRequest。也就是说一个request对应Usecase。我们可以在Presenter中维护一个UsecaseManager实现通过request得到对应的Usecase。

    Usecase是一个抽象类,上代码

    ```

    public abstract class Usecase<Q extends BaseRequest,R extends BaseResponse>{

    privateSubscriptionmSubscription= Subscriptions.empty();

    public void execute(Q request,Observer<R> subscriber){

    unsubscribe();

    mSubscription= buildUsecaseObservable(request)

    .subscribeOn(Schedulers.io())

    .observeOn(AndroidSchedulers.mainThread())

    .subscribe(subscriber);

    }

    protected abstractObservable<R> buildUsecaseObservable(Q request);

    public voidunsubscribe(){

    if(!mSubscription.isUnsubscribed()){

    mSubscription.unsubscribe();

    }

    }

    }

    ```

    所以实现一个Usecase的步骤是继承Usecase,覆写buildUsecaseObservable方法,通常Usecase需要一个Repository来完成相应的操作,就在构造函数中通过Dagger2注入进来。若是明确只需要通过网络发起请求,可以直接注入一个Api,然后再Api中完成相应操作。

    本片可能写的很没有逻辑,但是中心思想是使用组合而非继承,希望对你有所启发。

    相关文章

      网友评论

          本文标题:android model层架构

          本文链接:https://www.haomeiwen.com/subject/lmvtyttx.html