ViewModel方法名称约定

时间:2018-05-29 10:52:39

标签: android mvvm kotlin viewmodel convention

ViewModel课程中命名方法的最佳方法是什么?基于其行为/行为或活动/片段的生命周期?

例如:

以其行动命名的方法

override fun onResume() {
    super.onResume()
    viewModel.connect()
}

override fun onPause() {
    super.onPause()
    viewModel.disconnect()
}

override fun onItemCheckedChanged(task: Task, value: Boolean) =
    viewModel.updateTaskStatus(task, value)

Android生命周期

命名的方法
override fun onResume() {
    super.onResume()
    viewModel.onResume()
}

override fun onPause() {
    super.onPause()
    viewModel.onPause()
}

override fun onItemCheckedChanged(task: Task, value: Boolean) =
    viewModel.onItemCheckedChanged(task, value)

互联网上有几个例子,使用了两种方法。

在我看来,这些方法应该与生命周期相关,这样View不需要知道ViewModel背后的逻辑,只需要知道需要调用生命周期方法。

最好的方法是什么?

1 个答案:

答案 0 :(得分:3)

只要代码干净且易于阅读/理解,就没有正确的方法。但是如果你看一下examples Android give,它们就会显示与你发布的方法类似的方法。

1)其中一种方法是使用Android生命周期命名的方法(您提到过)。

class MyLocationListener {
    public MyLocationListener(Context context, Callback callback) {
        // ...
    }

    void start() {
        // connect to system location service
    }

    void stop() {
        // disconnect from system location service
    }
}

在生命周期所有者中手动调用每个函数,如下所示:

@Override
public void onStart() {
    super.onStart();
    myLocationListener.start();
    // manage other components that need to respond
    // to the activity lifecycle
}

@Override
public void onStop() {
    super.onStop();
    myLocationListener.stop();
    // manage other components that need to respond
    // to the activity lifecycle
}

2)但是,如果你想通过他们的动作来命名方法,你可以使用OnLifecycleEvent注释为他们提供方法,这是Android Jetpack令我们兴奋的!例如:

public class MyLocationListener implements LifecycleObserver {
    @OnLifecycleEvent(Lifecycle.Event.ON_RESUME)
    public void connectListener() {
        ...
    }

    @OnLifecycleEvent(Lifecycle.Event.ON_PAUSE)
    public void disconnectListener() {
        ...
    }
}

现在,LifecycleObserver可以自动调用这些方法,可以观察LifecycleOwner

myLifecycleOwner.getLifecycle().addObserver(new MyLocationListener());

LifecycleOwner通常是ActivityFragment。取决于你选择哪一个,但我首选的是LifecycleObserver,因为它需要更少的代码,我认为它看起来更清晰。

如果您对良好的Android实践感兴趣并且有一些技巧可以帮助您,那么我会推荐一些好的页面:

- Android best practices

- Android tips & tricks

- Android must have libraries