Я знаю, что это было время регистрации, так как вопрос был задан, но для тех, кто нуждается в ответе, я предложу следующее:
1) Старайтесь избегать наследования связки, за исключением случаев, когда вы на 100% уверены, что вам нужно.
2) Учитывая данный пример, лучшая настройка будет выглядеть примерно так: у вас есть CreatureBundle
, который состоит в основном из абстрактных классов и интерфейсов. Сделайте так, чтобы каждый потомок связывался с CreatureBundle
, и реализуйте каждый Creature
специфический код с этими абстрактными классами и интерфейсами в CreatureBundle
.
Исходя из личного опыта, я могу сказать, что управлять зависимостями гораздо проще, чем управлять проблемами наследования в случае, если что-то пойдет не так. Если вам когда-нибудь понадобится изменить логику пакета-предка, вы сэкономите много времени, не тратя время на копирование унаследованного кода и изменяя одну и ту же логику в каждом пакете-потомке.
Редактировать: хотя мои предложения могут привести к более тесному взаимодействию и в основном противоречат последнему руководству Symfony по «наилучшим методам» (в котором говорится, что « один пакет на приложение » - это лучший метод), в конце концов, вы Вы поймете, что этот подход в конечном итоге облегчает обслуживание кода.