Применимы ли в реальном мире фронтенда порождающие паттерны программирования?

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

Дополнительно:

Создание объекта фабрикой - наилучший способ для JS. Без всякого мусора, вроде "class", "Object.create" и прочего.

  • Применимы, но очень ограниченно, и смотря какой фреймворк используется у vue 3 и react кажется с 18 версии более удобно использовать хуки, превращать их в фабрики на мой взгляд бессмысленно лучше упороться в архитектуру разделенную на слои. Последний раз когда писал код подобными паттернами, была обертка над axios
  • VolgaVolga, WapSter, я вот к чему - понятно, что примеры использования любого паттерна можно найти в джаваскрипт. Но - по факту сейчас практически никто не пишет на нативном JS, пишут на фреймворках, на что ссылается WapSter. Сейчас для написания чистого кода не достаточно ли сосредоточиться на лучших практиках стека используемых технологий? Возьмем к примеру редакс. Он является воплощением поведенческого паттерна observer. Окей. Но какая вероятность того, что в реальном проекте я хлопну себя рукой по лбу и воскликну "о, да тут нужно писать по обсерверу"? И с каждым паттерном так. Насколько я сейчас вижу, знание паттернов - окей, для общего развития и только. Все остальное - изучение стека.
    Да, наверняка знание/понимание паттернов может пригодиться для конструирования новых фреймворков/технологий, до чего рядовым разработчикам ооооочень далеко.
  • Kentavr16, ну смотрите. Возьмём вымышленного Васю говнокодера. Он пока один и говнокодит на чистом JS как ему видится. Через полгода в команду приходит Петя. Чтобы разобраться в говнокоде Васи нужно время и много, потому что Вася наговнокодил как ЕМУ видится, а не используя общепринятые практики и паттерны. Вот если бы Вася придерживался SOLID, использовал популярные паттерны (где это уместно), то Петя гораздо быстрее разобрался бы, потому что он тоже читал про паттерны и знает как они работают.
    Это навскидку про пользу паттернов))
  • Kentavr16,

    никто не пишет на нативном JS, пишут на фреймворках,

    React и Vue, скорее, библиотеки. И даже использование фреймворков не заменяет необходимость писать по-человечески.

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

  • Алексей Ярков, Окей. Вот список основных порождающих паттернов(взят с сайта рефакторинг гуру);
    -фабрика
    -абстрактная фабрика
    -строитель
    -прототип
    -одиночка(синглтон).
    Как я прокачаю себя при их изучении (учитывая что в данный момент интересуюсь веб-разработкой). Фабрика - допустим, в комменте выше пример реального использования. А остальные? Ну еще принцип синглона может быть полезным. Можно также задаться вопросом и с поведенческими паттернами.

    Я понимаю что код должен быть структурирован и подчиняться определенным правилам. И все это можно часто почерпнуть из доков используемого инструмента. Но вот эти основополагающие паттерны звучат как теоретическая теория.
    Я попробую перефразировать - Вы их используете на практике? Осознанно, так чтобы ткнуть и сказать - вот это я сделал потому что (название паттерна)?

    Мне в данный момент это напоминает урок географии, на котором нужно выучить столицы стран "просто потому что". Потому что на условном собеседовании могут задать вопрос.
    P.S. - Ответ действительно крайне интересует. Не первый раз возвращаюсь к этому вопросу по ходу своего обучения.

  • Kentavr16,

    -абстрактная фабрика

    В целом имеет не так много применений и часто это оверинжиринг.

    -строитель

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

    -прототип

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

    Но вот эти основополагающие паттерны звучат как теоретическая теория.

    Дело в том, что для разных языков применяют разные паттерны. Фабрику любят в яве, в го я чаще встречал билдер/декоратор. В js любят интерсепторы.

    Осознанно, так чтобы ткнуть и сказать - вот это я сделал потому что (название паттерна)?

    Ну например интерсептор, его можно использовать, чтобы выборочно/невыборочно вставлять дополнительные
    данные в запросы. Это полезно в ситуации когда у тебя есть 20 запросов на бэк, и чтобы не определенную писать логику 20 раз, ты выносишь обобщенную логику в интерсептор - это довольно упрощенное описание (мб не совсем верное), но суть в том, что паттерн полезный.
    По сути никто не заставляет использовать тебя паттерны и их не нужно учить, в какой-то момент ты скорее всего сам поймешь, что скорее всего для задачи есть паттерн или стандартное решение. Ну и если на твой взгляд паттерн не нужен в коде, то лучше не применяй его.

    Мне в данный момент это напоминает урок географии, на котором нужно выучить столицы стран "просто потому что".Потому что на условном собеседовании могут задать вопрос.

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

  • calculator212, да,спасибо. На данном этапе я пришел к такому же выводу - ознакомиться с теорией,но не делать на ней каких-либо акцентов. А за рекомендацию спасибо - сейчас в море источников вроде "программирование для чайников за 15 минут" порой действительно сложно найти хорошую книгу. Ознакомлюсь обязательно.
  • Выбирая самое на мой взгляд существенное из комментариев -

    Применимы, но очень ограниченно, и смотря какой фреймворк используется у vue 3 и react кажется с 18 версии более удобно использовать хуки, превращать их в фабрики на мой взгляд бессмысленно лучше упороться в архитектуру разделенную на слои. Последний раз когда писал код подобными паттернами, была обертка над axios

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

     

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

     

      • Применимы ли в реальном мире фронтенда порождающие паттерны программирования?Есть ответ
      • 08.04.2024
      Ответить

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

      Некоторые из наиболее часто используемых порождающих паттернов в фронтенде:

      1. Фабричный метод (Factory Method) - позволяет создавать объекты без указания конкретного класса объекта, делая процесс создания объектов более гибким и расширяемым.

      class ButtonFactory {
          public function createButton($type) {
              if ($type === 'submit') {
                  return new SubmitButton();
              } elseif ($type === 'reset') {
                  return new ResetButton();
              } else {
                  return new Button();
              }
          }
      }

      2. Одиночка (Singleton) - гарантирует, что у класса есть только один экземпляр и предоставляет глобальную точку доступа к этому экземпляру.

      class Singleton {
          private static $instance;
       
          private function __construct() {}
       
          public static function getInstance() {
              if (self::$instance === null) {
                  self::$instance = new self();
              }
              return self::$instance;
          }
      }

      3. Строитель (Builder) - позволяет создавать сложные объекты пошагово, разделяя процесс создания объекта от его представления.

      class PizzaBuilder {
          private $pizza;
       
          public function __construct() {
              $this->pizza = new Pizza();
          }
       
          public function addTopping($topping) {
              $this->pizza->addTopping($topping);
          }
       
          public function build() {
              return $this->pizza;
          }
      }

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

    Оставить комментарий