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

Что слишком много для передачи данных через внедрение зависимостей?

12

Тема внедрения зависимостей уже некоторое время обсуждается в кругах объектно-ориентированного программирования. Иногда мы видим это в WordPress; иногда нет.

Я фанат этого, но, честно говоря, я не всегда уверен, сколько информации вводить в класс. Я имею в виду, предположим, что у нас есть два класса, и один содержит информацию, которая нужна другому.

  • Мы не внедряем класс в другой класс?
  • Вводим ли мы только часть информации (будь то строка, целое число, структура данных или что-то еще) в другой класс?

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

  • Вы создаете метод в одном классе и передаете его в другой?
  • Вы передаете в него часть частной или защищенной информации?

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

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

Начнем с того, что у нас есть основной файл класса плагина, и этот класс отвечает за сохранение такой информации, как:

  • путь к плагину,
  • URL-адрес плагина,
  • загружен ли плагин,
  • экран, который просматривается в данный момент,
  • и классы, которым он должен транслировать (например, pub/sub) определенные фрагменты информации.

Возможно, скелет или заглушка класса могут выглядеть так :

<?php

class Plugin
{
    protected $plugin_path;

    protected $plugin_url;

    private $loaded;

    public function __construct($file)
    {
        $this->loaded         = false;
        $this->plugin_path    = plugin_dir_path($file);
        $this->plugin_url     = plugin_dir_url($file);
    }

    public function isLoaded()
    {
        return $this->loaded;
    }

    public function load()
    {
      // ...
    }

    private function isCurrentAdminStatus()
    {
      // ...
    }

    public function getSubscribers()
    {
        return [
          new OtherPluginClass(...)
        ];
    }
}

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

Если бы это было так, то это могло бы выглядеть так :

<?php

class Plugin
{
    protected $plugin_path;

    protected $plugin_url;

    private $loaded;

    public function __construct($file)
    {
        $this->loaded         = false;
        $this->plugin_path    = plugin_dir_path($file);
        $this->plugin_url     = plugin_dir_url($file);
    }

    public function isLoaded()
    {
        return $this->loaded;
    }

    public function load()
    {
      // ...
    }

    private function isCurrentAdminStatus()
    {
      // ...
    }

    public function getSubscribers()
    {
        return [
          new OtherPluginClass($this)
        ];
    }
}

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

Допустим, мы хотим сделать шаг назад и просто передать одну из частных частей информации. Это просто, верно? В итоге это выглядит примерно так :

<?php

class Plugin
{
    protected $plugin_path;

    protected $plugin_url;

    private $loaded;

    public function __construct($file)
    {
        $this->loaded         = false;
        $this->plugin_path    = plugin_dir_path($file);
        $this->plugin_url     = plugin_dir_url($file);
    }

    public function isLoaded()
    {
        return $this->loaded;
    }

    public function load()
    {
      // ...
    }

    private function isCurrentAdminStatus()
    {
      // ...
    }

    public function getSubscribers()
    {
        return [
          new OtherPluginClass($this->plugin_path)
        ];
    }
}

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

Для этого мы просто определяем метод, обрабатываем информацию, а затем передаем возвращаемое значение в класс, которому нужна информация :

<?php

class Plugin
{
    protected $plugin_path;

    protected $plugin_url;

    private $loaded;

    public function __construct($file)
    {
        $this->loaded         = false;
        $this->plugin_path    = plugin_dir_path($file);
        $this->plugin_url     = plugin_dir_url($file);
    }

    public function isLoaded()
    {
        return $this->loaded;
    }

    public function load()
    {
      // ...
    }

    private function isCurrentAdminStatus()
    {
      // ...
    }

    public function getSubscribers()
    {
        return [
          new OtherPluginClass($this->isCurrentAdminStatus())
        ];
    }
}

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

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

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

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