✅ Новости WEB и WordPress, темы, плагины. Здесь мы делимся советами и лучшими решениями для веб-сайтов.

Одиночки в WordPress, новый взгляд (время и место?)

29

Прежде чем я начну рассказывать об использовании синглетонов в WordPress (или, что более уместно, о шаблоне синглтона ), я хочу убедиться, что вы прочитали следующие две статьи:

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

Я так не думаю.

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

И хотя я определенно использовал их в прошлом, я обычно прекращал. Однако недавно я наткнулся на вариант использования для проекта, в котором я считаю это приемлемым.

Все еще используете синглтоны в WordPress?

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

  • Существует административная страница, которая позволяет пользователю выбирать, как он хотел бы отображать даты в интерфейсе сайта.
  • Когда пользователь сохраняет параметр, он запишет формат даты на основе PHP в таблицу в WordPress.
  • При отображении даты значение будет извлечено из базы данных и применено к дате, которая должна быть отображена.

А для тех, кому любопытно, есть всего несколько — скажем, четыре или пять — способов, которыми мы позволяем пользователю отображать дату.

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

Естественно возникает вопрос:

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

И это потому, что пользователь может изменить способ отображения даты после импорта CSV.

С учетом сказанного, в плагине есть целый другой механизм, отвечающий за проверку, очистку и запись пользовательского ввода в базу данных.

Но когда приходит время получать значения из базы данных, особенно когда это происходит в форме чтения значения из таблицы базы данных, и делать это в нескольких точках по всему приложению, не имеет ли смысл иметь единственную точку из какое значение можно вывести?

Высокоуровневый взгляд на то, как это работает.

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

  1. читая вариант,
  2. убедитесь, что он установлен,
  3. определение значения по умолчанию, если оно не установлено,
  4. и вернуть значение?

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

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

Другими словами, он несет полную ответственность за получение информации и ее возврат. Вот и все. Ничего больше.

Пример реализации

Итак, на что это может быть похоже? Вот грубая реализация для разговора:

<?php

class Date_Formatter {

    private static $instance;

    private function __construct() {
    }

    private static function get_instance() {

        if (null === self::$instance) {
            self::$instance = new self;
        }

        return self::$instance;
    }

    public static function get() {

        self::get_instance();

        $default_format = 'm/d/Y';
        $format = get_option( 'yhd_directory_importer', false );
        if (false === $format) {
            return $default_format;
        }

        $format = $format['date'];
        $format = (isset( $format) && isset( $format['format']) )? $format['format']: $default_format;

        return $format;
    }
}

Как видите, он выполняет все вышеперечисленные пункты. То есть он считывает данные, устанавливает значение по умолчанию, а затем возвращает его.

Этот класс не делает ничего, кроме чтения и возврата определенного набора данных.

Предупреждение о кэшировании

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

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

Подождите, так быть не должно!

Я знаю я знаю. Псих! Я считаю, что это правильная терминология, но давайте придерживаться профессионального подхода.

До этого момента весь пост говорил о том, почему вы можете захотеть исследовать использование синглетонов в WordPress, чтобы у вас был способ легко извлекать информацию, используя последовательно объектно-ориентированные принципы.

Но я все же не думаю, что здесь нужно использовать синглтон в WordPress. По крайней мере, я думаю, что статическая функция просто прекрасна. И единственная причина, по которой я думаю, что это нормально, заключается в том, что создание экземпляра класса каждый раз, когда вам нужно получить доступ к функции, которая извлекает данные, которые не будут изменяться внутри класса, является излишним.

Так на что это похоже?

<?php

class Date_Formatter {

    public static function get() {

        $default_format = 'm/d/Y';

        $format = get_option( 'yhd_directory_importer', false );
        if (false === $format) {
            return $default_format;
        }

        $format = $format['date'];
        $format = (isset( $format) && isset( $format['format']) )? $format['format']: $default_format;

        return $format;
    }
}

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

Но я открыт, чтобы убедиться в обратном.

Мысли более опытных разработчиков?

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

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

Вместо этого меня интересуют способы справиться с этим за пределами того, что здесь представлено. Или, скорее, просто ваш взгляд на то, что вы видите.

Источник записи: tommcfarlin.com

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