Я не был удовлетворен тем, что мой код GUI был достаточно хорош, чтобы подвести черту под ним, и я хотел еще немного поработать над ним с одним из мастеров. Поэтому я заручился их помощью, и мы обсудили, что мне не нравится в коде. Я знал, что должен быть другой способ обработки событий, полученных обработчиками событий, поскольку то, на чем я остановился, казалось вынужденным.

Поделившись моим UML, мы обсудили мои опасения, и он подтвердил мои подозрения: регистрация ClickableElements с их ClickEventHandler выглядела так, как будто это делалось не в том месте.

Класс TTTController отправлял запрос в GUIDisplay для отображения элементов JavaFX в окне, затем управление передавалось обратно в TTTController. Затем TTTController попросил объект EventRegister связать кнопки с обработчиками событий.

Проблемы с этим заключались в том, что 1) концептуально казалось странным, что ClickableElements не были «регистрированы» с их обработчиками событий в момент их создания, и 2) это означало, что контроллер должен знать о классах JavaFX, которые действительно должны быть изолированы от кода графического интерфейса.

Проблема в том, что обработчики событий должны вернуть управление TTTController после того, как они были «запущены». Это означает, что TTTController должен передать себя EventHandler. Это была часть моего дизайна, с которой у меня все время были проблемы, поскольку я не мог понять, как передать управление обратно контроллеру другим способом.

Затем мы поговорили о шаблоне Observer и о том, что в Java есть классы Observable и Observer, которые могут помочь. Однако моя пара сказала, что мы должны исследовать, потому что может быть другой путь.

На этом мы и остановились, и я до сих пор не уверен, какое решение лучше. Я думаю, что, возможно, TTTController на самом деле не так уж много делает, поэтому, возможно, вместо этого GUIDisplay должен содержать ссылку на контроллер, однако, если бы я хотел SwingGUIDisplay, я не уверен, что это хороший выбор дизайна. Хм… продолжение следует..