Как правильно создавать модели данных

158
10 декабря 2021, 07:30

Делаю приложение "Список дел/задач".

Есть модель, которая содержит заголовок и приоритет задачи, а данные берет из бд. В зависимости от приоритета задачи, я меняю дизайн на текущей активити. К примеру, если приоритет задачи высокий, то делаю красный фон.

Модель:

public class Task {
    private String mTitle;
    private int mPriority;
    public Task(String title, int priority) {
        this.mTitle = title;
        this.mPriority = priority;
    }
    public String getTitle() {
        return mTitle;
    }
    public void setTitle(String mTitle) {
        this.mTitle = mTitle;
    }
    public int getPriority() {
        return mPriority;
    }
    public void setPriority(int mPriority) {
        this.mPriority = mPriority;
    }
}

В поле mPriority я храню число, от 0 до 2.

0 - низкий приоритет, 1 - средний, 2 - высокий

И далее уже в активити через switch делаю что мне надо

switch(task.getPriority) {
    // Низкий приоритет задачи
    case 0:
        // Сделать фон допустим зеленым.
        // еще какие то действия с дизайном.
    break;
    // Средний приоритет задачи
    case 1:
        // Тут код
    break;
    // Высокий приоритет задачи
    case 2:
        // Тут код
    break;
}

Понятное дело что хранить число приоритета и далее делать проверки в switch не правильно. Ведь вдруг я захочу добавить еще один приоритет: "3 - Супер высокий приоритет", тогда мне в каждом месте где используется приоритет задачи придется редактировать код.

Только учусь программированию, по этому объясните на "пальца", как решаются такие проблемы :)

Пока я думаю что нужно создать еще одну модель TaskPriority, а в ней поля title, color;

А в самой модели Task, за место поля int mPriority, сделать TaskPriority mPriority;

Но не уверен что это решают таким путем.

Answer 1

Основное - нужно разделять данные от представления. Их нельзя друг с другом смешивать.

1) У вас есть Model - они же данные (то как вы отображаете данные из БД в модель - это отдельная большая песня)

2) Далее у вас View - то как вы собираетесь отображать/представлять/показывать

3) Как теперь сделать общение между моделью и представлением? (model vs. view)

В п. 3 начинается разброд и шатание. Все упирается в концепт, если угодно в философию, если быть точнее называется архитектурный паттерн.

Отголоски этого разброда и шатания можно почитать погуглив ключевые слова:

  • MVC - model, view, controller
  • MVP - model, view, presenter
  • MVVM - model, view, viewmodel
  • MVI - model, view, intent

Для Android сейчас кошерным является концепция MVVM, впрочем лет 5 назад все верещали от MVP, а лет 10 назад с экранов не сходил MVC, но ничего. Еще через пару лет - придумают что нибудь другое.

В общем реализуйте MVVM, тем более что Android заточен под него.

Практическое руководство здесь

READ ALSO
Как из трехмерного массива получить одномерный, удовлетворяющий условию задачи?

Как из трехмерного массива получить одномерный, удовлетворяющий условию задачи?

В вузе задали задачу на java, подскажите как её решить? Или может какие-нибудь обучающие материалы о том, как решать подобныеДалее текст на английском:

139
нужная форма JButton

нужная форма JButton

мне нужно что бы при нажатии на кнопку JButton открывалась нужая JFrame например у меня есть окно с кнопкой я нажимаю на кнопку и открыается нужная...

84
Помогите, готовлюсь к Олимпиаде

Помогите, готовлюсь к Олимпиаде

Олимпиада ориентирована на Паскаль, но я его плохо знаю, зато знаю JavaОдно из условий на олимпиаде это работа с файлами, то есть в текстовый...

64
Удаление/изменение JAVA_HOME

Удаление/изменение JAVA_HOME

Как удалить в linux ubuntu переменную окружения JAVA_HOME (при том, что jdk/jre не установлены)При попытке изменить переменную через export или удалить ее через...

220