
Natalia
10.10.2018
09:07:38

(;¬_¬)
10.10.2018
09:08:17
и глаза не вываливаются

Serega
10.10.2018
09:08:33
Приветствую из Одессы мамы! Предлагаю сделать встречу в Одессе в ноябре, познакомиться, пообщаться. Кто не в Одессе на день приехать можно. Интересно? Пишите в личку, если соберется хотя бы 5 человек, уже будет о чем поговорить.

Google

Dmitry
10.10.2018
10:47:17
кто-то хорошо в написании расширения варит?
в частности про ресурсы вопрос

Sergey
10.10.2018
11:17:00

dypa
10.10.2018
11:17:01

Maksim
10.10.2018
11:18:07

Sergey
10.10.2018
11:20:40
Но мне тоже интересно к чему был вопрос

dypa
10.10.2018
11:21:41

Natalia
10.10.2018
11:21:46

Maksim
10.10.2018
11:22:00
я до сих пор не могу понять суть этого конкретного вопроса
дбал используется тогда, когда нет нужды в использовании uow, а обмазываться голым pdo лениво. Просто, как сахар.
размер команды? похеру.
навыки? похеру

dypa
10.10.2018
11:24:14

Maksim
10.10.2018
11:24:31
очень большая потеря. Мог бы просто спросить, который час, раз решил доколупаться :)

Google

Sergey
10.10.2018
11:31:05

Bohdan
10.10.2018
11:32:08
это просто разные инструменты

Sergey
10.10.2018
11:32:26
да и сами подходы могут сильно различаться
даже в пределах той же orm подходы уже могут отличаться значительно
но да - если в команде нет кого-то кто досканально знает доктрину я бы не доверил такой команде этот инструмент
а ты всегда только orm юзаешь? и для репортов? или иногда тоже используешь dbal?

dypa
10.10.2018
11:44:03

Sergey
10.10.2018
11:44:27
еще пример когда ORM не нужен - когда у тебя нет связанных реляций. То есть все данные для операции хранятся в рамках одной таблицы (при помощи jsonb). Один агрегат - одна таблица


Maksim
10.10.2018
11:45:55
я не использовал ни dbal, ни pdo, использовал pg там, где не впихивался es.
тем не менее, вариант с pg от варианта с тем же pdo не отличается ни чем.
Размер команды, где я использовал нативные средства (читай, без доктрины) от 4х до 20 человек.
Их навыки? от джуниоров, до синьоров.
но опять-таки, я связи не вижу...
в моей текущей картине почти весь контроль за жизненным циклом передан сагам. Поэтому всякие тонкие модели - в порядке вещей. Это не сущности в привычном понимании, просто access object, если можно так выразиться. И ORM в такой картине мира не впихивается аще никуда, ибо по сути роль uow выполняется средствами саг
если брать пример попроще, то самый распространённый - круд. Лень то и дело толкает взять сущность, впихнуть сериалайзер и пойти пить смузи.
Если ты делаешь апи, то с вероятностью в 100500% orm тебе не нужна.
и пофиг сколько людей будет в команде.

dypa
10.10.2018
11:53:19

Sergey
10.10.2018
11:54:12

Bohdan
10.10.2018
11:54:53

Sergey
10.10.2018
11:55:07
> конкатенация запроса или ...
шутки ради - любой квери билдер это увы и ах лишь конкатенация запросов. Причем иногда выгоднее делать конкатенацию подзапросами (аля SELECT * FROM (SELECT * FROM (SELECT id, name FROM ...) WHERE... ) WHERE ..

Maksim
10.10.2018
11:55:09

Google

Maksim
10.10.2018
11:57:04

dypa
10.10.2018
11:58:04

Maksim
10.10.2018
11:58:20

Sergey
10.10.2018
11:58:31
ну и на счет негативный или позитивный опыт - все эти мелочи причесываются

Anton
10.10.2018
11:59:06
По-идее такое же решается через кастомизацию QB

Maksim
10.10.2018
11:59:06

dypa
10.10.2018
11:59:15

Sergey
10.10.2018
11:59:53
По-идее такое же решается через кастомизацию QB
все так, под копотом оно просто может собирать индексы параметров и потом склеивать в нужном порядке. А можно кастылять что бы именованные были (но тогда если сложные запросы составляются надо следить за отсутствием конфликтов в именах, я не давно на такое напоролся)

Maksim
10.10.2018
12:00:37

dypa
10.10.2018
12:01:05

Sergey
10.10.2018
12:01:22
это все звучит как попытка формализовать все на свете что бы люди прекращали думать

dypa
10.10.2018
12:02:28

Sergey
10.10.2018
12:02:43
я бы не стал подобных решений принимать.
потому что это тупо
у тебя есть postgresql - все, дальше юзай то что решает поставленную задачу эффективно и что бы поддерживать было удобно
только тригеры в базе низя, ну как нельзя, надо оч хорошо обосновать зачем

Google

dypa
10.10.2018
12:03:46

Maksim
10.10.2018
12:03:49
у меня можно и триггеры, и хранимки... вопрос в том, на сколько оправдано

Sergey
10.10.2018
12:04:05
ну типа чаще всего это не оправдано, но да бывают исключения.

Maksim
10.10.2018
12:04:28
событийная модель, все дела) пинок от постгреса, например, бывает полезен :)

Sergey
10.10.2018
12:04:39
с джунами - можно просто их просить всякий раз как они чего делают - что бы обосновывали чем руководствовались при реализации. Таким образом ты и их заставлять думать и анализировать ситуацию будешь, и с ревью проще

