@symfony_php

Страница 436 из 1418
Sergey
02.12.2017
16:37:42
Ну вот я это и назвал конкуренцией
когда у тебя один запрос и ты в рамках одного UoW делаешь изменения - делай их сколько хочешь. Это не конкурентная запись

Vladislav
02.12.2017
16:37:43
Sergey User->setName вызвали два раза. И изменили имя по разному. Оба изменения будут произведены?
та вообще изминений не будет, пока ты не вызовешь флаш. потом оно пробегает и сравнивает поля. изменилось только 1 поле. ок

Sergey
02.12.2017
16:37:50
Два изменения конкурируют
с кем?) это ж один UoW

Vladislav
02.12.2017
16:37:57
та ничего не конкурирует, решает только последнее изминение

Google
Антон
02.12.2017
16:38:03
@kopaygorodsky чувак да понятно. Мы не об этом

Sergey
02.12.2017
16:38:07
UoW - это граница твоей бизнес транзакции

Vladislav
02.12.2017
16:38:08
а о чем?

Sergey
02.12.2017
16:38:28
конкурентность - это когда у тебя одновременно могут быть более одной бизнес транзакции с участием одних и тех же данных

Антон
02.12.2017
16:38:37
@fes0r понял

http://design-pattern.ru/patterns/unit-of-work.html

Sergey
02.12.2017
16:39:17
UoW нужен просто для того что бы ты синхронизировал стэйт приложения и базы

Антон
02.12.2017
16:39:17
Я на эту доку опирался

Sergey
02.12.2017
16:39:35
хреновая дока

хотя как

есть нюанс

ты МОЖЕШЬ сделать свой UoW

который учитывает конкурентную запись

Google
Sergey
02.12.2017
16:39:57
например счетчик лайков

и вместод UPDATE posts SET likes=:likes сгенерит тебе UPDATE posts SET likes=likes+:likes

но это увы - свой кастомный UoW который учитывает то как у тебя данные меняются

доктрина имеет универсальный UoW. Что значит универсальный - это значит он тупой. Он тупо делает replace данных

Антон
02.12.2017
16:41:05
А у Фаулера что говорится?

Sergey
02.12.2017
16:41:37
https://martinfowler.com/eaaCatalog/unitOfWork.html

Антон
02.12.2017
16:41:42
Vladyslav да я о том что смысл говорит о flush. Об очевидном

Maintains a list of objects affected by a business transaction and coordinates the writing out of changes and the resolution of concurrency problems

Последние 4 слова о че

Sergey
02.12.2017
16:42:32
А у Фаулера что говорится?
я уже уточнил что в общем смысле, ты можешь учитывать конкурентный доступ и лочить например на уровне UoW. но это будет твой специализированный UoW под эту конкретную бизнес транзакцию.

Антон
02.12.2017
16:42:32
?

Sergey
02.12.2017
16:42:53
а не одна реализация UoW на все твои бизнес транзакции

доктрина - универсальная штука и она такие штуки разруливать не может.

Антон
02.12.2017
16:43:31
Да я понял что доктрина такие вещи не решает

Sergey
02.12.2017
16:43:46
но в общем смысле - да, можно UoW юзать для разруливания конфликтов

что бы изменения атомарно лепились в базу

в целом запилить свой UoW - не особо сложно.

но я готовых примитивов что бы это было удобно для php не видал)

Антон
02.12.2017
16:44:51
Доктрина нас учит использовать сеттеры, ты учишь что не надо. От этого диссонанс у меня

Sergey
02.12.2017
16:45:05
Доктрина нас учит использовать сеттеры, ты учишь что не надо. От этого диссонанс у меня
где доктрина этому учит? Этому учит дока симфони о том как формы юзать

Google
Sergey
02.12.2017
16:45:23
а так если бы у всяких там Марко было время - они давто бы уже доку переписали

авторы доктрины во всех своих выступлениях особо акцентируют внимание что "сеттеры это не очень хорошо"

(хотя там только Марко и выступает конечно))

Антон
02.12.2017
16:46:40
http://www.doctrine-project.org/2011/11/21/a-doctrine-orm-odm-base-class.html

Да вот доку читаешь

Sergey
02.12.2017
16:47:01
> November 21, 2011, posted by Benjamin Eberlei и это запись в блоге а не дока

Антон
02.12.2017
16:47:26
Я так и не понял как без сеттеров. Можешь в прям совсем для дурака? )

Через конструктор?

Sergey
02.12.2017
16:48:07
Я так и не понял как без сеттеров. Можешь в прям совсем для дурака? )
бональный пример: вместо setName сделать rename. Вместо setPassword и getPassword сделать changePassword и authenticate

