
Sergey
23.07.2017
11:50:40
и в целом UoW это делать реализации репозитория

Dmitry
23.07.2017
11:50:45
да, и при отсутствии persistance - тоже не нужна

Sergey
23.07.2017
11:50:55

Dmitry
23.07.2017
11:51:16
о том, что не понимаю, почему ты частный случай persistance берешь за модель

Google

Sergey
23.07.2017
11:51:23
.....
ясно, бесполезно

Dmitry
23.07.2017
11:51:52
ну да, бесполезно, потому что этот посыл у тебя - аксиома

Sergey
23.07.2017
11:52:01
какой смысл ты вкладываешь в слова "частный случай persistance берешь за модель".
модель чего?
модель persistance?
потому что это требуемая для меня модель работы persistance

Dmitry
23.07.2017
11:52:48
модель работы системы хранения

Sergey
23.07.2017
11:52:48
которая позволяет полностью отделить бизнес логику приложения от логики хранения
для этого я выбираю модель которая не имеет в принципе "системы хранения"
логично ж, нет?
или проблема в слове "модель"?

Google

Dmitry
23.07.2017
11:54:03
почему ты берешь "однопоточное неконкуретное nmemory хранилище" как модель работы системы хранения
uow не имеет отношения к системам хранения, она имеет отношения к бизнес-транзакции
почему в "идеальной системе" ты отказываешься от uow


Sergey
23.07.2017
11:54:55
ну то есть сначала идея о том что тебе надо что-то что скроет синхронизацию, а UoW как реализация этой идеи
сначала мы придумали что хотим что-то что действует как inmemory repository и потом добились того что бы наши репозитории для работы с тем же постгресом работали так же с точки зрения клиентского кода
или ты думаешь сначала придумали UoW а потом "зачем"?
по поводу "однопоточного" - ну как бы оно так и работает. Вспомни как ты работаешь с инкрементами в базе
либо локи в базе на уровне репозитория, либо "надо молиться что бы небыло конкуретных запросов", но все это будет всеравно репозиторий скрывать или UoW
если у тебя UoW умеет отслеживать операции инкремента
то есть с точки зрения клиентского кода у тебя все будет выглядеть так как если бы все просто в памяти лежало. А flush - ну его можно заменить например на @transactional аннотацию на уровне контроллера


Dmitry
23.07.2017
11:59:14
я думаю, что когда придумывали uow, не держали в голове "сделать как будто у нас однопоточное" ;) а решали конкрентные проблемы построив реальную модель работы с субд
а ты почему-то хочешь приравнять совершенно две разные модели хранения данных

Sergey
23.07.2017
11:59:52
а ты думаешь о локах
ну вот я тебе пример привожу
вот у тебя есть сущность с балансом и ты добавляешь 5
типа +5 для Пети твоего и -5 для Васи

Google

Sergey
23.07.2017
12:00:42
как ты решаешь вопрос синхронизации?
писсиместичные локи в базе?
или как?

Dmitry
23.07.2017
12:00:53
разные, ибо inmemory - не persistance

Sergey
23.07.2017
12:01:03
забудь о СУБД
или выбери один вариант
мускуль или постгрес там
и забудь о UoW
у тебя просто PHP приложение которое обрабатывает тысячи запросов, некоторые паралельно, и тебе надо как-то не допустить неконсистентного состояния
что ты будешь делать?
лочить ряды в базе, так
?

Dmitry
23.07.2017
12:02:20
ага

Sergey
23.07.2017
12:02:33
в случае с immemory и многопоточностью ты точно так же будешь "лочить мьютексами/семафорами" проперти сущностей
так?

Dmitry
23.07.2017
12:02:51
ага

Sergey
23.07.2017
12:04:01
в этой ситуации у нас для immemory флаша не появляется так как это разруливается на уровне сущностей
а вот если мы захотим "вычистить" сущности от инфраструктурного булшита с синхронизацией стэйта

