Мне интересно, использую ли я правильную архитектуру для своего приложения для 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, которые я буду разрабатывать в будущем?Спасибо !!