Советы по архитектуре для реализации логики графического интерфейса

Итак, я реализую графический интерфейс, подобный svg-editor, в одном приложении, я здесь работают. Вот несколько примеров логики, которая может потребоваться для этого:

  • Если пользователь щелкает правой кнопкой на холсте, должен быть создан новый узел, а последующие узлы должны быть «связаны» линией, образуя polygon
  • Если пользователь щелкает левой кнопкой по узлу, я должен переместить весь набор многоугольников в соответствии с положением мыши
  • Пользователь может удалять узлы
  • Выбранные узлы должны быть окрашены по-разному
  • ] Пользователь может выбрать несколько узлов, нажав SHIFT и щелкнув узлы

И так далее.

Я уже реализовал все эти элементы, но мне не понравился конечный результат, в основном потому, что мне пришлось использовать множество флагов для управления состояниями (щелчок мышью && левая кнопка && не двигается? Сделать это), и, конечно, этот код мог бы быть более элегантным. Итак, я немного исследовал и пришел к следующим вариантам:

  • Шаблон конвейера: я бы создал классы, которые обрабатывали бы каждое логическое событие отдельно и использовали бы порядок приоритета, чтобы указать, что делать / что будет быть переданным первым, и как событие будет распространяться на последующие элементы конвейера.

  • MVC: это самый распространенный ответ, но как я могу использовать его, чтобы сделать код более чистым, на данный момент для меня очень расплывчато.

  • Конечный автомат: Было бы неплохо, но управление детализацией конечного автомата было бы сложным.

Так что я прошу С.О. гуру, дающие советы о том, как создать лучший и приятный код.

6
задан scooterman 23 November 2011 в 00:45
поделиться