Соглашение об имени метода ViewModel - PullRequest
0 голосов
/ 29 мая 2018

Как лучше всего называть методы в классах 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 голосов
/ 29 мая 2018

Нет правильного пути, если код чистый и легко читаемый / понятный.Но если вы посмотрите на примеры, которые Android дает , они показывают методы, аналогичные тем, которые вы опубликовали.

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 обычно представляет собой Активность или Фрагмент .Вам решать, какой из них вы выберете, однако я предпочитаю LifecycleObserver, так как он требует меньше кода, что, я думаю, делает его более чистым.

Если вас интересуют хорошие практики Android и несколько советов, которые помогут вам в этомКстати, есть несколько хороших страниц, которые я бы порекомендовал:

- лучшие практики Android

- советы и хитрости Android

- в Android должны быть библиотеки

...