Группа друзей и я работали над проектом в последнее время, и мы хотели изобрести хороший ООП-способ представления сценария, специфичного для нашего продукта. По сути, мы работаем над пули-адом в стиле Тохоу , и мы хотели создать систему, в которой мы могли бы легко представить любое возможное поведение пули, которое мы могли бы придумать.
Так что именно это мы и сделали; мы создали действительно элегантную архитектуру, которая позволила нам разделить поведение маркера на различные компоненты, которые можно прикрепить к экземплярам маркера по своему желанию, что-то вроде системы компонентов Unity . Это работало хорошо, это было легко расширяемо, это было гибко и охватывало все наши базы, но была небольшая проблема.
Наше приложение также включает в себя большое количество процедурной генерации, а именно мы процедурно генерируем поведение пуль. Почему это проблема? Что ж, наше ООП-решение для представления поведения пули, хотя и элегантное, немного сложнее в работе без человека. Люди достаточно умны, чтобы думать о решениях, которые логичны и умны. Алгоритмы процедурного генерирования еще не настолько умны, и нам было трудно реализовать ИИ, который использует нашу архитектуру ООП в полной мере. Следует признать, что недостатком архитектуры является то, что она не интуитивна во всех ситуациях.
Таким образом, чтобы устранить эту проблему, мы в основном перенесли все варианты поведения, предлагаемые различными компонентами, в класс маркеров, чтобы все, что мы могли себе представить, предлагалось непосредственно в каждом экземпляре маркера, а не в других связанных компонентах. Это немного облегчает работу с нашими алгоритмами процедурного генерирования, но теперь наш класс пули - это огромный объект бога . На сегодняшний день это самый большой класс в программе, в котором кода в пять раз больше, чем всего остального. Это тоже немного сложно поддерживать.
Это нормально, что один из наших классов превратился в объект бога, просто чтобы было легче работать с другой проблемой? В целом, нормально ли иметь запах кода в вашем коде, если он допускает более простое решение другой проблемы?