Как структурировать класс DTO в проекте с чистой архитектурой с помощью parcelize? - PullRequest
0 голосов
/ 03 марта 2020

Я работаю над приложением Android в Kotlin и пытаюсь реализовать чистую архитектуру с моделями представления, репозиториями, источниками данных, интерфейсами и т. Д. c.

Сейчас у меня есть класс DTO который я анализирую с помощью Retrofit:

@Parcelize
data class NewsArticleDto(
    val author: String, val title: String, val description: String,
    val url: String, val urlToImage: String, val publishedAt: String, val content: String
) : Parcelable

Я хотел бы, чтобы интерактор с именем "GetNews" получал данные из NewsRepository, который, в свою очередь, получает их из источника данных (retrofit), сопоставляет их с сущностями NewsArticle и отправьте список NewsArticles обратно в viewmodel.

Уровень данных находится внутри другого модуля («ядро»), который является java библиотекой. Хранилище / интеракторы не знают о классе DTO, поскольку он находится в модуле «app».

Модуль ядра не должен знать о модуле «app». У него также не должно быть SDK-логики c, насколько я понимаю.

Таким образом, проблема в том, что интерактор не знает о классе DTO, и если я вообще переместу его в "ядро" "module, Android Studio не может обработать @parcelize и parcelable.

Как мне структурировать свой проект или я перерабатываю вещи, и мне вообще следует оставить DTO в модуле" app "? Если это так, я все равно не смогу использовать интерактор GetNews.

Это интерактор GetNews:

class GetNews(private val newsRepository: NewsRepository) {
    suspend operator fun invoke(keyword: String, apiKey: String): Result<List<NewsArticle>> =
        try {
            newsRepository.getNews(keyword, apiKey) as Result<List<NewsArticle>>
        } catch (throwable: Throwable) {
            Result.Failure(throwable)
        }
}

Что я пробовал:

Это моя структура проекта:

Text](https://imgur.com/eQ14M7H)[![enter image description here] 1

Любая помощь приветствуется.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...