Я недавно прочитал сообщение в блоге « Три больших лжи», и мне трудно оправдать вторую ложь, которая цитируется здесь:
(ЛОЖЬ № 2) КОД ДОЛЖЕН БЫТЬ ПРОИЗВЕДЕН Вокруг модели мира
В коде нет никакого смысла в том, чтобы быть какой-то моделью или картой воображаемого мира. Я не знаю, почему это так привлекательно для некоторых программистов, но оно чрезвычайно популярно. Если в игре есть ракета, будьте уверены, что существует класс «Rocket» (при условии, что код - C ++), который содержит данные только для одной ракеты и выполняет непростые задачи. Не обращая внимания ни на то, что на самом деле делается преобразование данных, ни на расположение данных. Или, если на то пошло, без базового понимания, что там, где есть одна вещь, вероятно, больше, чем одна.
Несмотря на то, что для такого дизайна существует множество проблем с производительностью, наиболее важным является то, что он не масштабируется. Вообще. Сто ракет стоит в сто раз больше одной ракеты. И очень вероятно, что это стоит даже больше, чем это! Даже для непрограммиста это не должно иметь никакого смысла. Экономия от масштаба. Если у вас есть что-то еще, это должно стать дешевле, а не дороже. И способ сделать это - правильно спроектировать данные и сгруппировать вещи с помощью аналогичных преобразований.
Вот мои проблемы с этой ложью в частности.
В коде есть ценность быть моделью / картой воображаемого мира, так как моделирование воображаемого мира помогает (по крайней мере мне лично) визуализировать и организовать код.
Для меня класс "Ракета" является для меня совершенно правильным выбором. Возможно, «Ракеты» можно разбить на типы Ракет, такие как AGM-114 Hellfire и т. Д., Которые будут содержать силу полезной нагрузки, максимальную скорость, максимальный радиус разворота, тип цели и т. Д., Но все же каждая ракета должна иметь позицию и скорость.
Конечно, наличие 100 Ракет стоит более 1 Ракеты. Если на экране 100 ракет, для обновления их позиции необходимо выполнить 100 различных вычислений. Второй абзац звучит так, как будто он утверждает, что если существует 100 Ракет, то для обновления состояния потребуется менее 100 вычислений?
Моя проблема здесь в том, что автор представляет «ошибочную» модель программирования, но не представляет способ ее «исправить». Возможно, я прибегаю к аналогии с классом Rocket, но мне бы очень хотелось понять причины этой лжи. Какая альтернатива?