V Čisté architektury MVVM, kde transformovat objekty do adaptéru?

0

Otázka

Takže, řekněme, že mám adaptér s násobky typy zobrazení, a to, co jsem obdržel ze serveru api je jen seznam a musím transformovat v mém adaptér objektů.

Příklad: Mám seznam osob, které mají typ souborům, pojďme si, že 1 a 2, a chci ukázat v mé recyclerview na záhlaví mezi různými typy.

Takže, mám fragment - view model - use case - úložiště (požadavek na api)

Můj adaptér očekávat lista osob. Řekněme, že Člověk je rozhraní, a člověka1 a person2, implementuje.

Finále, jsem obdržel od serveru seznam s objekty PersonApi, které mají typ jako parametr a musím převést na můj adaptér objektů.

Kde bych to měl udělat transformaci? Úložiště? Případ použití? Zobrazení modelu?

Můj odhad je, že by měl být na případ použití.

Edit: Přidán graf enter image description here

android clean-architecture mvvm
2021-11-19 21:39:10
5

Nejlepší odpověď

1

Začněme s tím, že plné provádění čistá architektura má mnoho vrstev, model, mapování, ..., která dělá to těžko realizovat. Takže, můžeme využít zjednodušené verze, stejně jako jste se zmínil ve své otázce ve třech vrstvách; Data, Domain a Presentation.

Je hezké mít specifické datové modely pro každou vrstvu, ale to je také ok sdílet Domain modely s Presentation stejně. To znamená, že vám stačí jeden krok, mapování dat, které se děje mezi Data a Domain hned na přilehlost bod. Od úložiště je most mezi Data a Domainto je to správné místo na mapě modely.

Definice repozitáře by měly být součástí Domaina provádění uvnitř Data. Tímto způsobem Data vrstva poskytuje přesně to, co Domain vrstva očekává. Mějte na paměti, že Domain NESMÍ nic vědět Data vrstva a její provádění. Takže, pokud jste provádění vrstev v různých gradle moduly, měli byste mít závislost Domain uvnitř Data modul, a ne naopak.

Zjednodušená implementace třídy může být jako následující:

Domény:

interface Person

class Person1() : Person

class Person2() : Person

interface PersonRepository {
    fun getPersons(): List<Person>
}

class GetPersonsUseCase(val repository: PersonRepository) {
    fun execute(): List<Person> {
        return repository.getPersons()
    }
}

Data:

class PersonRepositoryImpl(val service: PersonService): PersonRepository {
    fun getPersons(): List<Person> {
        val list: List<PersonEntity> = service.getPersons()
        return list.map { it.toPerson() }
    }
}

PersonEntity.toPerson(): Person {
    return ... // create an instance of Person1 or Person2 based on requirements.
}
2021-11-25 20:17:54

Jen se ptám, proč definice repozitáře by měla být na doméně? To znamená, že definice případů užití(domain) by měl být na prezentaci?
user1851366

Vlastně, cílem clean-arch je izolovat domény (business logic) z jiných vrstev. Takže, to je doména sám, který definuje, jak komunikovat s daty nebo prezentace. V případě dat, definuje úložiště abstrakce, a v případě prezentace, může definovat interactors. Takže, všechno vztahující se k doméně zůstává uvnitř domény a ne v jiných vrstvách. Můžete najít jeden z nejlepších postupů zde: github.com/android10/Android-CleanArchitecture-Kotlin
aminography
0

Dle základního pravidla pro Čisté architektury, že každá vrstva je zcela nezávislý z jiné vrstvy. tak tady máte psát obchodní logiky buď v Modelu třídy nebo si Prohlédnout model třídy založené na scénáři, zveřejní tuto jedinečnou hodnotu atributu view(adaptér). Níže naleznete vysokou úroveň architektury diagram:

enter image description here

2021-11-25 15:09:35

Takže říkáte, že musím transformovat na případ použití nebo zobrazení modelu?
user1851366
0

Můžete si mapper třídy transformovat data ve vašem případu užití a vrátit objekt domény do vašeho pohledu další informace a ukázkový kód

2021-11-19 23:40:35

Díky za odpověď a to je to, co budu dělat. Ale moje otázka je, kde na mapě, že? Domény? Zobrazení modelu? Jak?
user1851366

V doméně vrstva musíte udělat, (Síť -> Úložiště -> Domain) a domény můžete vidět síť a úložiště souborů a zobrazení/zobrazení modelu můžete vidět jen domény vrstva soubory
Mahdi Zareei
0

To v Use Case vrstva, všechno případě ViewModel neměl změnit všechna data z API, jen to poslat view.

2021-11-21 12:32:36
0

V úložišti můžete změnit odpověď na vaši Doménu Subjekt, uvnitř ViewModel změnit Doménu jednotka pro Zobrazení Subjektu, kde Doména je místo, kde vaše chování je řízen například můžete načíst data z API a pak přítomny ve view vrstvě a chcete přidat některé atributy pro zobrazení map domény pro prohlížení a pak, pokud chcete ukládat věci v databázi, kterou mapě z hlediska domény a domény do Databáze Subjekt

2021-11-21 12:27:18

V jiných jazycích

Tato stránka je v jiných jazycích

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................