Использовать шаблон нулевого объекта, а не блоки Try/Catch

May 01 2023
Шаблон пустого объекта — это шаблон проектирования, используемый для обработки случая, когда объект имеет значение null или не определен. Основная идея шаблона заключается в создании нулевого объекта, который имеет тот же интерфейс, что и исходный объект, но ничего не делает при вызове его методов.

Шаблон пустого объекта — это шаблон проектирования, используемый для обработки случая, когда объект имеет значение null или не определен. Основная идея шаблона заключается в создании нулевого объекта, который имеет тот же интерфейс, что и исходный объект, но ничего не делает при вызове его методов. Это избавляет от необходимости проверять нулевые объекты в коде и упрощает дизайн.

Если мы не знаем шаблон нулевого объекта, мы напишем код для обработки сценариев ошибок с помощью try/catchметода, как показано ниже:

Вывод приведенного выше кода:

An error occurred creating the account: Username is required

Проблема приведенного выше кода заключается в следующем: каждый раз, когда мы используем create_account, мы должны использовать try/catchдля захвата исключений. Если нам придется использовать create_accountмного раз в некоторых проектах, с этим станет довольно сложно иметь дело.

Как решить вышеуказанную проблему с попыткой/поймой?

Именно тогда вступает в действие шаблон нулевого объекта. Давайте расширим приведенный выше случай для более практического использования.

Если мы используем try/catchблок для возбуждения исключений:

Чтобы использовать шаблон нулевого объекта:

После описанного выше рефакторинга мы упростили calculate_total_balanceфункцию, используя шаблон нулевого объекта class NullAccount. Нам просто не нужны tryблоки для обработки ошибок, и мы можем предположить, что они Account.from_stringвсегда будут возвращать действительный объект.

Это позволяет клиентскому коду обрабатывать нулевой объект как реальный объект, без необходимости постоянно проверять значения Noneили значения. nullНулевой объект обеспечивает безопасное поведение по умолчанию, и его можно использовать в качестве заполнителя до тех пор, пока не станет доступен реальный объект.

Почему в Go нет шаблона нулевого объекта?

В Go принято возвращать из функции несколько значений, причем второе значение является логическим значением, указывающим на успех или неудачу. Этот шаблон называется «запятая-ок» или «кортеж». Например, функция, которая ищет ключ на карте, может возвращать значение и логическое значение, указывающее, был ли ключ найден или нет. Этот подход устраняет необходимость в шаблоне нулевого объекта.

Кроме того, в Go есть встроенное nilзначение, которое можно использовать для обозначения отсутствия или отсутствия значения. Go рекомендует использовать это nilзначение вместо введения шаблона нулевого объекта, поскольку это упрощает код и снижает сложность.