Domain model - модель, хранящая полную информацию о фигурах;
View (Activity) model - модель, привязанная к отображению, хранит информацию, необходимую для отрисовки. Также данная модель имеет вспомогательные методы, например, hitTest;
Перенос логики, относящейся к отображению во View. Например: выделение фигуры, отрисовка рамки;
Переделать добавление, удаление, перемещение и ресайз на новую архитектуру.
Пример перемещение фигуры:
1) View отслеживает выбор фигуры пользователем:
обходим массив View model и у каждой модели вызываем метод hitTest;
отрисовываем рамку вокруг выбранной фигуры.
2) Пользователь начал перемещение:
отрисовываем новое состояние холста на каждом кадре. Для этого используется информация из View model;
ожидаем, когда пользователь закончит перемещение (поднимет палец).
3) View вызывает метод у Presenter, который сигнализирует о событии перемещения фигуры, передавая при этом все необходимые данные;
4) Presenter обрабатывает событие перемещения:
создается новый экземпляр команды Move и передаются необходимые данные;
команда выполняется и добавляется в стек команд;
Presenter уведомляет View об изменениях через ViewState.
Обратить внимание:
В моделях минимизировать количество конструкций switch-case, а также условных операторов, обрабатывающих ситуацию для какой-то конкретной фигуры;
Код в Domain model должен быть максимально абстрактным: работаем на уровне интерфейса IShape.
Переход на MVP:
Перенос логики, относящейся к отображению во View. Например: выделение фигуры, отрисовка рамки;
Переделать добавление, удаление, перемещение и ресайз на новую архитектуру.
Пример перемещение фигуры:
1) View отслеживает выбор фигуры пользователем:
2) Пользователь начал перемещение:
3) View вызывает метод у Presenter, который сигнализирует о событии перемещения фигуры, передавая при этом все необходимые данные;
4) Presenter обрабатывает событие перемещения:
Обратить внимание:
В моделях минимизировать количество конструкций switch-case, а также условных операторов, обрабатывающих ситуацию для какой-то конкретной фигуры;
Код в Domain model должен быть максимально абстрактным: работаем на уровне интерфейса IShape.