SOLID в разработке игр: Второй взгляд или Новая надежда

Всем привет,

После моего последнего поста о принципах SOLID в разработке игр, я задумался и пришел к выводу, что, возможно, я был слишком критичен в отношении SOLID. Я внимательно прочитал ваши комментарии и решил снова погрузиться в эту тему. Оказывается, SOLID не так плох для разработки игр, как я изначально предполагал. Все зависит от того, как вы понимаете и применяете эти принципы. В моем последнем посте, я, видимо, неправильно понял некоторые принципы и в итоге создал не совсем точное представление о SOLID в разработке игр. Спасибо тем из вас, кто указал на мои ошибки и поделился своими мыслями.

Тем не менее, после того как я закапался в форумы и статьи, я выявил некоторые ограничения SOLID. Это не универсальное решение для всех ситуаций в разработке игр. Вот несколько причин, почему принципы SOLID могут не всегда быть выгодны в разработке игр:

Производительность: Все мы знаем, что игры должны работать плавно. Некоторые принципы SOLID, например, принцип инверсии зависимостей, могут добавить дополнительные накладные расходы на память и процессор. Это особенно заметно в ситуациях, где нам нужно максимально использовать ресурсы для обеспечения высокой производительности. Например, применение принципа инверсии зависимостей может привести к большему количеству абстракций, что, в свою очередь, увеличивает потребление памяти и замедляет выполнение кода.

Гибкость против сложности: SOLID поощряет гибкость, но иногда это приводит к ненужной сложности. Игры часто имеют уникальные системы, которые не нуждаются в большой гибкости или повторном использовании. Например, система боев может быть специфической для каждой игры и не требовать повторного использования. Переусложнение этих систем для соответствия принципам SOLID может только усложнить вещи.

Итеративная разработка: Разработка игр часто включает в себя много итераций и экспериментов. Вы можете переписывать или вовсе отказываться от кода много раз на протяжении процесса разработки. Затраты времени на то, чтобы сделать ваш код SOLID с самого начала, могут не окупиться, если вы в итоге выбросите его. Особенно это актуально в быстро меняющихся проектах, где требуется быстро экспериментировать и итерировать идеи.

Жизненный цикл объектов: В разработке игр объекты часто имеют другой жизненный цикл по сравнению с обычными программами. Они могут быть созданы и уничтожены много раз во время работы игры. SOLID может не работать так хорошо, если вы не учитываете эти уникальные требования к жизненному циклу. Например, в играх с большим количеством объектов на экране, использование принципа открытости/закрытости может увеличить сложность управления жизненным циклом объектов и повлиять на производительность.

Практичность и скорость: Иногда, особенно в маленьких проектах или когда у вас ограниченные сроки, просто нужно сделать работу, даже если это не строго соответствует принципам SOLID. В этих случаях, принципы SOLID могут восприниматься как нечто, что замедляет процесс, а не помогает.

Так что да, SOLID не всегда выгодно применять в разработке игр, но это не всегда плохо. Помните, эти принципы - это просто руководства, а не жесткие правила. Главное - знать, когда их использовать, а когда - нет. Это искусство программирования - знать, когда следовать принципам и когда от них отступать. Я также хочу поблагодарить опытных разработчиков AAA, которые поделились своими мыслями. Они указали на то, что хотя многие знают о SOLID, не все его используют. А я пойду дальше учиться и читать ваши полезные комментарии.Всем спасибо!

6.2K6.2K показов
760760 открытий
30 комментариев

Комментарий недоступен

Ответить

Про повторное использование это актуально когда ты делаешь 50 гк, и в каждом гк начинаешь писать как в примере боевку по солиду, вместо того что бы сделать ее очень простой закрыть глаза на солид и пихать везде. Плохо это ? ДА
Работает это ? ДА
Принцип открытости/закрытости может повысить сложность управления жизненным циклом игровых объектов. Это связано с тем, что соблюдение этих принципов часто подразумевает создание большего количества классов и интерфейсов, что может сделать код более сложным и трудным для управления.
Про инверсию и комментарий тебе написали, и я ниже объяснил.

Ответить

Про инверсию - полагаю автор имел в виду, что виртуальные вызовы чуть медленнее чем напрямую. Но разница заметна далеко не везде

Ответить

Текст писал чат гпт, без шуток. У текстов чатгпт очень явные паттерны. И в списках всегда не больше 5 пунктов.

Ответить

tl;dr

Любой набор рекомендаций и принципов это всего лишь абстрактный набор рекомедаций и принципов, своего рода coding rules, но общеизвестный.
Если вся кодовая база твоя - пиши ее как хочешь, сопровождать ее тебе.
Если же код пишет команда - то удобнее чтоб все написанное имело общий подход к написанию. Кроме основной функции - исполняться - у кода есть еще функция поддерживаться, расширяться и улучшаться, не стоит о ней забывать

Ответить

Добавлю что абсолютно поебать каких принципов ваша команда придерживается, главное чтобы одинаковых.

Ответить

Ну я думал что я смог в статье отразить то что это принципы и некий набор рекомендаций, просто за одно хотел рассказать про подводные камни которые раскопал пока изучал SOLID после прошлой стати. Мне кажется мою статью не правильно поняли

Ответить