谁应该编排/映射来自ui的数据?例如,登录,我有username
和password
:
1.)我应该从我的演示者接受LoginParam
作为参数然后从UI,创建LoginParam
对象然后提供它?要么
public class LoginPresenter {
public void login(LoginParam loginParam) { //pass the parameter from ui
loginUseCase.execute(loginParam)
....
}
}
2.)只是接受username
和password
然后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.)最后,将username
和password
从presenter
传递给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/