Памятка или командный паттерн?
У меня есть веб-приложение на JavaScript (Backbone для моих моделей, ReactJS для моих представлений), в котором есть два "режима отображения", между которыми пользователь может переключаться с помощью кнопки. Эти режимы визуализируют данные из моей модели - которая представляет собой древовидную структуру, реализующую составной шаблон - путем перестановки конечных объектов в иерархии, перемещения нескольких объектов между контейнерами на одном и том же "уровне" в дереве (например, ящик, содержащий коробки с носками и перемещение нескольких носков в случайном порядке между коробками в одном ящике). Часто это влечет за собой полную перестановку данных. В настоящее время я занимаюсь этим с помощью шаблона Memento, сериализуя и сохраняя текущую модель, пока пользователь снова не переключит режим отображения, когда он будет восстановлен.
В то же время я также хочу позволить пользователю создавать последовательности того, что можно считать "правками" в обычном смысле - последовательность произвольных, изменяемых изменений объектов, изменения их размера, цвета, формы и т. Д. стандартный шаблон отмены повторения. Я еще не написал никакого кода для этого, но мне интересно, как именно я должен реализовать это в отношении подхода Memento, который у меня уже есть для переключения между режимами отображения. Это что-то совершенно другое, или я могу / должен ли я интегрировать эти два?
Одна ситуация, которая, возможно, предполагает последнее, заключается в следующем: пользователь может выполнить редактирование, которое он хочет сохранить, находясь в режиме отображения, который будет переключен обратно на ранее сохраненный, который теперь будет содержать устаревшие данные. Это предполагает управление изменениями режима отображения и совместное редактирование последовательностей, рассматривая их с точки зрения пользовательских команд, а не состояний приложений (предположительно, моделируя это с помощью шаблона команд). Предположительно, по этому шаблону у меня будет набор "парных" команд для режимов отображения, которые вместо использования шаблона сериализации, такого как Memento, знают, как правильно структурировать мои базовые данные и переключаться назад и вперед между этими представлениями (хотя, на первый взгляд, это кажется более сложным, чем мой нынешний паттерн на основе Memento, так как я бы - возвращаясь к аналогии с "ящиком" - должен был отслеживать, какой коробкой был каждый носок, сразу же ранее). Это правильный подход? Я правильно рассуждаю об этом?
NB: Мои модели довольно маленькие, обычно не больше, чем несколько килобайт, и даже при взаимодействии с пользователем намного больше не вырастет. Так что Memento Pattern ничего мне не стоит. Правильно ли продолжать использовать его там, где он реализован.
редактировать
Еще одна возможность, которая пришла мне в голову, - это управление режимами отображения с помощью подхода Viewmodel. Таким образом, вместо того, чтобы менять местами фактическую модель каждый раз, как я делаю с подходом memento, модель представления располагается между моделью и представлением и "реструктурирует" данные модели соответствующим образом для текущего режима отображения. Таким образом, существует режим "по умолчанию", который просто отображает модель "как есть", но другой режим, который реструктурирует иерархию данных с использованием промежуточной модели представления. Мне кажется, что основным недостатком этого подхода является то, что он добавляет еще один изменяемый уровень в архитектуру приложения, который может оказаться слишком хрупким, чтобы его можно было контролировать. Подход, основанный на воспоминаниях, конечно, намного проще.