Мне нередко снится кодирование. Я часто просыпаюсь со свежими идеями о чем-то, с чем я боролся накануне. Сегодня утром я проснулся от подобного сна; однако прозрение, которое оно вызвало, было намного сильнее, чем обычно.

Перед Богоявлением

Со временем я начал писать функции своим стандартным способом. Типичная функция будет выглядеть примерно так:

Этот пример только для того, чтобы дать вам представление о структуре. Теперь я промываю и повторяю это, создавая дополнительные функции, такие как getRecords, addRecord, updateRecord, deleteRecord и т. д.

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

Что еще хуже, я склонен менять свои стандарты. Это может быть такая глупость, как изменение catch (error) на catch (e). Затем срабатывает мое обсессивно-компульсивное расстройство, и следующее, что вы знаете, я потратил час, просто просматривая и внося это изменение повсюду.

После Богоявления

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

Давайте приступим к этому…

Во-первых, я подумал о том, что вы можете передать функцию как параметр другой функции. Поэтому я хотел посмотреть, смогу ли я стандартизировать свой метод try/catch блоков.

Теперь каждый раз, когда я хочу «обернуть» функцию в свой стандартный блок try/catch, я просто передаю функцию в свою функцию tryWrapper. Основные преимущества такого подхода:

  • Я больше не повторяю код try/catch в каждой функции.
  • Я могу изменить tryWrapper в любое время, и изменение будет отражено везде, где оно используется.

Затем мне нужно было добавить мой стандарт для регистрации сообщений. Единственная сложность здесь в том, что я хочу, чтобы имя основной функции отображалось в сообщении журнала. Для этого я создал объект, который будет содержать все мои «основные функции». Затем я создал logWrapper аналогично моему tryWrapper.

Заключение

Ух ты! Это придает совершенно новый смысл фразе: «Я могу делать это во сне!»

Именно так я и мечтал! Так много преимуществ в этом подходе:

  • Уменьшает количество кода
  • Сокращает время разработки
  • Упрощает устранение неполадок
  • Предоставляет расширяемую структуру (например, я мог бы добавить tryAsyncWrapper())
  • Реализует несколько принципов SOLID

Спасибо за ваше время! Я всегда ценю любую обратную связь!

Повышение уровня кодирования

Спасибо, что являетесь частью нашего сообщества! Перед тем, как ты уйдешь: