Компоненты архитектуры Android - лучшие практики [закрыто]

asf спросил: 28 марта 2018 в 03:40 в: android

Я пробовал компоненты Android Architecture, и у меня есть несколько вопросов о лучших практиках.

  1. Как вы справляетесь с ошибками?

Например, У меня может быть несколько типов ошибок. Это может быть ошибка "Нет Интернета" или другая (как исключение) и может быть ошибкой от сервера (в виде строки или json).

Создаете ли несколько LiveData для каждого типа ошибок? Или вы создаете обертку-объект с результатом и двумя типами ошибок (строка / исключение) и используете только один LiveData? Что лучше? Объект-оболочка с тремя полями кажется сложным.

  1. Можно ли анализировать результат и ошибки в представлении? Делает ли View слишком много работы, не так ли? Как ты думаешь? Кроме того, где вы разбираете json-errors?

  2. Можно ли использовать R.string в ViewModel? Или это плохо? Если это так, как я могу получить строки из R.string для ViewModel?

Спасибо


1 ответ

Есть решение
Crain ответил: 28 марта 2018 в 04:30
  1. Я предлагаю обернутый универсальный объект, например:

    открытый класс ResultBase {private String _error;

    public ResultBase(){}public ResultBase(String error){
        _error = error;
    }public boolean isSuccess(){
        return _error == null || _error.isEmpty();
    }public String getError(){
        return _error;
    }public void setError(String error){
        _error = error;
    }
    

    }

    открытый класс Result extends ResultBase {

    private T mData;public T getData(){
        return mData;
    }public Result(String message){
        super(message);
    }public Result(T data){
        mData = data;
    }@Override
    public String toString() {
        return isSuccess() ? "Ok" : "ERROR: " + getError();
    }
    

    }

  2. Серверный ответ должен быть проанализирован на уровне службы. Итак, View подписывается на LiveData из ViewModel, ViewModel, в свою очередь, вызывает слой Service. Таким образом, "Просмотр" позволяет получить полностью подготовленные данные со знаком ошибки или без него.

  3. Все нормально. R.string это просто константа. Вы можете получить его как getApplicationContext (). GetString (strId)