AMcoder - javascript, python, java, html, php, sql

ViewModel մի քանի LiveData-ով և UseCase-ներով

Այժմ ես փորձարկում եմ Fragment-ի համար դիտման մոդել պատրաստելու ուղղությամբ: Իմ մոտեցումն է մեկ հատվածի համար օգտագործել ճիշտ մեկ դիտման մոդել: Ես ունեմ մի քանի օգտագործման դեպքեր տարբեր սցենարների համար, օրինակ. գրքեր բերելու, գրքի մասին տեղեկություններ ստանալու համար։ Այս բոլոր օգտագործման դեպքերը տեղի են ունենում մեկ հատվածում: Հիմա ես պատրաստեցի ViewModel՝ միմյանցից անկախ 3 UseCase-ով և 3 համապատասխան LiveDatas-ով։

Հետաքրքիր է, արդյոք դա լավ պրակտիկա է: Կա՞ն առաջարկներ:

class GetBooksViewModel
@Inject constructor(private val getBooksUseCase: GetBooksUseCase,
private val getBooksListsUseCase: GetBooksListsUseCase,
private val getInfoByBookUseCase: GetInfoByBookUseCase) :
    BaseViewModel() {

var books: MutableLiveData<java.util.LinkedHashMap<String, Book?>> = MutableLiveData()
var bookLists: MutableLiveData<List<BookList>> = MutableLiveData()
var infos: MutableLiveData<List<BookInfo>> = MutableLiveData()

//methods for fetching data will be below

fun getBooks() =
getChannelsUseCase() {
  it.either(::handleFailure, ::handleGetBooksUseCase)
}

private fun handleGetBooksUseCase(response: 
 java.util.LinkedHashMap<String, Channel?>) {
this.books.value = response
}  

Fragment-ի ներսում

getBooksViewModel = viewModel(viewModelFactory) {
  observe(books, ::getBooks)
  observe(booksLists, ::getBooksLists)
  observe(bookInfos, ::doSomethingWithInfos)
  failure(failure, ::handleFailure)
}

  • Անձամբ ես կարծում եմ (և սա պարզապես կարծիք է, բայց) UseCase անունը api fetch առաջադրանքների համար բավականին ցավալի է: Այո, ես գիտեմ, որ դա գալիս է Android Clean Architecture փաստաթղթից. 2014, բայց մյուս կողմից, եթե դուք մտածում եք UML UseCase դիագրամի մասին, ապա տվյալների բեռնումը օգտատիրոջ փոխազդեցություն չէ, ոչ մի հատկություն, այն պարզապես իրականացման մանրամասնություն է: Ես նախընտրում եմ դրանք անվանել RemoteTask: Երբ իմանաք, որ դա պարզապես առաջադրանք է և ոչ թե այն, ինչ հետաքրքրում է օգտատերին, ապա կարող եք պարզել, թե ինչ անել դրա հետ և երբ այն պետք է գործարկվի: 12.03.2019

Պատասխանները:


1

Համակցված մոդելը կարող է օգտագործվել երեք տարբեր models-ի և liveData-ի փոխարեն, այսպես.

class CombinedModel( var map : MutableLiveData<java.util.LinkedHashMap<String, Book?>, var books : MutableList<BookList>, var infos = MutableList<BookInfo> )

Եվ կենդանի տվյալները կարող են լինել հետևյալը.

var response: MutableLiveData<CombinedModel>

Ուստի միայն մեկ Observer տրամաբանություն կարող է հոգալ գործունեության բոլոր երեք տվյալները

12.03.2019
Նոր նյութեր

Օգտագործելով Fetch Vs Axios.Js-ը՝ HTTP հարցումներ կատարելու համար
JavaScript-ը կարող է ցանցային հարցումներ ուղարկել սերվեր և բեռնել նոր տեղեկատվություն, երբ դա անհրաժեշտ լինի: Օրինակ, մենք կարող ենք օգտագործել ցանցային հարցումը պատվեր ներկայացնելու,..

Տիրապետել հանգստության արվեստին. մշակողի ուղեցույց՝ ճնշման տակ ծաղկելու համար
Տիրապետել հանգստության արվեստին. մշակողի ուղեցույց՝ ճնշման տակ ծաղկելու համար Ինչպե՞ս հանգստացնել ձեր միտքը և աշխատեցնել ձեր պրոցեսորը: Ինչպես մնալ հանգիստ և զարգանալ ճնշման տակ...

Մեքենայի ուսուցում բանկային և ֆինանսների ոլորտում
Բարդ, խելացի անվտանգության համակարգերը և հաճախորդների սպասարկման պարզեցված ծառայությունները բիզնեսի հաջողության բանալին են: Ֆինանսական հաստատությունները, մասնավորապես, պետք է առաջ մնան կորի..

Ես AI-ին հարցրի կյանքի իմաստը, այն ինչ ասում էր, ցնցող էր:
Այն պահից ի վեր, երբ ես իմացա Արհեստական ​​ինտելեկտի մասին, ես հիացած էի այն բանով, թե ինչպես է այն կարողանում հասկանալ մարդկային նորմալ տեքստը, և այն կարող է առաջացնել իր սեփական արձագանքը դրա..

Ինչպես սովորել կոդավորումը Python-ում վագրի պես:
Սովորելու համար ծրագրավորման նոր լեզու ընտրելը բարդ է: Անկախ նրանից, թե դուք սկսնակ եք, թե առաջադեմ, դա օգնում է իմանալ, թե ինչ թեմաներ պետք է սովորել: Ծրագրավորման լեզվի հիմունքները, դրա..

C++-ի օրական բիթ(ե) | Ամենաերկար պալինդրոմային ենթաշարը
C++ #198-ի ամենօրյա բիթ(ե), Ընդհանուր հարցազրույցի խնդիր. Ամենաերկար պալինդրոմային ենթատող: Այսօր մենք կանդրադառնանք հարցազրույցի ընդհանուր խնդրին. Ամենաերկար palindromic substring...

Kydavra ICAReducer՝ ձեր տվյալների ծավալայինությունը նվազեցնելու համար
Ի՞նչ է ICAReducer-ը: ICAReducer-ն աշխատում է հետևյալ կերպ. այն նվազեցնում է նրանց միջև բարձր փոխկապակցված հատկանիշները մինչև մեկ սյունակ: Բավականին նման է PCAreducer-ին, չնայած այն..