Android: 一个 ViewModel 可以用于多个 Fragments 吗?
Android: One ViewModel for multiple Fragments possible?
我有一个关于 Android 的应用架构的一般性问题。我正在实现一个应用程序(在 Java 中),它有一个 activity 和 20 个片段(相似但不相同)。到目前为止,我在片段中实现了所有内容(UI、逻辑、数据库查询)。现在我正在考虑使用 ViewModel,但我不确定是否值得付出努力。所以我的问题是我的 20 个片段中的每一个是否都应该有一个自己的 ViewModel,或者我是否可以为所有 20 个片段实现一个 ViewModel?为所有 Fragment 类 实现一个 ViewModel 会大大增加工作量,所以我想知道是否可以为所有 Fragment 只有一个 ViewModel?
每个片段有一个视图模型。这样每个视图模型负责做与一个片段相关的事情,因此测试也更容易。
事实上,您可以为单个片段设置多个视图模型,为您做不同的事情。
将所有内容都保留在一个视图模型中会使测试变得更加困难,而且您必须保留所有 20 个片段的视图模型可能会影响 activity。
技术上可以为所有 Fragment
设置一个 ViewModel
。
但是,由于这个 ViewModel
必须管理许多非常不同的用例,所以它会类似于 god object。 20个Fragments,代码行会很多...
切换到 MVVM 通常是值得的,因为长期 运行 应用程序更易于测试和维护。
在您的应用程序中使用 BaseViewModel
可能是个好主意:ViewModel
class 处理在所有用例中都相似的事情,比如让 Fragment
知道它应该显示加载指示器或错误消息。 “正常”ViewModel
可以扩展 BaseViewModel
并专注于他们的用例。
在某些情况下共享 ViewModel
是有意义的,例如,当 Fragment
显示一个包含一些 EditText
的对话框时,或者当一个人的工作流程包含一系列在小型设备上需要 3-4 Fragment
秒,而在较大的设备上,一两个 Fragment
秒就足够了。
以防万一,这是我最喜欢的 MVVM 应用架构起点:Guide to app architecture
Now I am considering to use a ViewModel but I am not sure whether it
is worth the effor
如果你想对以后的发展有好处,这绝对是值得的。
So my question is whether each of my 20 Fragments should have an own
ViewModel or whether I can just implement one ViewModel for all the 20
Fragments?
每个片段都应该有自己的 ViewModel,我不喜欢共享 ViewModel。我开发了很多应用程序,我逐渐意识到我应该尽量避免紧耦合。因为你每次开发都会有很多变化,当你编辑或添加或删除它时会让你编辑很多,因为链接太紧了。最好将它们拆开,并且仍然能够 运行 正常使用,并且在需要时能够像拼图一样重新组装它们。
Implementing a ViewModel for all Fragment classes would drastically
increase the effort, so I would like to know if it is possible to have
only one ViewModel for all Fragments?
只要你想就可以,在编程中没有什么是不可能的。但如果你这样做,你不应该因为它只会让你的代码更复杂。
您可以在此处阅读有关该模型的更多信息。
你可以完成这个 link
Shareable ViewModel
这在 Kotlin 中通过使用扩展函数非常简单,但是在 Java 中,我们需要创建一个函数来创建 ViewModel 并根据 activity/fragment 的生命周期处理它们的范围。
我有一个关于 Android 的应用架构的一般性问题。我正在实现一个应用程序(在 Java 中),它有一个 activity 和 20 个片段(相似但不相同)。到目前为止,我在片段中实现了所有内容(UI、逻辑、数据库查询)。现在我正在考虑使用 ViewModel,但我不确定是否值得付出努力。所以我的问题是我的 20 个片段中的每一个是否都应该有一个自己的 ViewModel,或者我是否可以为所有 20 个片段实现一个 ViewModel?为所有 Fragment 类 实现一个 ViewModel 会大大增加工作量,所以我想知道是否可以为所有 Fragment 只有一个 ViewModel?
每个片段有一个视图模型。这样每个视图模型负责做与一个片段相关的事情,因此测试也更容易。
事实上,您可以为单个片段设置多个视图模型,为您做不同的事情。
将所有内容都保留在一个视图模型中会使测试变得更加困难,而且您必须保留所有 20 个片段的视图模型可能会影响 activity。
技术上可以为所有 Fragment
设置一个 ViewModel
。
但是,由于这个 ViewModel
必须管理许多非常不同的用例,所以它会类似于 god object。 20个Fragments,代码行会很多...
切换到 MVVM 通常是值得的,因为长期 运行 应用程序更易于测试和维护。
在您的应用程序中使用 BaseViewModel
可能是个好主意:ViewModel
class 处理在所有用例中都相似的事情,比如让 Fragment
知道它应该显示加载指示器或错误消息。 “正常”ViewModel
可以扩展 BaseViewModel
并专注于他们的用例。
在某些情况下共享 ViewModel
是有意义的,例如,当 Fragment
显示一个包含一些 EditText
的对话框时,或者当一个人的工作流程包含一系列在小型设备上需要 3-4 Fragment
秒,而在较大的设备上,一两个 Fragment
秒就足够了。
以防万一,这是我最喜欢的 MVVM 应用架构起点:Guide to app architecture
Now I am considering to use a ViewModel but I am not sure whether it is worth the effor
如果你想对以后的发展有好处,这绝对是值得的。
So my question is whether each of my 20 Fragments should have an own ViewModel or whether I can just implement one ViewModel for all the 20 Fragments?
每个片段都应该有自己的 ViewModel,我不喜欢共享 ViewModel。我开发了很多应用程序,我逐渐意识到我应该尽量避免紧耦合。因为你每次开发都会有很多变化,当你编辑或添加或删除它时会让你编辑很多,因为链接太紧了。最好将它们拆开,并且仍然能够 运行 正常使用,并且在需要时能够像拼图一样重新组装它们。
Implementing a ViewModel for all Fragment classes would drastically increase the effort, so I would like to know if it is possible to have only one ViewModel for all Fragments?
只要你想就可以,在编程中没有什么是不可能的。但如果你这样做,你不应该因为它只会让你的代码更复杂。
您可以在此处阅读有关该模型的更多信息。
你可以完成这个 link Shareable ViewModel
这在 Kotlin 中通过使用扩展函数非常简单,但是在 Java 中,我们需要创建一个函数来创建 ViewModel 并根据 activity/fragment 的生命周期处理它们的范围。