当前位置: 首页 > 软件库 > 手机/移动开发 > >

MVVM-Kotlin-Android-Architecture

授权协议 Apache-2.0 License
开发语言 Java
所属分类 手机/移动开发
软件类型 开源软件
地区 不详
投 递 者 龚奇逸
操作系统 跨平台
开源组织
适用人群 未知
 软件概览

Model-View-ViewModel (ie MVVM)

MVVM3

Model-View-ViewModel (ie MVVM) is a template of a client application architecture, proposed by John Gossman as an alternative to MVC and MVP patterns when using Data Binding technology. Its concept is to separate data presentation logic from business logic by moving it into particular class for a clear distinction.You can also check MVP

Why Promoting MVVM VS MVP:

  • ViewModel has Built in LifeCycleOwerness, on the other hand Presenter not, and you have to take this responsiblty in your side.
  • ViewModel doesn't have a reference for View, on the other hand Presenter still hold a reference for view, even if you made it as weakreference.
  • ViewModel survive configuration changes, while it is your own responsiblities to survive the configuration changes in case of Presenter. (Saving and restoring the UI state)

MVVM Best Pratice:

  • Avoid references to Views in ViewModels.
  • Instead of pushing data to the UI, let the UI observe changes to it.
  • Distribute responsibilities, add a domain layer if needed.
  • Add a data repository as the single-point entry to your data.
  • Expose information about the state of your data using a wrapper or another LiveData.
  • Consider edge cases, leaks and how long-running operations can affect the instances in your architecture.
  • Don’t put logic in the ViewModel that is critical to saving clean state or related to data. Any call you make from a ViewModel can be the last one.

What is Coroutines ?

Coroutines :Is light wight threads for asynchronous programming, Coroutines not only open the doors toasynchronous programming, but also provide a wealth of other possibilities such as concurrency, actors, etc.


Coroutines VS RXJava

They're different tools with different strengths. Like a tank and a cannon, they have a lot of overlap but are more or less desirable under different circumstances.- Coroutines Is light wight threads for asynchronous programming.- RX-Kotlin/RX-Java is functional reactive programming, its core pattern relay onobserver design pattern, so you can use it to handle user interaction with UI while youstill using coroutines as main core for background work.

How does Coroutines concept work ?

  • Kotlin coroutine is a way of doing things asynchronously in a sequential manner. Creating a coroutine is a lot cheaper vs creating a thread.

When I can choose Coroutines or RX-Kotlin to do some behaviour ?

  • Coroutines : When we have concurrent tasks , like you would fetch data from Remote connections, database , any background processes , sure you can use RX in such cases too, but it looks likeyou use a tank to kill ant.
  • RX-Kotlin : When you would to handle stream of UI actions like : user scrolling , clicks ,update UI upon some events .....ect .

What is the Coroutines benefits?

  • Writing an asynchronous code is sequential manner.
  • Costing of create coroutines are much cheaper to crate threads.
  • Don't be over engineered to use observable pattern, when no need to use it.
  • parent coroutine can automatically manage the life cycle of its child coroutines for you.

Handle Retrofit with Coroutines

8399

  • Add Coroutines to your gradle file
// Add Coroutines
implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-android:1.3.2'
implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-core:1.3.2'
implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-core-common:1.3.2'
// Add Retrofit2
implementation 'com.squareup.retrofit2:retrofit:2.6.2'
implementation 'com.squareup.retrofit2:converter-gson:2.6.2'
implementation 'com.squareup.okhttp3:okhttp:4.2.2'
  • Make Retrofit Calls.
@GET("topstories/v2/home.json")
    suspend fun fetchNews(): Response<NewsModel>
  • With async we create new coroutine and returns its future result as an implementation of [Deferred].
  • The coroutine builder called launch allow us to start a coroutine in background and keep working in the meantime.
  • so async will run in background then return its promised result to parent coroutine whichcreated by launch.
  • when we get a result, it is up to us to do handle the result.
newsMutableLiveData.postValue(Resource.Loading())
        launch {
            try {
                serviceResponse = dataRepository.requestNews()
                newsMutableLiveData.postValue(serviceResponse)
            } catch (e: Exception) {
                newsMutableLiveData.postValue(Resource.DataError(NETWORK_ERROR))
            }
        }

Keep your code clean according to MVVM

  • Yes , liveData is easy , powerful , but you should know how to use.
  • For livedate which will emit data stream , it has to be in yourdata layer , and don't inform those observables any thing else likein which thread those will consume , cause it is another
  • For livedata which will emit UI binding events, it has to be in your ViewModel Layer.
  • Observers in UI Consume and react to live data values and bind it.responsibility , and according to Single responsibility principlein SOLID (object-oriented design) , so don't break this concept bymixing the responsibilities .

mvvm2

LICENSE

Copyright [2016] [Ahmed Eltaher]Licensed under the Apache License, Version 2.0 (the "License");you may not use this file except in compliance with the License.You may obtain a copy of the License at

http://www.apache.org/licenses/LICENSE-2.0Unless required by applicable law or agreed to in writing, softwaredistributed under the License is distributed on an "AS IS" BASIS,WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.See the License for the specific language governing permissions andlimitations under the License.

 相关资料
  • Android MVVM Architecture: Sample App UPDATE: Check this for updated project This repository contains a detailed sample app that implements MVVM architecture using Dagger2, Room, RxJava, FastAndroidNe

  • FlyTour是Android MVVM+MVP+Dagger2+Retrofit+RxJava+组件化+插件组成的双编码架构+双工程架构+双语言Android应用开发框架,通过不断的升级迭代该框架已经有了十个不同的版本,5.0之前工程架构采用gradle配置实现组件化,5.0之后的工程架构采用VirtualAPK实现了插件化,5.0之前采用Java编码实现,5.0之后采用Kotlin编码实现,编

  • 我在我的应用程序中使用Android Arch组件和MVVM架构。 模型层和存储库类决定并提供数据给viewmodel,然后再提供给view层。 如果activity要使用的数据既不是来自网络,也不是来自数据库,而是来自之前的activity的意图呢?在这种情况下你遵循什么模式?

  • 嗨,当我尝试在下面的类中注入Doa接口时,我正在使用mvvm和dagger2 我的接口类

  • This repository holds 2 projects: Sample Giphy App is a test Project that displays paginated trending GIFs from Giphy and also contains search functionality. This small project is a good starting poin

  • Model-View-ViewModel (MVVM)是用于开发软件应用程序的架构设计模式。 MVVM由Microsoft Architect John Gossman于2005年开发。该模式源自模型 - 视图 - 控制器(MVC)模式。 MVVM的优势在于它将应用程序层的图形用户界面与业务逻辑分开。 MVVM负责处理来自底层模型的数据,以便非常容易地表示和管理它。 MVVM中的ViewModel