Преждевременная абстракция против YAGNI в нескольких похожих проектах

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

Поэтому я начал с нуля, писать код, который отвечал бы требованиям игры, которую я имел в виду (и только эту игру). Я все еще создавал абстракции, но только тогда, когда эта игра сама нуждалась в этом. Я очень доволен этим способом ведения дел. Я чувствую, что код находится на правильном уровне абстракции, который необходим для рассматриваемой игры.

Мой вопрос: как эта методология подходит, когда есть несколько похожих проектов? Допустим, я создал космическую игру с боковыми скроллерами. После того, как я закончу, я решаю сделать космический шутер с двойными ручками. В двух играх определенно будут общие элементы. Что было бы лучшим способом сделать это в свете ранее написанного кода? Я могу думать о нескольких возможностях:

  1. Игнорировать старый код Начните полностью с нуля снова.
  2. Позвольте мне скопировать и вставить часть старого кода и изменить его в соответствии с текущей игрой и только с текущей игрой.
  3. Возьмите старый код и обобщите его так, чтобы он мог вместить обе игры.

Подумав об этом, что, если сценарий немного изменился, и это была не новая игра. Что, если я решу, что в моей игре с боковой прокруткой есть несколько уровней-двойников? Похоже, в этом случае вариант 3 будет путь. Означает ли это, что вариант 3 - это путь, даже если это новая игра?

Снова немного изменив сценарий, что если бы это были две разные игры, но я работал над обоими проектами одновременно? Я неизбежно начал бы видеть сходство и возможности для абстракции. Должен ли я противостоять этой абстракции и сохранять код отличным и специфичным для каждой игры?

1 ответ

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

Если новая игра достаточно отличается, то вы бы начали с нуля.

Если достаточно просто скопировать и вставить код, тогда вы можете сделать это. Это зависит от содержания старой игры. Если вы окажетесь в ситуации, когда вам нужно будет поддерживать обе игры в течение определенного периода времени, то копирование-вставка - плохая идея, потому что вы должны помнить, что нужно вносить исправления в обоих местах. В этой ситуации предпочтительным может быть вариант 3 - обобщение для платформы, чтобы вы могли вносить исправления в платформу.

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

Последний фактор - время запуска. Копирование может быть медленным и глючным. Это не может быть проблемой, если вы планируете сделать только одну игру. Некоторые компании специализируются на игровых "продуктовых линейках", где они выпускают новые игры каждые несколько месяцев (хороший пример - Telltale). В этих ситуациях лучше разработать "движок", и вы создаете новые игры, просто подключая новый контент.

Вы упомянули, что делаете это как хобби. В этом случае ничего из этого не имеет значения, потому что 90% решений исходит из бизнес-модели и только 10% из технических факторов.

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

Другие вопросы по тегам