第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定

Philm項(xiàng)目源碼分解析(3): Presenter與Model的設(shè)計(jì)

標(biāo)簽:
Android

0. 前言

本文是Philm源码分析系列的第三篇,重点分析Philm MVP结构中Presenter与Model的设计。本文选取了Philm中核心的部分Movie作为示例。

1.Philm中的Model

Philm中的Model通过State来管理,具体到Movie中,MovieController中包含一个对于MoviesState的引用。而State的实现在ApplicationState中,与第二篇提到的AndroidDisplay类似,ApplicationState是一个包含了所有Model总和的类。

1
2
3
public final class ApplicationState implements BaseState, MoviesState, UserState {
...
}


2.Presenter与Model的设计

2.1 View -> Presenter -> Model

我们从一次搜索的过程来介绍各个部分的通信。SearchFragment中,mSearchView设置了一个对于搜索文本的监听器,当进行搜索时需要调用Presenter注册的回调MovieController.MovieUiCallbacks的search方法(注册回调在SearchFragment的父类BasePhilmMovieFragment中)。至此,View接受用户输入的流程结束。

在SearchFragment的父类BasePhilmMovieFragment中调用attachUi挂载到MovieController并在MovieController中被设置了MovieController.MovieUiCallbacks回调。

响应点击事件业务逻辑的MovieController.MovieUiCallbacks的search方法在MovieController(也就是Presenter)中实现。search通过ui.getMovieQueryType()拿到具体搜索的类型,之后通过fetchMovieSearchResults进行搜索。搜索最后通过FetchTmdbSearchMoviesRunnable类实现,在获取到搜索结果后,通过mMoviesState.setSearchResult(searchResult)更新Model。

2.2 Model -> Presenter -> View

Model的数据被更新后,需要通过Presenter(MovieController)来更新View(Model与View不能直接通信)。Philm通知Presenter的方式是通过时间总线来实现的。这里使用的是Square的otto。可以看到setSearchResult中,除了将mSearchResult更新为获取的数据外,还向事件总线发送了一个SearchResultChangedEvent事件。

1
2
3
4
5
6
7
8
9
public final class ApplicationState implements BaseState, MoviesState, UserState {
   ...
   @Override
   public void setSearchResult(SearchResult result) {
       mSearchResult = result;
       mEventBus.post(new SearchResultChangedEvent());
   }
   ...
}

在MovieController中,通过@Subscribe以及一个有唯一SearchResultChangedEvent的方法来接收SearchResultChangedEvent事件,最后通过populateUisFromQueryTypes更新UI。

[代码]java代码:

?

1
2
3
4
5
6
7
8
9
public class MovieController extends BaseUiController<moviecontroller.movieui, moviecontroller.movieuicallbacks=""> {
    ...
    @Subscribe
    public void onSearchResultChanged(MoviesState.SearchResultChangedEvent event) {
        populateUisFromQueryTypes(MovieQueryType.SEARCH, MovieQueryType.SEARCH_MOVIES,
                MovieQueryType.SEARCH_PEOPLE);
    }
    ...
}</moviecontroller.movieui,>



3.最后

本文是Philm MVP模式分析系列的最后一篇。Philm中除了MVP模式,还有很多值得分析的地方,比如对依赖注入的使用等等,之后如果有时间会针对Philm的其他部分进行更为细致的研究。

原文链接:http://www.apkbus.com/blog-705730-60835.html

點(diǎn)擊查看更多內(nèi)容
TA 點(diǎn)贊

若覺(jué)得本文不錯(cuò),就分享一下吧!

評(píng)論

作者其他優(yōu)質(zhì)文章

正在加載中
  • 推薦
  • 評(píng)論
  • 收藏
  • 共同學(xué)習(xí),寫(xiě)下你的評(píng)論
感謝您的支持,我會(huì)繼續(xù)努力的~
掃碼打賞,你說(shuō)多少就多少
贊賞金額會(huì)直接到老師賬戶(hù)
支付方式
打開(kāi)微信掃一掃,即可進(jìn)行掃碼打賞哦
今天注冊(cè)有機(jī)會(huì)得

100積分直接送

付費(fèi)專(zhuān)欄免費(fèi)學(xué)

大額優(yōu)惠券免費(fèi)領(lǐng)

立即參與 放棄機(jī)會(huì)
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢(xún)優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)

舉報(bào)

0/150
提交
取消