Антон
02.12.2017
16:48:18
new User('Anton') вместо setName()?

Понял

Sergey
02.12.2017
16:49:20
new User('Anton') вместо setName()?
если в твоем CRUD приложении надо изменить ВСЕ значения сущности или большую их часть - то есть смысл заменить "изменени" на "создание нового объекта". Пример - вместо setName и setBirthday сделать updateProfile(Profile $profile)

Sergey
02.12.2017
16:49:52
если ты накидаешь мне спорных примеров - могу накидать заметку как это все можно разрулить что бы выходило даже проще и удобнее

Антон
02.12.2017
16:50:18
А внутри этого метода уже по свойствам данные распихать?

Sergey
02.12.2017
16:50:34
А внутри этого метода уже по свойствам данные распихать?
http://docs.doctrine-project.org/projects/doctrine-orm/en/latest/tutorials/embeddables.html

все намного проще

Антон
02.12.2017
16:52:42
Но тут сразу вопрос как такой Embeddable класс заполнять? Сеттерами?

Почитаю в общем про это

Sergey
02.12.2017
16:53:50
Но тут сразу вопрос как такой Embeddable класс заполнять? Сеттерами?
в конструктор, билдеры, dto, статический метод фабрика с массивом. Можешь просто погуглить "constructor too many arguments"

Антон
02.12.2017
16:54:40
Понял. Очень много классов получается для обыкновенного crud

Google
Sergey
02.12.2017
16:57:53
зато можно убрать код изменения так как в целом у тебя нет разницы между изменением и создаеним

ну и объем кода будет даже меньше во многих ситуациях

Антон
02.12.2017
16:59:07
Попробую так сделать. Пока обычными сеттерами сделал )

Прикольно было бы мини проект с такими практиками увидеть

Sergey
02.12.2017
16:59:50
лень)

Антон
02.12.2017
16:59:52
Может есть такой?

Сколько я не смотрел, ничего подобного не видел

Sergey
02.12.2017
17:00:30
я вообще в опенсурсе мало годного видел с точки зрения архитектуры или кода

Антон
02.12.2017
17:01:10
Давай я буду писать что то такое простое, а ты надзирать

Admin
ERROR: S client not available

Антон
02.12.2017
17:01:54
За плечами только ларавел правда. Но уже не Битрикс )

Сделаю интернет магазин одного товара в учебных целях

Антон
02.12.2017
17:03:23
Ахаха

Sergey
02.12.2017
17:03:23
мне надо мини-убер написать, чисто апишку, оно может даже не работать.

а мне лень

Антон
02.12.2017
17:03:37
Ты про такси?

Sergey
02.12.2017
17:03:40
да

Антон
02.12.2017
17:03:54
Можно подумать

Google
Sergey
02.12.2017
17:03:59
пользователи, заказы, поездки... можно без поиска водителей, без геотрекинга

Антон
02.12.2017
17:04:10
Окей

Sergey
02.12.2017
17:04:21
ну то есть оно не должно быть "продакшен рэди". Если нужно что-то что достает расстояние и время поездки по координатам - лупишь сервис который рандом возвращает

и этого более чем хватит)

Vladislav
02.12.2017
17:04:46
Libretaxi

Sergey
02.12.2017
17:05:03
На ноде есть опенсорс решение с клиентом в тг
не, это как раз таки проект-пример)

просто я на нем не "сеттеры" обкатывать собрался)

и потому надо на php

все строго опенсурс и все под MIT

Антон
02.12.2017
17:05:54
Ок. Начну на следующей неделе

Sergey
02.12.2017
17:06:04
можешь в личку пинать если вопросы будут

я пока статью попробую написать

Антон
02.12.2017
17:06:29
Хорошо. Спасибо

Arky
02.12.2017
17:20:59
@fes0r я запилил персист сервис, это норма?)

Sergey
02.12.2017
17:29:41
@fes0r я запилил персист сервис, это норма?)
у тебя репозитории для этого, сделай там метод add и внутри уже делай persist

репозиторий в контексте доктрины - это как коллекция. Ну то есть с точки зрения кода который юзает репозиторий

с точки зрения самой сущности - ей класть что есть база данных какая-то. Она думает что она всегда есть с момента создания инстанса

Vit
02.12.2017
17:58:05
я пока статью попробую написать
А где почитать статьи можно?

Sergey
02.12.2017
17:58:16
Arky
02.12.2017
17:58:57
Sergey
02.12.2017
17:59:23
блин мне кажется ты не с того конца взялся за все эти вещи

Страница 436 из 1418