清洁架构,数据请求协调器,演示者或用例/交互器?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了清洁架构,数据请求协调器,演示者或用例/交互器?相关的知识,希望对你有一定的参考价值。

谁应该编排/映射来自ui的数据?例如,登录,我有usernamepassword: 1.)我应该从我的演示者接受LoginParam作为参数然后从UI,创建LoginParam对象然后提供它?要么

public class LoginPresenter {

   public void login(LoginParam loginParam) { //pass the parameter from ui
      loginUseCase.execute(loginParam)
      ....
   }
}

2.)只是接受usernamepassword然后presenter将创建LoginParam通过use case?要么

public class LoginPresenter {

   public void login(String username, String password) {
      //create the object in the presenter
      loginUseCase.execute(LoginParam.create(username, password)) 
   }
}

3.)最后,将usernamepasswordpresenter传递给usecase,然后usecase将创建用于API调用的LoginParam对象?

public class LoginPresenter {
   public void login(String username, String password) {
      loginUseCase.execute(username, password) //pass it through
      ...
   }
}

用例:

public class LoginUseCase {
   public Single<LoginResp> execute(String username, String password) {
      return userRepository.login(LoginParam.create(username, password))
      ...
   }
}

如果是这样,为什么呢? (请证明你的答案,并指出错误解决方案会出现的问题)

从我读过的东西,我没有找到任何具体的答案。 (或许我错过了/不明白的东西哈哈)

答案

一般来说,Uncle Bob谈到“从视图发送到控制器的请求”和“从控制器发送到交互器的请求模型”。控制器必须在请求和请求模型之间进行转换。

在你的情况下,问题是你在哪里创建LoginParam?如果类属于用例层,则演示者将创建它。如果它属于接口适配器层,则视图将创建它。

从理论上讲,您还可以决定将纯字符串从视图传递到控制器并传递给用例交互器。拥有一个自定义类将更容易扩展(不打破api更改)。如果您实际上有两个以上的参数,我会选择特定的请求对象(接口适配器层)和特定的请求模型(用例层)。

有关控制器 - 交互器 - 演示者交互的更详细讨论,您可以在我的帖子中找到:https://plainionist.github.io/Implementing-Clean-Architecture-Controller-Presenter/

以上是关于清洁架构,数据请求协调器,演示者或用例/交互器?的主要内容,如果未能解决你的问题,请参考以下文章

清洁架构中的“用例交互器”和“服务”有啥区别?

清洁架构 - 如何处理数据库事务?

清洁架构:用例输出端口

清洁架构:结合交互器

DDD层和清洁架构

清洁架构 - 在使用存储库模式和用例刷新的同时获取缓存数据