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 Domain
to je to správné místo na mapě modely.
Definice repozitáře by měly být součástí Domain
a 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.
}