ИСПОЛЬЗУЙ ЭТО С РЕПОЗИТОРИЕМ! ПАТТЕРН СПЕЦИФИКАЦИЯ В ПИТОНЕ

Поделиться
HTML-код
  • Опубликовано: 11 май 2022
  • Андрей Иванов - Питон
    Используйте мою ссылку в криптобирже OKEX и получите -10%:
    www.okx.com/join/PYTHONANDREY
    Мои курсы на UDEMY: www.udemy.com/user/andrey-iva...
    Пожертвования: www.donationalerts.com/r/pyth...
    Github: github.com/knucklesuganda
    Telegram канал: t.me/pypapyrus_ru
    Другие Видео по Python: ruclips.net/user/playlist?list...
    Канал на английском языке: ruclips.net/channel/UCeC9...
    Поставьте лайк и подпишитесь!
    #Python #Питон #программирование #programming

Комментарии • 20

  • @exe88cution
    @exe88cution 2 года назад +1

    Классное видео, хоть и знал, но, всё равно интересно было смотреть. Рад что разбираются более продвинутые приёмы, полезно. Спасибо большое

  • @astalavista6329
    @astalavista6329 Год назад +4

    Есть ощущение что автор путает DAO и Repository. Но даже если и так. Взять ту же джангу. Усложнить запрос, например агрегация какая то. И вот мы переизобретаем ORM. А в алхимии вы где будете джоины писать?

  • @dmitrymoris2182
    @dmitrymoris2182 2 года назад +1

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

  • @maxim.samokhval
    @maxim.samokhval 2 года назад

    Добрый день, спасибо за видео и объяснение. Возник вопрос по поводу конструкции return {“age__gte”: 18} - это синтаксис django ? Или можно, например, в SQLALCHEMY использовать .? Лучше если скажете, где об этом прочитать .
    Спасибо большое

    • @PythononPapyrusRU
      @PythononPapyrusRU  2 года назад +2

      Такое можно в sqlalchemy использовать, но скорее вам нужно будет передавать сам запрос в спецификацию, а после добавлять к нему поля. Могу в одном из видео показать

    • @maxim.samokhval
      @maxim.samokhval 2 года назад

      @@PythononPapyrusRU буду признателен за ещё один пример в видео на примере sqlalchemy

  • @xfg9183
    @xfg9183 2 года назад +1

    Просто не нужно использовать Repository для отдачи данных на UI. Repository используют для изменения состояния доменных сущностей. То есть нашли доменную сущность, изменили её состояние, положили в базу данных. Таким образом выборка будет только по id. Поскольку в DDD одну сущность от другой отличают именно по id вы не можете искать сущность по каким-либо другим критериям. А вот для отдачи данных на UI нужно просто напрямую ходить в базу минуя Repository и ORM.
    Бывают конечно ситуации, когда вы допустим хотите посчитать средний чек покупателя и затем сохранить это значение в сущность покупателя. Тогда вроде как хочется найти все заказы покупателя по какому-нибудь customerId, но нет в таких ситуациях нужно использовать Domain Service, внутри которого будет обычный прямой запрос в базу данных, который посчитает и вернет средний чек.
    А спецификация, это про булеву логику. То есть метод isSatisfied должен возвращать булево значение, а не какой-то иной тип данных. Соответственно его используют, когда нужно взять сущность, которая уже лежит в памяти и проверить удовлетворяет ли она каким-либо бизнес-правилам или нет. Понятно, что любые костыли можно к чему угодно приделать, но всё же, лучше каждый паттерн использовать там где он уместен.

    • @PythononPapyrusRU
      @PythononPapyrusRU  2 года назад

      Хорошо, тогда вопрос такой: почему в самой книге по DDD от Эванса паттерн спецификация использовался вместе с репозиторием(и даже SQL)?

    • @skynetif
      @skynetif Год назад

      @@PythononPapyrusRU Если не трудно, дайте ссылку. Т.к. единственное что там есть про базу данных, это что-то типа "оптимизируйте сами загрузку обьектов из бд в память"

    • @user-cm8nm6hn9t
      @user-cm8nm6hn9t Год назад

      @@PythononPapyrusRU в «Паттерны разработки на Python: TDD, DDD и событийно-ориентированная архитектура» предлагают отдавать данные на UI в обход репозитория.

  • @bekiimanaliev4102
    @bekiimanaliev4102 2 года назад

    привет недавно столкнулся с такой проблемой то что нужно было сделать под запрос я использовал паттерн Repository и просто внутри добавил метод sub_query() можешь сказать правильно ли я сделал?)

    • @PythononPapyrusRU
      @PythononPapyrusRU  2 года назад

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

    • @bekiimanaliev4102
      @bekiimanaliev4102 2 года назад

      @@PythononPapyrusRU ок понятно а можно ли в repository писать свои сырые запросы не будет ли это нарушение логики или же нужно в спецификацию тоже ложить?

    • @PythononPapyrusRU
      @PythononPapyrusRU  2 года назад

      Скорее лучше в спецификации. Можно написать только ту часть запроса в которой нет фильтров WHERE и похожих вещей. Также сами значения из SELECT тоже нельзя

  • @david_shiko
    @david_shiko Год назад +1

    И так мы медленно изобретеаем mongo запросы...)

  • @user-kt2pf5bf5m
    @user-kt2pf5bf5m Год назад

    Обратите внимание, что все подклассы спецификации, который упомятуны в видео должны быть абстрактными. А потом уже реализация для репозитория, который работает с orm. Или же. Если вдруг мы хотим иметь такого вида спецификации, то делать адаптер для движка, который работает с другими системами хранения данных. Вот представьте, что у нас нет orm, есть CSV. Как мы из репозитория уберем логику отбора записей? Даже если напишем движок, как он поймет контрукцию age_gte=18? Блин, сложно все, когда нет sql))

    • @user-kt2pf5bf5m
      @user-kt2pf5bf5m Год назад

      Исходя из этого вопрос автору, приходилось ли вам работать с репозиториями, не знающие про orm, и как там это дело реализовать

  • @h3ckphy246
    @h3ckphy246 Год назад

    разворотка

  • @Mura905
    @Mura905 2 года назад +1

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

    • @exe88cution
      @exe88cution 2 года назад +2

      так нормально ведь видно