Я работаю над приложением 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)
}
}
Что я пробовал:
Это моя структура проекта:
] 1
Любая помощь приветствуется.