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

Поділитися
Вставка
  • Опубліковано 26 гру 2024

КОМЕНТАРІ • 22

  • @ЗахСвистюр
    @ЗахСвистюр 2 місяці тому

    Спасибо за видео! Разбирать кейсы за пределами уровня hello world это очень круто, хоть и мало где встречается
    Видос классный, но хотелось бы увидеть более развёрнутые примеры. Например на алхимии с джоинами и + в добавок если в модели присутствуют файлы. Как и где правильно открыть транзакцию, когда проводить считывание и запись файлов, чтобы при этом тайм-аут в транзакции не отлетел. Вот этого всего побольше пожалуйста.

  • @exe88cution
    @exe88cution 2 роки тому +1

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

  • @astalavista6329
    @astalavista6329 Рік тому +4

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

  • @xfgweb
    @xfgweb 2 роки тому +3

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

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

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

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

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

    • @НикитаК-ъ9ш
      @НикитаК-ъ9ш Рік тому

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

    • @jcatstreams8550
      @jcatstreams8550 3 місяці тому +1

      @@НикитаК-ъ9шбред, а не книга

  • @dmitrymoris2182
    @dmitrymoris2182 2 роки тому +1

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

  • @АлексейПаршин-ч7е

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

    • @АлексейПаршин-ч7е
      @АлексейПаршин-ч7е Рік тому

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

  • @maxim.samokhval
    @maxim.samokhval 2 роки тому

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

    • @PythononPapyrusRU
      @PythononPapyrusRU  2 роки тому +2

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

    • @maxim.samokhval
      @maxim.samokhval 2 роки тому

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

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

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

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

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

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

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

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

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

  • @david_shiko
    @david_shiko 2 роки тому +1

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

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

    разворотка

  • @Mura905
    @Mura905 2 роки тому +1

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

    • @exe88cution
      @exe88cution 2 роки тому +2

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