Android чистая архитектура и связанные объекты - PullRequest
0 голосов
/ 12 сентября 2018

Это в основном вопрос дизайна.У меня есть 2 сущности Payment и User, имеющие отношения один-к-одному.Вызов API возвращает список Payments, каждый Payment содержит User.Платежи отображаются в представлении Recycler, каждая строка содержит информацию от сущностей Payment и User.И чтобы получить их из БД (используя Комната ), мне нужно выполнить запрос на соединение, который возвращает комбинацию обеих сущностей:

@Query("SELECT payment.*, user.* FROM payment INNER JOIN user ON payment.user_id = user.userId")
fun findPaymentsAndUsers(): List<PaymentAndUser>

data class PaymentAndUser(
    @Embedded val payment: Payment,
    @Embedded val user: User)

Мой вопрос заключается в том, как я могу создать свои репозиториибез нарушения каких-либо принципов Чистая архитектура ?

  • Конечно, я не могу создать 2 независимых репозитория и передавать данные между ними через вызывающий UseCase , потому что ониуже возвращаются вместе либо в вызове API, либо в запросе Room DAO .
  • принцип единой ответственности гласит, что каждый репозиторий должен обрабатывать только свою собственную сущность,поэтому я не могу создать PaymentRepository и обработать все оттуда.
  • Я также не могу сгруппировать обе сущности в Aggregate и создать хранилище, которое обрабатывает их обоих, потому что они являются двумя независимыми сущностями.которые могут существовать независимо друг от друга.

Каждый Android Clean Architecture образец, который я нашелимеет одну или две сущности, которые полностью независимы, без запросов на соединение или какой-либо группировки, что совершенно нереально в реальных приложениях.

Есть ли способ, которым это можно реализовать правильно?

1 Ответ

0 голосов
/ 05 февраля 2019

Насколько я понимаю, SRP НЕ говорит, что каждый репозиторий должен обрабатывать только свою собственную сущность - вместо этого у каждого репозитория должна быть только "одна причина, которую нужно изменить".

Шаблон, который должен решить вашу проблему - это шаблон «единицы работы»: просто создайте репозиторий «единицы работы», который точно обрабатывает этот запрос.

На самом деле в своей книге «Чистая архитектура» дядя Блоб утверждает, что интерфейсы репозитория должны быть спроектированы так, чтобы это было удобно для пользователя. У него должен быть один метод «на запрос», который будет использовать сценарий использования с хранилищем.

...