Here,does the presenter have the only job of acting as a mediator
between UseCases and UI,as a data dispatcher?
是
The input validation logics rely on which layer? Can it be inside the
presenter?
验证应该依赖于业务层而不是表示,是否可以在演示者内部?确定它可以,但是如果你有多个屏幕需要类似的输入,你必须在每个演示者内重复验证逻辑吗?你可以说你可以做一个基础演示者,但这不是完美的解决方案,因为演示者应该有一个目的.
And the second question is,who controls the navigation? The View or
the Presenter or the UseCase?
你认为导航是域或演示文稿或数据层的一部分,它可能与表示层有关,但你可以在表示层中创建一个小组件,它通常控制整个导航,所以你可以使用这个组件当您决定需要其他平台并将您的活动抛弃时.你可以在你提到的样本中找到这种方法.
编辑:0
How you pass data between modules where they have different models?
你只需使用映射器,原因是使每个模块都有自己的模型或实体,因此很容易分别测试每个模块.
关于演示者和视图,假设你想要显示错误消息,演示者决定它将显示的原因,视图决定它将如何显示.
我认为用Android来理解干净的代码表示层的问题是,活动和片段不仅是视图,它们也是你的代码所处的过程和生命周期,干净的代码出现在单独的意大利面条代码上那些活动和片段.
编辑:1
最后一点,现在很明显,谷歌和那里的支持团队通过引入一套很棒的库“Architecture components”,尽可能地制作活动和片段虚拟视图.我鼓励任何人检查它们,即使你正在使用MVP,你也会发现很大的好处.