这主要是一个设计问题。我有2个实体Payment
和User
,具有一对一的关系。 API调用返回一个Payments
列表,每个Payment
包含一个User
。付款显示在“回收者视图”中,每一行都包含来自Payment
和User
实体的信息。为了从数据库中获取它们(使用 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)
我的问题是,如何在不破坏任何清洁架构原则的情况下创建存储库?
PaymentRepository
并从那里处理所有内容。我发现的每个 Android Clean Architecture 示例都具有一个或两个完全独立的实体,没有连接查询或任何分组方式,这在现实生活的应用程序中是完全不现实的。
有什么方法可以正确实现吗?
答案 0 :(得分:0)
据我了解,SRP并不是说每个存储库只应处理自己的实体-而是每个存储库仅应具有“更改的单个原因”。
应该解决您问题的模式是“工作单元”模式:只需创建一个“工作单元”存储库即可完全处理此查询。
实际上,blob叔叔在他的《干净的体系结构》一书中指出,存储库接口的设计应方便用户使用。它应该有一个用例针对存储库提出的“每个查询”方法。