3種Android App架構"Standard Android", MVP和MVVM的示例:Archi

jopen 9年前發布 | 20K 次閱讀 Archi Android開發 移動開發

這個項目展示和比較各種構建Android apps 架構模式之間的不同。同一個示例使用以下三種不同方式構建:

  • Standard Android: traditional approach with layouts, Activities/Fragments and Model.
  • MVP: Model View Presenter.
  • MVVM: Model View ViewModel with data binding.

The App

The sample app displays a list of GitHub public repositories for a given username. Tapping on one of them will open a repository details screen, where more information about the repo can be found. This screen also shows information about the owner of the repository.

Screenshots

Libraries used

  • AppCompat, CardView and RecyclerView
  • Data Binding (only MVVM)
  • RxJava & RxAndroid
  • Retrofit 2
  • Picasso
  • Mockito
  • Robolectric

Standard Android

The/appdirectoy contains the implementation that follows the traditional standard Android approach. This is a couple of layout files, two Activities and the model. The model is exactly the same for the three implementations and it contains:Repository,Userand a retrofit service (GithubService).

With this approach, Activities are in charge of calling theGithubService, processing the data and updating the views. They act kind of like a controller in MVC but with some extra responsabilities that should be part of the view. The problem with this standard architecture is that Activities and Fragments can become quite large and very difficult to tests. Hence why I didn't write any unit test for this case.

MVP - Model View Presenter

In/app-mvpyou will find the sample app implemented following this pattern. When using mvp, Activities and Fragments become part of the view layer and they delegate most of the work to presenters. Each Activity has a matching presenter that handles accessing the model via theGithubService. They also notify the Activities when the data is ready to display. Unit testing presenters becomes very easy by mocking the view layer (Activities).

MVVM - Model View ViewModel

This pattern has recently started to gain popularity due to the release of the data binding library. You will find the implementation in/app-mvvm. In this case, ViewModels retrieve data from the model when requested from the view via data binding. With this pattern, Activities and Fragments become very lightweight. Moreover, writting unit tests becomes easier because the ViewModels are decoupled form the view.

項目主頁:http://www.baiduhome.net/lib/view/home/1443190063044

 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!