Как правильно выстроить архитектура консольной игры?
Здравствуйте! Разработал консольную игру "Змейка", преподаватель сказал что нужно выстроить правильную архитектуру игры, для того чтобы она не зависела от консоли и можно было при надобности просто переделать на WinForm. Обязательное условие это использование делагатов и событий.
На сколько я понимаю архитектура должна быть такой:
Класс "Еда": генерация координат еды, отрисовка еды.
Класс "Препятсвие": генерация координат препятсвий, отрисовка препятсвий.
Класс "Змея": инициализация начальных координат змеи, изменение направления на 1 знакоместо(вверх,вниз,вправо,влево), и метод который увеличивает змею.
Класс "Игра": работает со всеми этими классами.
Проблема в том что выстраивание хорошей архитектуры, это пока что не самая сильная моя сторона. Подтолкните пожалуйста меня как правильно выстроить взаимодействие событий и классов.
Отделите логику от визуализации. То есть допустим есть класс змейки. У нее есть события перемещения. Подписываемся на события змейки. При срабатывании получаем её положение из передаем их во класс визуализации.
Для консоли это будет один класс, для winforms другой и т .д. Все классы визуализации должны будут реализовывать общий интерфейс.