Одна ViewModel для нескольких видов или несколько ViewModel для одного вида? - PullRequest
1 голос
/ 09 февраля 2020

Я работаю над приложением Android, которое тренирует слух игрока, заставляя их воспроизводить на гитаре все, что они слышат с телефона. Я сделал часть распознавания нот (и аккордов) следующим образом: основной поток, который отображает информацию и слушает кнопки, AsyncTask, который записывает звук и отправляет данные для анализа, и другой AsyncTask, который анализирует и определяет, какие ноты были сыграны.

Распознавание заметок в режиме реального времени, поэтому я поместил Анализатор AsyncTask в ViewModel. Распознанные ноты и аккорды хранятся в полях LiveData, поэтому, когда они меняются, основной поток (который представлен View) уведомляется.

Сейчас я работаю над игрой, использующей это распознавание, но я также собираюсь сделать тюнер. Игра и тюнер будут использовать один и тот же алгоритм распознавания.

Мой вопрос: как мне подойти к этому? game и tuner также будут иметь свои собственные функции. Должен ли я держать Анализатор ViewModel отдельно от отдельной игры и тюнера ViewModels? Это будет означать, что я буду использовать два ViewModels для каждого из этих двух Views. Я полагаю, что не следует повторять код анализатора в обоих отдельных ViewModels, а также я не должен писать функции для игры и для тюнера в том же ViewModel, потому что там будет бесполезный код (игра никогда не будет использовать отдельные настройки функций).

1 Ответ

1 голос
/ 09 февраля 2020

Вероятно, у вас должен быть ваш общий алгоритм распознавания в вашем Model на самом деле (или даже в каком-то слое обслуживания, независимом от Model), а не в вашем ViewModel , ViewModel предназначен для привязки к View, а не для выполнения бизнес-логики c, как распознавание заметок.

В этом случае ViewModel будет отвечать за отправку записей на Model, который сохраняет их как LiveData объекты. ViewModel извлекает их и выставляет, например, View как LiveDataViewModel объекты.

...