这主要是一个设计问题。我有两个实体
我的问题是如何在不违反任何 Clean Architecture 原则的情况下创建我的存储库?
Payment
和User
,它们之间是一对一的关系。API调用返回一个Payments
列表,每个Payment
都包含一个User
。这些支付信息在Recycler View中显示,每一行都包含来自Payment
和User
实体的信息。为了从DB(使用Room)获取它们,我需要执行联接查询,返回两个实体的组合:@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)
我的问题是如何在不违反任何 Clean Architecture 原则的情况下创建我的存储库?
- 当然,我不能创建 2 个独立的存储库,并通过调用 UseCase 在它们之间传递数据,因为它们已经在 API 调用或 Room DAO 查询中一起返回。
- 单一职责原则 指出每个存储库只能处理自己的实体,因此我不能创建一个
PaymentRepository
并从那里处理所有内容。 - 我也不能将两个实体分组到一个 Aggregate 中,并创建一个处理它们两个的存储库,因为它们是两个独立的实体,可以相互独立存在。
我找到的每个 Android Clean Architecture 示例都有一个或两个完全独立的实体,没有联接查询或任何形式的分组,这在现实生活应用程序中是完全不切实际的。
有没有办法正确实现这个?