当所有活动需要相同的数据时,替代单身人士

问题描述 投票:-1回答:2

在我读到的时候,单身人士很糟糕,应该避免使用它们。

但我开发了一个应用程序,其中大多数活动和片段需要访问相同的数据集。数据存储在ArrayList中,可通过单例类访问。

这有什么不好的?我无法为每个活动创建新的数据类对象,因为ArrayLists会有所不同。有什么选择?

java android
2个回答
1
投票

单身人士很糟糕,应该避免使用它们

在Android应用程序开发中,我们使用单例比传统的Java开发更多。

恕我直言,关键是:

  • 仔细使用它们,确保不会引入内存泄漏,竞争条件等。
  • 将它们用于特定角色,例如遵循存储库模式,而不是仅仅在所有内容上单独使用static,因为您希望让编译器停止向您说出有意义的事情
  • 假设由单身人士管理的数据来自涉及I / O(网络,数据库,文件等)的东西,反应性使用它们(LiveData,RxJava,Kotlin协同程序等)

这有什么不好的?

可能没什么。您的具体实施可能存在问题,但我们对此的细节很少。


1
投票

单身人士本身并不坏,他们的问题是当你开始尝试测试你的代码时。

当你有一个依赖于一个或多个单例的类/模块/组件/视图时,你无法控制那个依赖,所以在测试环境中你不能“模拟”单例依赖或控制数据是什么(你可以,但真的很烦人,必须在每次测试前清理所有单身,即使这很容易出错)。

这可以使用依赖注入轻松解决。在Android中,最好的框架是Dagger:https://google.github.io/dagger/你总是可以手动使用依赖注入,但拥有一个为你努力工作的框架是很好的。

然后,通过这种方法,你有点像单身人士,但他们并不是真正的单身人士,他们只负责创建一个单一的实例,但你(或框架)是。这些类只创建一次(在开头或懒惰),然后注入依赖于它们的组件/ clases。通过这种方式,您可以保持其所有功能(在活动,片段等之间共享数据),但是,当您注入它们时,您可以将它们模拟为注入模拟以进行测试。

© www.soinside.com 2019 - 2024. All rights reserved.