Итак, я реализую графический интерфейс, подобный svg-editor, в одном приложении, я здесь работают. Вот несколько примеров логики, которая может потребоваться для этого:
И так далее.
Я уже реализовал все эти элементы, но мне не понравился конечный результат, в основном потому, что мне пришлось использовать множество флагов для управления состояниями (щелчок мышью && левая кнопка && не двигается? Сделать это), и, конечно, этот код мог бы быть более элегантным. Итак, я немного исследовал и пришел к следующим вариантам:
Шаблон конвейера: я бы создал классы, которые обрабатывали бы каждое логическое событие отдельно и использовали бы порядок приоритета, чтобы указать, что делать / что будет быть переданным первым, и как событие будет распространяться на последующие элементы конвейера.
MVC: это самый распространенный ответ, но как я могу использовать его, чтобы сделать код более чистым, на данный момент для меня очень расплывчато.
Конечный автомат: Было бы неплохо, но управление детализацией конечного автомата было бы сложным.
Так что я прошу С.О. гуру, дающие советы о том, как создать лучший и приятный код.