Как правильно спроектировать «космический корабль»? Здравствуйте, это снова я. Есть космический корабль. Класс Ship. В нем лежит массив отсеков корабля. Класс Hardpoint. В каждом отсеке может быть установлено оборудование. Там такая схема - IEquipment - базовый абстрактный класс, определяет общие параметры вроде массы, размеров и т.д. Наследники IEquipment - типы оборудования, Generator, Engine и т.д. Ну и их экземпляры, лежащие в отсеках - конкретные модели этого оборудования.
Проблема в их действии. Простой пример - двигатель определяет скорость корабля (физика, прости). Соответственно чтобы внешние скрипты (движения в данном случае) узнавали скорость корабля пришлось разместить свойство Speed в главном классе (Ship), которое проходит по всем двигателям на корабле и считывает результирующую скорость с них. Проблема в том, что по ходу разработки добавляется множество новых свойств и все это висит в Ship. Это нормально или это плохая архитектура и нормальные люди делают все по другому? В общем, прошу гуру проанализировать это и вынести вердикт.

21 Авг 2019 в 07:07
199 +1
1
Ответы
1

По-моему, в вашем случае можно применить паттерн проектирования "Посетитель". Этот паттерн позволяет добавить новые операции к классам объектов, не изменяя их самодийный код.

Вы можете создать интерфейс Visitor с методами для обработки каждого типа оборудования. Затем создайте классы-посетители, реализующие этот интерфейс и содержащие логику для работы с конкретными типами оборудования.

Далее вам нужно добавить метод accept(Visitor visitor) в классы оборудования, чтобы они могли передать себя посетителю для обработки.

Таким образом, каждый раз, когда вам нужно обработать все типы оборудования на корабле, вы просто создаете нового посетителя и передаете его в метод accept каждого оборудования. Это позволит избежать загромождения класса Ship новыми методами и свойствами и сделает вашу архитектуру более гибкой и расширяемой.

20 Апр в 13:07
Не можешь разобраться в этой теме?
Обратись за помощью к экспертам
Название заказа не должно быть пустым
Введите email
Бесплатные доработки
Гарантированные бесплатные доработки
Быстрое выполнение
Быстрое выполнение от 2 часов
Проверка работы
Проверка работы на плагиат
Интересные статьи из справочника
Поможем написать учебную работу
Название заказа не должно быть пустым
Введите email
Доверьте свою работу экспертам
Разместите заказ
Наша система отправит ваш заказ на оценку 92 648 авторам
Первые отклики появятся уже в течение 10 минут
Прямой эфир