【发布时间】:2021-01-09 11:18:21
【问题描述】:
您好,我有一个适配器,它显示项目列表以及与setItems、getCount、notifyDataSetChanged 相关的所有功能。
适配器还可以通过用例调用 api。
结构是
适配器 -> 用例 -> 存储库 -> apiLayer
我知道片段和活动不应包含对 api 的调用(我的实例中的用例)。
所以适配器应该有 api 调用(在我的实例中是用例)
谢谢 回复
【问题讨论】:
-
这是可能的,但是当配置更改发生(如设备旋转)时,您的 Activity/Fragment 会重新创建(以及适配器)并且您会丢失 UI 状态。您应该考虑拥有一个 ViewModel、拥有 UseCase 等。然后您可以从 Activity/Fragment 观察 ViewModel 的变化并更新适配器。这样配置更改不会导致数据丢失/重新获取数据。
-
所以在适配器中包含用例并不理想,但它也不是一个坏主意?
-
如果你能忍受缺点,你绝对可以做到。虽然我不会推荐它。在我看来,让 ViewModel 更新适配器(通过 Activity)是更好的关注点分离。对我来说,适配器只是用来将数据与您的视图连接起来。它不应该再做任何事情。所以这更多的是一个好的设计问题。想想可测试性,你能轻松地对适配器进行单元测试吗?将它放在 viewModel 中会使测试变得更加容易。
-
是的,我完全同意你的看法。
-
某种或更好的是,只有 Activity/Fragment 与演示者对话:
presenter.fetchData(),然后使用该数据更新适配器。所以适配器除了数据和视图之外什么都不知道。对适配器的依赖较少(知识较少)将使其对更改等更加健壮。
标签: java android kotlin android-adapter android-mvp