Правильна ли моя архитектура Android MVVM с использованием Spring - PullRequest
0 голосов
/ 12 ноября 2018

Мне интересно, использую ли я правильную архитектуру для своего приложения для Android, поэтому я хотел бы проверить это.Я много читал и изучал учебники, которые нашел в Google, и объединил эти знания в следующую архитектуру:

Основой этой настройки является шаблон потока Master / Detail из Android Studio.

Представление

Представление представляет собой действие, называемое OrderListActivity с OrderListItemRecyclerViewAdapter, которое использует OrderListItemViewHolder.

Представление содержит переменную типа OrderViewModel.

Моя функция onCreate вызывает setupOrderItemListener(), которая содержит следующий код:

private void setupOrderItemListener() {
    orderViewModel = ViewModelProviders.of(this).get(OrderViewModel.class);
    orderViewModel.init();
    orderViewModel.getOrderListItems().observe(this, this::onOrderListChanged);
    orderViewModel.initiateOrderListFetch();
}

onOrderListChanged:

public void onOrderListChanged(List<OrderListItem> orderListItems) {
    mAdapter.dataset = orderListItems;
    mAdapter.notifyDataSetChanged();
}

mAdapterпеременная имеет тип OrderListItemRecyclerViewAdapter, о котором я упоминал ранее.

ViewModel

В моем ViewModel у меня есть функция:

LiveData<List<OrderListItem>> getOrderListItems() {
    return model.orderListItems;
}

ивот этот:

void initiateOrderListFetch() {
    model.fetchOrderList();
}

Модель

В моем OrderModel у меня есть эта переменная:

MutableLiveData<List<OrderListItem>> orderListItems = new MutableLiveData<>();

Функция fetchOrderList(), котораявызывается из ViewModel следующим образом:

void fetchOrderList() {
    new FetchOrderListTask(this).execute();
}

Эта задача выполняет HTTP-запрос к серверу, используя пружинуAndroid отдых шаблон.(org.springframework.android:spring-android-rest-template) После завершения задачи вызывается функция делегата orderListTaskResponseFinished, которая выполняет

orderListItems.setValue(response);

, которая запускает функцию getOrderListItems в ViewModel.

После этоговызывается привязка в действии, и представление обновляется.


Мой вопрос: правильно ли я настроил архитектуру?Является ли подход, чтобы назвать сетевую задачу из модели хорошим вариантом?У кого-нибудь есть другие предложения о том, как сделать улучшения?

Дополнительный вопрос: Могу ли я использовать те же ViewModel и Model для моей DetailActivity, которые я буду разрабатывать в будущем?Спасибо !!

...