如何簡(jiǎn)單,快速地搭建MVP架構(gòu)(實(shí)戰(zhàn))

前言

MVP模式,最早是由Taligent的Mike Pote 提出的,MVP的提出主要是為了解決MVC模式中結(jié)構(gòu)過于復(fù)雜和模型-視圖耦合性過高的問題。View和Model完全解除耦合。


一、MVP結(jié)構(gòu)

參照Google官方的DEMO,制定了以下的方案。我們最終的目的是將復(fù)雜的業(yè)務(wù)邏輯處理與數(shù)據(jù)處理剝離視圖層,視圖層只作為展示。

二、分析各個(gè)層的作用

以下是項(xiàng)目中實(shí)際的代碼分層,每個(gè)公司的架構(gòu)分層可能都不一樣,但是原則都是一樣的,盡量清晰和相互之間的解耦,提高可讀性與可維護(hù)性,讓我們快速編完代碼回家陪老婆孩子。??

  • adapter:放置列表的適配器(根據(jù)實(shí)際開發(fā)情況而定,可以不需要此層
  • base:Activity、view、presenter等封裝的基類。
  • bean: 數(shù)據(jù)模型。
  • contract: 管理view接口和presenter接口。
  • model: 進(jìn)行網(wǎng)絡(luò)數(shù)據(jù)與本地?cái)?shù)據(jù)處理。
  • presenter: 存放presenter。
  • view: 存放activity,fragment。

三、核心代碼講解

請(qǐng)大家前往我的Github下載源碼,記得幫忙點(diǎn)顆星。網(wǎng)上有很多版本,作者也是借鑒Google的例子進(jìn)行了簡(jiǎn)單實(shí)用的封裝,幫助大家快速應(yīng)用到實(shí)際項(xiàng)目中去。
  • Presenter層封裝

代碼很簡(jiǎn)單主要是思路,將View層(Activity)與Presenter層綁定的公共代碼抽取到基類,目前采用的是弱引用,更好的方式應(yīng)該是Presenter的生命周期長(zhǎng)于Activity,后續(xù)我會(huì)繼續(xù)優(yōu)化。

 public class BasePresenter<T> {

    private WeakReference<T> mWeakReference;

    protected WeakReference<T> mTWeakReference;

    public void attachView(T view){
        mTWeakReference=new WeakReference<T>(view);
    }

    public void detachView(){
        if(mTWeakReference!=null){
            mTWeakReference.clear();
        }
    }

    protected T getView(){
        return mTWeakReference.get();
    }

}
  • Activity抽取

代碼依然很簡(jiǎn)單,將activity公共部分抽取出來進(jìn)行封裝。將創(chuàng)建Presenter步驟交給子類實(shí)現(xiàn),分別在Activity創(chuàng)建的時(shí)候去綁定View,在Activity

public abstract class BaseActivity<V,T extends BasePresenter<V>> extends AppCompatActivity {


    protected abstract int setLayoutId();

    protected abstract T createPresenter();

    public T presenter;

    protected  abstract void start();


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(setLayoutId());
        presenter = createPresenter();
        presenter.attachView((V)this);
        start();

    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        presenter.detachView();
    }
}

四、一起交流學(xué)習(xí)

大家有問題,可以加我的微信和QQ:379323664。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容