Laravel урок №25: [ Что такое Репозиторий? #1 ]

Поділитися
Вставка
  • Опубліковано 11 лют 2019
  • Рассмотрим в серии видео так назваемые РепозитОрии (РепозитАрии). Перед тем как приступить к их внедрению, надо дать им определение и выяснить - так что же это такое - репозитории (шаблон проектирования)
    Видеокурс по изучению фреймворка Laravel (5.7.2 - 5.7.25)
    #laravel #видеокурс #шаблоны_проектирования
    Автор: Дмитрий Афанасьев.
    Плейлист курса: goo.gl/jzfKeP
    Канал: goo.gl/3gMEeU
    www.donationalerts.ru/r/dmitr...
    Выразить благодарность, поддержать донатом развитие канала.

КОМЕНТАРІ • 74

  • @DmitryAfanasyev
    @DmitryAfanasyev  5 років тому +10

    Это ПЕРВОЕ видео про репозитории. Видео получилось излишне продолжительным и по сему пришлось его порезать на 3(!) части.

  • @user-bk3zk7lr8d
    @user-bk3zk7lr8d 2 роки тому +4

    3 видео "что такое репозиторий?", - это фундаментальный подход!
    Еще раз спасибо! Все больше понимаю какую "дичь" я писал до ваших видео :)

  • @retvain
    @retvain 3 роки тому +9

    За историю отдельное спасибо)

  • @johnwick8332
    @johnwick8332 3 роки тому +3

    Нашлось свободное время, вернулся к Вашему курсу. Спасибо за уроки, продолжаем учиться!

  • @dmitryleiko2869
    @dmitryleiko2869 5 років тому +5

    Спасибо! Все четко и понятно.)

    • @DmitryAfanasyev
      @DmitryAfanasyev  5 років тому +4

      Еще 2 видео в продолжении этой темы

  • @DrZlad
    @DrZlad 4 роки тому +1

    Спасибо огромное!

  • @bobpps
    @bobpps 5 років тому +1

    Зачет!!!! Классно

  • @Artem-up5xw
    @Artem-up5xw 4 роки тому +1

    Спасибо, супер!

  • @user-uh1rm8py7b
    @user-uh1rm8py7b 5 років тому +1

    Спасибо

  • @evgeniysergeev2708
    @evgeniysergeev2708 3 роки тому +1

    Спасибо!

  • @OstapBrehin
    @OstapBrehin 5 років тому

    Thanks!

  • @user-ri8ow3qh7l
    @user-ri8ow3qh7l 2 роки тому

    Блин, ты такой крутой, спасибо тебе.

  • @Yurich84
    @Yurich84 4 роки тому +5

    Разве Eloquent это уже не уровень абстракции над базой данных? Если мы решим сменить драйвер к примеру с MySQL на PostreSQL, то разве сменяться такие методы как find, get, all, join, where?
    Возможно что-то поламаеться (сырые запросы, миграции, нестандартные ситуации), но репозиторый разве может помоч в даной ситуации?

  • @Andrew-qj6rf
    @Andrew-qj6rf 5 років тому

    Сказать честно, сперва не особо вкурил для чего нужны репозитории, но мне помогли примеры отсюда - vegibit.com/laravel-repository-pattern. А автору - огромное спасибо за уроки !

  • @user-nl6uj2dt2o
    @user-nl6uj2dt2o 2 роки тому

    "а может быть ноль?!" - смешно было)

  • @kirillkarpin724
    @kirillkarpin724 Рік тому +2

    Честно говоря так и не понял, чем удобнее после репозитория юзать where() и т.д. и чем это поможет при смене DB

  • @EdwardNorthwind
    @EdwardNorthwind 4 роки тому +2

    Иногда это не от тебя зависит, заказчику просто пришло в голову пересесть с MySQL на PostgreSQL, и всё -- сиди пересаживай))))

  • @EugeneChe-81
    @EugeneChe-81 4 роки тому +3

    10:58 ставим скорость 2х 😂

  • @aleksk9652
    @aleksk9652 5 років тому +2

    Привет. А если допустим тебе надо выбрать из базы категории/подкатегории - сджойнить несколько таблиц - сделать меню, которое на сайте на всех страницах выводится. На нескольких видах страниц одно и то же меню. Ты же не будешь вызывать из всех контроллеров портянку запросов с where и join всякими - надо же куда-то вынести этот запрос на выборку для меню. Куда его вынести - в метод самой модели? Я думал, что репозитории и существуют для того, чтобы в них такое писать, разве нет?

    • @limxn3719
      @limxn3719 5 років тому

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

    • @DmitryAfanasyev
      @DmitryAfanasyev  5 років тому

      Подобные вещи будут рассмотрены в курсе. Решения есть.

    • @medvedvshapke
      @medvedvshapke 5 років тому

      для такого случая с меню есть view composer

    • @Yurich84
      @Yurich84 4 роки тому

      В Сервис провадер можно вынести, например в АппСервис провадер метод бут. типа так \View::share('var', $var);

    • @devnull5762
      @devnull5762 Рік тому

      @@DmitryAfanasyev конечно есть - репозиторий)

  • @armenmarabyan7117
    @armenmarabyan7117 4 роки тому +1

    Вхэре)))

  • @snoopy9116
    @snoopy9116 5 років тому +2

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

    • @DmitryAfanasyev
      @DmitryAfanasyev  5 років тому

      А ты пропускал? 😀

    • @snoopy9116
      @snoopy9116 4 роки тому +1

      @@DmitryAfanasyev ну так как я немного уже знаком с MVC и ларкой, то мне казалось что все очень просто, но в дальнейшем появились непонятки, и я опять убеждаюсь что пока не проделаешь сам - не запомнишь

  • @romanbush5164
    @romanbush5164 Рік тому +1

    если бы можно было свентить с подобия орм Eloquent , на что то вроде Django было бы круто. А то задолбало SQL запросы писать и редачить

  • @user-sj1it5vp5f
    @user-sj1it5vp5f 5 років тому

    Приветствую Дмитрий!
    Если найдётся немного времени, напиши пожалуйста команды - которыми ты создал Репозитории !
    Необходимо добавить в composer.json что-то ? в ветку - - dev
    И выполнить какую-то команду по созданию php artisan make....... ?

    • @DmitryAfanasyev
      @DmitryAfanasyev  5 років тому

      Руками создавал... Всё в видео. Ничего не вырезано. В ларе нет команды для создания репозитория. И понятия такого нет.

    • @user-sj1it5vp5f
      @user-sj1it5vp5f 5 років тому

      Огромное спасибо за ответ!
      Но вот на ГитХабе есть следующее:
      composer require jason-guru/laravel-make-repository --dev
      и команда Артисана
      php artisan make:repository UserRepository
      Так лучше не делать?

    • @DmitryAfanasyev
      @DmitryAfanasyev  5 років тому +1

      Это не совсем то. Ты привел в пример некий чужеродный пакет для Ларавел. ЭТО СТОРОННИЙ ПАКЕТ. Как он работает и какие именно задачи выполняет - мне не ведомо. Ясно дело что скорее всего реализовывает паттерн Репозиторий - но какую именно интерпретацию - не знаю(и не интересно). В курсе этот пакет использоваться не будет.

    • @user-sj1it5vp5f
      @user-sj1it5vp5f 5 років тому

      Спасибо ещё раз огромное!
      Всё сделал руками и всё ок, здесь главное понять суть! Реализаций репозиториев несколько, нашёл в сети разные по методу реализации, но суть у них одна - быть прослойкой между логикой и хранилищем данных (не обязательно MySQL и другие)

  • @director74
    @director74 4 роки тому +2

    Уволили того разработчика или оставили?))

  • @Skalebro
    @Skalebro 5 років тому

    Может выскажусь раньше времени, я еще не смотрел остальные части. У меня были ситуации, когда репозитории были излишне, например проект простой и там всего пару строк очевидных было, но это занимало время что бы зайти в каждый реп, посмотреть че же оно там делает.
    Но были ситуации когда были всякие сайты знакомств. Были на mysql, а потом проект вырос и перенесли сразу на Postgres и пришлось все эти репозитории перелопатить, потому что не каждый фреймворк при смене базы начинает интерпретировать команды к базе как надо в данном случае Like и ILike и такой фигни очень много, в таком варианте ты не можешь просто сменить прослойку, все равно приходится переписывать. А потом вообще решили морду сменить на JS фрейм и давай, лупи мне АПИ под всё и опять переписывать и интерпретировать в JSON.

    • @medvedvshapke
      @medvedvshapke 5 років тому

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

    • @DmitryAfanasyev
      @DmitryAfanasyev  5 років тому

      В модель эти методы можно писать исключительно если проект ооочень маленький. Ну прям совсем малюсенький. Иначе будут модели монсты....

    • @Skalebro
      @Skalebro 5 років тому

      @@DmitryAfanasyevФреймворки генерят уже сразу подобные методы в моделях или есть готовые надстройки в сервис локаторах(что в принципе антипатерн, но очень удобно). + почти все используют ленивую загрузку объектов и ORM(Doctrine) тянет информацию об Entity, но не делает агрегацаию в объекты. Это я к тому, что большинство обережет сам ORM.
      В любом случае, спасибо большое за уроки. Я много проектов больших доделывал на Symfony. Просто я слепо следовал документации не понимая зачем эти репозитории, слежения за объектами и т.д.

  • @ndiscovery
    @ndiscovery 5 років тому +21

    Так ничего толком и не обьяснил.

    • @DmitryAfanasyev
      @DmitryAfanasyev  5 років тому +4

      Это первое видео, впереди еще два... В описании же написано....

  • @yashkevich8164
    @yashkevich8164 3 роки тому

    Елисеевский подход или собственный?

    • @DmitryAfanasyev
      @DmitryAfanasyev  3 роки тому

      Не знаком с Елисеевским подходом. Впервые слышу.

  • @darkshaman766
    @darkshaman766 5 років тому +1

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

    • @DmitryAfanasyev
      @DmitryAfanasyev  4 роки тому +1

      Так он ничего плохого не написал. Не надо так остро реагировать. Ничего плохого в говнокод нет. Путь к хорошему коду лежит через тонны говнокода и никак иначе.

  • @digitalturkistan1857
    @digitalturkistan1857 2 роки тому

    видео хороши в хере 😁

  • @lik_ua
    @lik_ua 2 роки тому

    паа почему не методы в модели ? в чем отличия ?

  • @augcat50
    @augcat50 2 роки тому

    Что такое сэптимы? Интересное слово

    • @DmitryAfanasyev
      @DmitryAfanasyev  2 роки тому

      Основная валюта Тамриэля

    • @augcat50
      @augcat50 2 роки тому

      @@DmitryAfanasyev спасибо, буду знать)

  • @SupermariobrosRU
    @SupermariobrosRU 5 років тому +1

    Вместо репо можно использовать скоп в модели и все, любую логику прописать, модель и есть репо

    • @DmitryAfanasyev
      @DmitryAfanasyev  5 років тому +2

      Очень плохая практика. Толстая модель получится (мега -жирная). В таком случае вообще всё можно в сразу в контроллере херачить - чё бы нет-то! А когда корабль начнет тонуть - уволиться к херам :DDDD

    • @SupermariobrosRU
      @SupermariobrosRU 5 років тому

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

    • @lovelaravel1140
      @lovelaravel1140 4 роки тому

      @@DmitryAfanasyev А репозиторий тонкий получится? Какая разница толстый репозиторий или толстая модель? Или у Вас много репозиториев к одной модели?

    • @DmitryAfanasyev
      @DmitryAfanasyev  4 роки тому

      Если оставаться в базовой архитектуре проекта, то да, будет толстый (но это лучше чем толстая модель!). И если использовать модульность, то репозитории будут тонкими.

    • @lovelaravel1140
      @lovelaravel1140 4 роки тому +1

      @@DmitryAfanasyev А почему толстый репозиторий лучше толстой модели? Какая разница в модели куча кода или в репозитории тоже куча? Может лучше посмотреть по функциональности и разбить на несколько сервисов? Как я понимаю задача - не утонуть в коде? Я посмотрел ecomerce проект bagisto, там все на модули разбито и в репозиториях нет много кода, но там и в моделях его не много. И если все перенести в модели - явно не утонешь. Проблему горы кода решает модульность и при чем здесь репозитории не понятно? А чаще всего в проектах с репозиториями - пустые модели и толстые репозитории. И в этих репозиториях утонешь точно также как и в толстых моделях, если конечно в проекте действительно очень много кода.

  • @wolfprogrammer7586
    @wolfprogrammer7586 2 місяці тому

    В}{ере да?😅

  • @MavelRoll
    @MavelRoll 5 років тому

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

    • @DmitryAfanasyev
      @DmitryAfanasyev  5 років тому

      Не спеши с выводами - впереди ещё 2 видео о репозиториях.

  • @aleksandrriabenko1911
    @aleksandrriabenko1911 5 років тому

    Всем привет. У одного человека подсмотрел способ получение обьекта по id.
    Например было:
    public function edit($id)
    {
    $item = $this->blogCategoryRepository->getEdit($id);
    if (empty($item)){
    abort(404);
    }
    $categoryList = $this->blogCategoryRepository->getForComboBox();
    return view('blog.admin.categories.edit', compact('item','categoryList'));
    }
    А можно этот же код написать как:
    public function edit(BlogCategory $category)
    {
    $item = $post; //лень было менять переменую во вьюхе с $item на $post
    $categoryList = $this->blogCategoryRepository->getForComboBox();
    return view('blog.admin.posts.edit', compact('item','categoryList'));
    }
    Дмитрий хочется узнать ваше мнение по поводу данного способа.

    • @DmitryAfanasyev
      @DmitryAfanasyev  5 років тому

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

  • @murchenko99
    @murchenko99 2 роки тому

    вхере

  • @devcrghome7061
    @devcrghome7061 2 роки тому

    Eloquent - на прямую????? Что????
    Слышали за DB, и то это не напрямую
    "Дублирование" - Eloquent это реализация репозитория, я вот никак не могу разобраться зачем велосипед? А почему не юзать Doctrine? Так вы и на неё запихнете костыли. Да я считаю это костыль - вот где то что то услышал.
    Расмотрим переход на другую БД - всё изменить, полностью всё... В чем выигрышь?
    Замена Eloquent на Doctrine - всё переделать, тоже полностью всё. Где плюсы?

    • @DmitryAfanasyev
      @DmitryAfanasyev  2 роки тому

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

    • @devcrghome7061
      @devcrghome7061 2 роки тому

      @@DmitryAfanasyev да, вы в дальнейшем выражаете мои мысли (по крайней мере во втором, третий еще не смотрел). А эмоции - присутствуют, просто везде требование работа через репозитории, не проблема, вот только смысл лишней логики не понятен. Код должен быть максимально чистым и прозрачным, а выходит нечто монстроозное, и совершенно не поворотное (если смотреть сервисы а не сайт аля лендинг)

  • @valentinkantserov8363
    @valentinkantserov8363 10 місяців тому

    3 части не о чем. норм инфы тут не найдете.
    чел снимает видос про репозитории и даже не удосужился открыть файл с реализацией репозитория

  • @MrDilord
    @MrDilord Рік тому

    Видео ни о чём, какая то вода, пол видео вообще заняло о том, что вы вероятно никогда не будете переходить на другую БД...хотя это чушь полная. Надеюсь следующие будут более информативными.

  • @alexanderdera1266
    @alexanderdera1266 5 років тому

    Спасибо

  • @dmitryocheretko703
    @dmitryocheretko703 4 роки тому

    Спасибо