После создания подкласса GridPane с именем JavaFxGameOptionsComponent для представления начального окна GameOptions стало ясно, что было бы более последовательно, если бы я провел рефакторинг класса GUIView, чтобы выделить аспекты GameLayout в JavaFxGameLayoutComponent. Это также означало, что класс BoardDisplay, который использовался GUIView, мог быть реорганизован в JavaFxBoardComponent, подкласс JFX GridPane, а затем использоваться JavaFxGameLayoutComponent. Это было удивительно просто сделать.

Я начал с TDD для компонента JavaFXBoardComponent и встраивания его функциональности. Я решил, что сейчас самое время перенести регистрацию EventHandler из GUIView в JavaFXBoardComponent. Это означало принятие решения внедрить объект NewPlayerMoveEventHandler в JavaFxBoardComponent, а не компоновать его внутри. Я подумал, что это хорошая идея после того, как пришел к этому через тесты: я хотел проверить, что EventHandler был настроен, но это было сложно без двойного теста EventHandler, но потом я подумал о DIP и решил, что это лучше таким образом, если позже потребуется использовать другой EventHandler.

Затем я выполнил TDD для JavaFxGameLayoutComponent и убедился, что перенес тесты из GUIView, связанные с Layout и Board, в два новых класса.

Все эти изменения еще не влияли на существующий код GUIView, поэтому я все еще был зеленым. Теперь я хотел подключить свой новый компонент JavaFXGameLayoutComponent к GUIView, что было простым изменением в одну строку, и о чудо, он сразу заработал! Удивительный!