Простое решение распространенной проблемы

Как это происходит

В JavaScript легко создавать литералы объектов.

Может быть, слишком легко. Мы можем скопировать и вставить один литерал объекта, чтобы быстро создать массив игровых платформ.

Пока наши пальцы все еще на клавишах Cmd/Ctrl-V, давайте продолжим и создадим карту поддержки платформ для наших игр «Dungeon Crawly» и «Bullet Nightmare».

Легкий горошек, лимонный сок.

Нужно добавить недвижимость? JavaScript говорит: «Да!»

Это было быстро и легко. JavaScript делает многие вещи быстрыми и простыми, и это часть того, что делает его таким популярным языком программирования.

Но сейчас у нас есть некоторые проблемы. У нас есть дублированный код. Дублированный код — это плохо*. Литерал объекта для XBox полностью появляется в обеих играх (строки 10 и 18).

*There are exceptions. See When is it okay to duplicate code?

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

  1. Теперь нам нужно исправить написание Micrsoft в двух местах.
  2. Мы добавили свойство website в первое определение XBox, но пропустили второе.

Этот фрагмент кода было легко создать, но конечный результат раздут и его сложно поддерживать.

Как это исправить

Мы можем исправить дублирование кода и раздувание каталога поддерживаемых платформ. Это единственный источник правды для платформ.

Я называю их просто «каталогами объектов».

There are many ways to implement object catalogs. 
Here we’re using a map indexed by the platform "tag" property.
You might need look up objects in the catalog using different properties in different situations, .e.g., looking up platforms by the "manufacturer" or "category" properties. In this case, an array of objects might work better than a map.

Мы кратко ссылаемся на каталог на нашей карте поддержки платформ.

Если нам нужно обновить платформы, нам нужно сделать это только в одном месте: в каталоге. Давайте исправим эту опечатку и отсутствующие свойства website.

У нас больше нет дублирования кода, и наша карта поддержки платформ по-прежнему полностью функциональна. Предположим, мы хотим узнать, доступна ли «Bullet Nightmare» на десктопных платформах.

Каталог нашей платформы может расти по мере роста нашего приложения, но он остается надежным единственным источником достоверной информации.

Ищите возможности для создания каталогов объектов, когда видите коллекции литералов объектов. Повторяющиеся литералы объектов — верный признак того, что вам нужен каталог объектов.