我一直在阅读一些关于clean architecture的文章,以及它如何在android中实现。我看到显示其Android实施的sample app。另外,我经历了一个不错的talk on Clean architecture on Android
所以,我对大部分概念都有所了解,但我想对某些事情有所了解。
根据我的理解,
我没有列出关于内层如存储库的更多细节,因为我的问题与上述步骤有关
在这里,演示者是否唯一可以充当UseCases和UI之间的中介,作为数据调度员?
是否只使用视图模型来使用案例模型转换,反之亦然?
输入验证逻辑依赖于哪一层?可以在演示者里面吗?例如,如果我们采用注册过程的小用例,
用户输入详细信息并单击注册按钮,并将数据发送给演示者,就像
第二个问题是,谁控制导航? View或Presenter或UseCase?
谁决定下一步去哪儿?
例如 - 考虑登录过程的用例,用户将在其中输入凭据并单击“确定”。
成功登录后
那么,谁负责在接下来的哪个屏幕上做出这些决定?它是演示者,它相应地决定和导航视图吗?或者是用例处理程序有责任告知演示者下一个状态是什么?
很抱歉这个问题太长了,但我只是想详细说明我目前的理解。提前致谢
答案 0 :(得分:12)
在这里,演示者是否有充当调解员的唯一职责 在UseCases和UI之间,作为数据调度程序?
是强>
输入验证逻辑依赖于哪一层?它可以在里面吗? 主持人?
验证应该依赖于业务层而不是表示,是否可以在演示者内部?确定它可以,但是如果你有多个屏幕需要类似的输入,你必须在每个演示者内重复验证逻辑吗?你可以说你可以做一个基础演示者,但这不是一个完美的解决方案,因为演示者应该有一个目的。
第二个问题是,谁控制导航?视图或 Presenter或UseCase?
您认为导航是域或演示文稿或数据层的一部分,它可能与表示层有关,但您可以在表示层中创建一个小组件,它通常控制整个导航,所以你当您决定需要其他平台并抛弃您的活动时,可以使用此组件。你可以在你提到的样本中找到这种方法。
修改:0 强>
如何在具有不同模型的模块之间传递数据?
你只需使用映射器,原因是使每个模块都有自己的模型或实体,因此很容易分别测试每个模块。
关于演示者和视图,假设您想显示错误消息,演示者决定显示的原因,视图决定如何显示。
我认为使用Android理解干净的代码表示层的问题是,活动和片段不仅是视图,它们也是您的代码将存在的过程和生命周期,干净的代码出现了分离关于那些活动和片段的意大利面条代码。
修改:1 强>
添加到最后一点,现在很明显,谷歌和那里的支持团队通过引入大量的库“Architecture components”,尽可能地制作活动和碎片虚拟视图。我鼓励任何人检查它们,即使你使用的是MVP,你也会发现很大的好处。