Android - 避免胖视图模型策略

时间:2018-03-29 07:37:06

标签: android android-fragments

让我们说我有一个活动来管理由7个片段组成的漫长过程。每个片段都有自己的视图逻辑,并在用户移动活动所代表的过程时传递给下一个片段。

我可以制作1个共享视图模型,它将保存所有需要在所有片段中显示的数据,但我想避免它。

所以我想为每个片段和活动的视图模型创建一个不同的视图模型来管理流程。

我的问题是,这是正确的方法吗?在android体系结构蓝图中,没有适合这种情况的例子。

让我们说好,片段视图模型应该如何与活动视图模型进行通信?是一个服务层,它们之间共享数据(与实时数据)是否足够好?

2 个答案:

答案 0 :(得分:0)

请牢记单一职责,仅在需要时使用共享ViewModel,以针对一个视图使用一个ViewModel为目标。

如果针对一个片段的ViewModel越来越胖,是时候绕开将职责细化为较小的ViewModel的时候了。例如片段的特定UI部分(列表,卡片)的ViewModel,它将免除片段的初始胖ViewModel,一些属性和逻辑。

答案 1 :(得分:0)

  

我的问题是,这是正确的方法吗?

我会这么说,是的。我认为您应该在视图模型中模仿您的视图结构。因此,您将有一个一个 ActivityViewModel和一个 FragmentViewModel 每个子片段。然后,您的ActivityViewModel拥有每个片段视图模型,以在片段之间进行必要的协调。

  

好说,片段视图模型应该如何与活动视图模型进行通信?在它们之间共享数据(与实时数据)的服务层足够好吗?

是的。观察每个视图模型的相关状态,然后向应该更新的视图发送消息。

示例:

class ActivityViewModel() {

    private val fragViewModel1: FragmentViewModel1
    private val fragViewModel2: FragmentViewModel2

    init {
        fragViewModel1.someLiveData.observe {
            fragViewModel2.updateViewStateBasedOnFragment1(it)
        }
    }
}

显然,如何初始化和设置所有这些视图模型是另一个问题,但是希望这可以帮助您入门。

希望有帮助!