Принцип единственной реализации


Всякий код описывает способ достижения определённой цели (алгоритм). Иными словами, код содержит в себе решение задачи, знание о том, как задача решается.

Например:

  • как вычислить корни квадратного уравнения
  • как почистить сообщение от запрещённых символов
  • как сделать видимым дропдаун на форме
  • как показать сообщение об ошибке валидации и т. д.

Суть принципа:

Знание о том, как решается каждая задача, должно присутствовать в коде ровно один раз.

Это значит, что когда мне по ходу алгоритма нужно показать дропдаун, я пишу не:

document.querySelector('.form .city-input .dropdown').classList.remove('.hidden');

а:

cityInput.showDropdown();

— то есть не вписываю реализацию показа дропдауна в каждое место, где мне это требуется. За счёт этого знание о том, как сделать дропдаун видимым, содержится в моём коде ровно один раз — в методе showDropdown.

Выгоды от единственной реализации:

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

Принцип единственной реализации по сути повторяет принцип DRY, Don’t repeat yourself. Однако, название «принцип единственной реализации» нравится мне больше, потому что в таком виде ясно указывает на смысл принципа.