Архитектурные решения
Как вы видите, паттерн Подкласс песочница (Subclass
Sandbox) достаточно «мягкий». Он описывает основную
идею, а не детали механики. А значит, каждый раз, ко-
гда вы его применяете, вам придется принимать нестан-
дартные решения. Вот несколько вопросов, которые сто-
ят вашего рассмотрения.
Какие операции предоставить?
Это самый важный вопрос. Он напрямую влияет
на то, насколько паттерн будет удобен и полезен. Одна
из крайностей реализации: базовый класс не предостав-
ляет
никаких
операций. Только метод песочницы. Чтобы
Ранее я предлагал под-
ход на основе данных.
Это могло отбить у вас
желание что-либо де-
лать. Если поведение
достаточно сложное
и императивное, то его
труднее будет реализо-
вать через данные.
240
Подкласс песочница (Subclass Sandbox) —
Паттерны программирования игр
его реализовать, вам придется обращаться к системам
за пределами базового класса. Но если вы так поступите,
то, получается, вы уже не используете данный паттерн.
Другая крайность: базовый класс включает
все
опера-
ции, которые могут понадобиться подклассам. Подклас-
сы связаны
только
с базовым классом и не обращаются
ни к каким другим системам за его пределами.
Между двумя вариантами существует промежуточ-
ная точка, в которой одни операции предоставляются
базовым классом, а к другим подкласс обращается на-
прямую через внешние системы. И чем больше опера-
ций вы предоставляете, тем меньше подклассы связаны
с внешними системами, но тем
более
с ними связан ба-
зовый класс. То есть вы уменьшаете зависимость произ-
водных классов, перемещая ее (зависимость) в сам ба-
зовый класс.
Хороший вариант, если у вас множество производ-
ных классов, каждый из которых связан с внешними си-
стемами. Реализуя зависимость через предоставляемые
операции, вы централизуете ее в одном месте — базо-
вом классе. Но чем чаще вы так поступаете, тем слож-
нее становится поддерживать этот единственный класс.
Итак, где провести черту? Вот несколько практиче-
ских советов.
• Если предоставляемая операция используется
небольшим количеством из производных клас-
сов, то дело не стоит ваших усилий. Вы увеличите
сложность базового класса, который влияет на все
производные, а получите преимущество всего для
пары подклассов.
Возможно, имеет смысл согласовать эти опера-
ции с другими или даже просто позволить произ-
водным классам напрямую обращаться к внешним
системам. Так будет проще и понятнее.
• Если вы обращаетесь к методу из другой части
игры, то лучше, если метод вообще не будет из-
менять состояния. Это по-прежнему зависимость,
В частности, это озна-
чает, что в каждом файле
кода для подкласса по-
надобится всего один
#include
, для его ба-
зового класса.
Do'stlaringiz bilan baham: |