Dmitry
23.07.2017
12:04:49
как это не появляется, я буду в этом случае uow использовать ;)

Sergey
23.07.2017
12:05:31

Google

Dmitry
23.07.2017
12:05:51
а почему я должен сделать иначе?

Sergey
23.07.2017
12:05:53
потому что тебе для этого для каждого "потока" надо будет свой UoW которые будут лочить и релизить сущности
в целом ладно, убедил

Dmitry
23.07.2017
12:06:25
только потому что inmemory быстрое

Sergey
23.07.2017
12:06:26
если с таким раскладом то да, везде будет UoW
но immemory repository поскольку прмиеняются только для тестирования - необходимости усложнять реализацию вводя UoW там нет
но в целом да, при таком раскладе Ivan мог бы получить одинаковые контракты
и для immemory и для обычных репозиториев

Admin
ERROR: S client not available

Sergey
23.07.2017
12:09:08
UoW и flush это элементы инфраструктуры
есть примеры систем где весь стэйт лежит в памяти и там вообще не юзаются репозитории особо. Там по сути то что в памяти это проекции данных, а храняться только доменные ивенты (типа event sourcing).
вот там да - там упор на скорость

Dmitry
23.07.2017
12:14:42
мне кажется сравнивать хранение стейта в памяти и persist стейта в общем не совсем верно

Sergey
23.07.2017
12:25:35
оно конечно на 100% не выйдет

Dmitry
23.07.2017
12:28:51
выйдет, если использовать uow, как бы ничто не мешает использовать uow для inmemory... а так получается, что мы выкинули для кастомного случая хранилища inmemory одну из абстракций - uow и удивляемся, что у нас стали контракты разные

Sergey
23.07.2017
12:37:54
ну на самом деле it depends. Если у тебя два тест кейса например будут изолированы - то контракты не будут различаться)
ну мол UoW это как раз таки то средство которое позволяет твоему репозиторию действовать как inmemory

Google

Sergey
23.07.2017
12:38:25
короч ладно, надо заканчивать
в целом я не вижу необходимости в целом использовать inmemory - проще просто стабами закрывать интерфейсы репозиториев
inmemory полезны только для демонстрации идеи которая приводит нас к UoW

vlad
23.07.2017
15:09:53
Ребят, доброго времени суток всем.
Помогите, пожалуйста, как правильно получить количество всех объектов из массива, который является полем сущности. И всё это нужно вызвать из репозитория.
Может есть у кого-нибудь набросок кода?
А-то в язык запросов могу совсем не очень :(

Valentin
23.07.2017
15:11:37
Вопрос не вполне ясен
Кол-во объектов в массиве считается простым count($value)

Sergey
23.07.2017
15:24:59
ибо "поле сущности" может быть и тем и тем если так подумать.
а мы тут не телепаты
но и в том и в том случае - простой count
только первое для массивов, а второе метод коллекции

vlad
23.07.2017
15:28:26
извиняюсь за вопрос
несколько раз была ситуация, когда без репозитория не обойтись было
а потом, как раз в этом случае, просто count'ом
голова уже не работает
спасибо)
Ребят, можно ли в Process в symfony передавать парные комманды?
т.е.
$process = new Process('cd /var/www/***/ && php bin/console ***');
вроде того

Jan
24.07.2017
07:01:45
@fes0r а если я в сервис уровня приложения передаю некий репозиторий, то чтобы сделать flush, мне нужно дополнительно передать в него EntityManager, который используется этим репозиторием? Это к вопросу, где корректно делать flush.

Sergey
24.07.2017
07:10:37

vlad
24.07.2017
07:10:53
спасибо :)
why not

Boris
24.07.2017
09:30:55
Привет всем.
Подскажите, есть ли в symfony шаблоны стартовые? Что-то типо basic, advanced в yii2?
Спасибо.

Sergey
24.07.2017
09:32:29
шаблоны приложения?

Boris
24.07.2017
09:33:06
Да.