Anton
10.10.2018
12:04:47
Я противник какой-либо неявной записи в БД.
Т.е. хранимки ок, но только если они делают ряд сложных селектов (можно с использованием временных таблиц), не более.

Maksim
10.10.2018
12:06:28
я вот за всю свою карьеру с джунами особых проблем не испытывал. Да, бывали факапы и огорчения, но я б не сказал, что они прям такие дауны, что не могут без орм жить. Вовсе нет.
главное качество - пытливый ум. И вот таких надо искать) тогда они не будут по каждой строчке тебе мозг полоскать, а втянутся довольно резво
наоборот, орм - серьёзно срёт им в голову и тормозит развитие.
зато сколько видел синьоров, которые, к примеру, шардинг доктриной пилили - не пересчитать.
так что тут сколький вопрос, на который однозначного ответа нет. Авось у @fes0r получится закрыть хотя бы часть


Dmitry
10.10.2018
12:15:58
Привет. Давно я не писал ничего тут ?
Насчёт Doctrine. Не признаю маппинг анотациями. Пишу чистую доменная модель, которая не знает о деталях хранилища абсолютно ничего. В доменной модели есть только интерфейсы репозиториев с ЯВНЫМИ методами для персистенции.
На инфраструктурном уровне пишу XML схемы маппинга доменных сущностей + реализовываю интерфейсы репозиториев, которые используют Doctrine.
Насчёт того, что ORM срёт в голову – да, и это касается любой ORM: что Doctrine, что любого AR. Чтобы дошло, предлагаю домен на три сущности и даю задание написать персистенцию руками без какой-либо ORM/DBAL: гидрации руками, запросы руками, чистый PDO. Обычно хорошо помогает понять, чего стоит магия.

Maksim
10.10.2018
12:17:06
я не разделяю фанатизма по выпиливанию аннотаций. В моей картине мира - чушь)

Dmitry
10.10.2018
12:17:16

Sergey
10.10.2018
12:18:30

Dmitry
10.10.2018
12:26:22
1. Явные – не надеюсь на то, что будет UoW который потом что-то сам посохраняет (или нет). Обычно есть add() который только создаёт новые и persist(), которые апдейтит.
2. Зависит. Если репозиторий простой – один. Если разухабистый – делаю несколько.
3. Хотелось бы после обработки всего HTTP запроса, но иногда делаю и в процессе обработки, если требуется

Bohdan
10.10.2018
12:28:34
> persist(), которые апдейтит
вне зависимости от того, откуда взял сущность, дергаешь persist?

Sergey
10.10.2018
12:29:07

Bohdan
10.10.2018
12:30:11

Sergey
10.10.2018
12:30:17
все такими были

Google

Bohdan
10.10.2018
12:30:25
а потом чатик, искра, буря, осознание

Maksim
10.10.2018
12:35:05
ну, мол, если репозиторий ток на чтение, то как называется херовина на запись?)

Dmitry
10.10.2018
12:36:14
Угу, с Doctrine работаю немного, потому могу не осознавать, где ошибаюсь ? Буду рад, если услышу что-то новое для себя!
1. Да
2. Домен используется в разных сервисах приложения, реализация репозитория отличается. В части сервисов нужен ограниченный набор возможностей репозитория, потому разделяю
3. Иногда – например в неудачных местах архитектуры где flush нужен для того, чтобы дёрнуть внешний сервис (считай RPC), которому нужны данные, которые я создал в процессе обработки запроса

Sergey
10.10.2018
12:41:20
persist это не о сохранении, это о том чтобы UoW узнал о твоем обьекте. уже насмотрелись такого
$obj = $repo->find(1);
$em->persist($obj);
$em->flush($obj);

Dmitry
10.10.2018
12:47:39
Да, я это понимаю. Но я умышленно не хочу привязываться к UoW, потому в интерфейсе делаю метод persist(), который делает на первый взгляд бесполезный ->persist(), но остаётся в интерфейсе для реализации в сервисах, которые могут не пользоваться (и не пользуются) Doctrine

Артём
10.10.2018
12:47:47
Так можно сделать сервис в слое приложения отвечающий за транзакции и использующий реализацию доктриновской сессии из слоя инфраструктуры. И забыть о прямых flush`ах

Maksim
10.10.2018
12:48:04
Ну типа возьми ZendDb (row\table gateway) и буде щасце)

Sergey
10.10.2018
12:51:13
На чтение файндеры

Maksim
10.10.2018
12:52:01

Артём
10.10.2018
12:52:32
На чтение файндеры
А что ты называешь файндерами? Я просто привык немного к другой формулировке

Tex
10.10.2018
12:54:35
На чтение файндеры
файндеры - классы под чтение некоего набора сущностей\конкретной сущности с N методов или query functions?

Dmitry
10.10.2018
12:56:13
хм, я выношу некоторые поисковые вещи в отдельные интерфейсы, но не называю это файндерами

Shmaltorhbooks
10.10.2018
12:57:08
хм, господа, а как в phpDoc'е указать тип данных, которые возвращает генератор?

Maksim
10.10.2018
12:57:43

Shmaltorhbooks
10.10.2018
12:58:03
мерси)

Maksim
10.10.2018
12:58:30
Но шторму всё равно насрать)

Shmaltorhbooks
10.10.2018
12:58:39
бля)))
так нечестно)
а как, чтоб не насрать?