Павел
The Ant
он тебе нужен только в рамках конкретной транзакции же
Павел
А вот в этом и это уродски выглядит
transaction(){
action1->setCollector(collector)
action1();
action1->setCollector(collector)
action2();
}
collector->release()
Павел
С другой стороны не прям критикал уродски, но всё же
The Ant
зачем сеттить? если можно как зависимость в экшон прокинуть фабрику и внутри его создать?
Павел
The Ant
зочем?
Павел
зочем?
Чтобы собрать ивенты. Это примерно как visitor
The Ant
сложно крч
Konstantin
Павел
Konstantin
не настаиваю, но аргумент метода - железобетонно явно, просто и читаемо
Konstantin
и тестируемо, если взбредет в голову
Konstantin
только передавал бы я не сам коллектор, а некую коллекцию, что он дает. по типу, допустим, Stopwatch. там есть метод startTimer (могу в названиях путаться), он возвращает новый объект, и измерения добавляются к нему
Konstantin
то есть не весь коллектор, а EventCollection $collection = $collector->createCollection()
Konstantin
и на этом $collection->addItem(....) в вашем экшне
Konstantin
то есть чтобы не менять шаред-стейт самого коллектора из нескольких гипотетических потоков
Konstantin
а работать строго со своей локальной копией данных, которой 100% владеет текущий код
Павел
Интересный вариант, только тогда в самом коллекторе ничего не остается. Возможно если он чуть сложнее, чем просто коллекция - тогда имеет смысл
Павел
Konstantin
Konstantin
и пусть он ее там куда-то шлёт или что он должен делать. при некоторой ловкости рук, это можно отложить в fastcgi_finish_request допустим
Kirill
Всем привет! Подскажите, как вы работаете с вложенными ветками - например, есть ветка A, я из нее наследую ветку B, из которой наследую ветку C. Это все одна большая задача, которую раздробили на более мелкие и по отдельности.
И вот на каком-то этапе, например, отдаю задачу С на тест и нужно в эту ветку влить свежий master. Чтобы это сделать, мне нужно влить master в А, А в B, а В в С. Может быть можно как-то это в один клик делать в шторме или еще как-то?
Nikolay
Всем привет! Подскажите, как вы работаете с вложенными ветками - например, есть ветка A, я из нее наследую ветку B, из которой наследую ветку C. Это все одна большая задача, которую раздробили на более мелкие и по отдельности.
И вот на каком-то этапе, например, отдаю задачу С на тест и нужно в эту ветку влить свежий master. Чтобы это сделать, мне нужно влить master в А, А в B, а В в С. Может быть можно как-то это в один клик делать в шторме или еще как-то?
Зачем наследовать два раза? Можно мерж использовать
Konstantin
Всем привет! Подскажите, как вы работаете с вложенными ветками - например, есть ветка A, я из нее наследую ветку B, из которой наследую ветку C. Это все одна большая задача, которую раздробили на более мелкие и по отдельности.
И вот на каком-то этапе, например, отдаю задачу С на тест и нужно в эту ветку влить свежий master. Чтобы это сделать, мне нужно влить master в А, А в B, а В в С. Может быть можно как-то это в один клик делать в шторме или еще как-то?
я бы советовал таким не заниматься, чай не в ядро линукса коммитите. не заниматься как раз по причине вышеозвученных проблем - головняк с мержами, высокая вероятность человеческой ошибки. у меня практически сотня разработчиков, десятки продуктов, но никто и никогда подобным не занимается, может и вам не надо?
Kirill
Konstantin
нормально их организовывать?
Kirill
нормально - это все в одну засунуть?
Konstantin
ну вполне, да
Konstantin
мои доводы простые: мне за 15 лет в программировании в совершенно разных компаниях (от гигантов до стартапов) всегда удавалось избегать подобных приключений, и вам, наверное, при желании получится избежать
Kirill
ну у нас процесс так построен: большая задача дробится на подзадачи, которые проще оценивать, отслеживать ее движение и параллельно отдавать разным разработчикам.
Konstantin
у вас правильный флоу, если мы гит используем как задумано - децентрализованно, с несколькими ревьюверами каждый на своём уровне. ровно как в ядре линукса. в мелкой веб-разработке куда больше прижился гитхаб-флоу - с пуллреквестами, сквошами (опционально) и по возможности линейной историей в мастере (чтобы неудачную фичу можно было целиком откатить одним реверт-коммитом, а не кропотливо ребейзить мастер, выкидывая оттуда коммиты, сломавшие продукт). и на эту модель вложенность > 1 влияет негативно, начинается бардак, сложности (АААА я не то вмержил к себе!) и всё равно в конце надо самую верхнюю ветку, которая соберет в себя все задачи, ревьюить еще раз отдельно, ведь нет гарантии, что она в себя корректно интегрировала вложенные. я считаю, что это достаточный повод так не делать
Konstantin
никакого криминала так делать, разумеется, нет, всё в рамках задуманного. просто вносит много лишних действий и суеты. если задуматься, любое дерево можно превратить в плоский лист, упорядоченный по какому-то принципу. типа "сначала Вася делает кор-функционал в ядре" потом, как их вмержили "петя может писать апи", "ваня может пилить миграции" и всё это делать в мастер (ну или какая там у вас транк-ветка), и делать это мелкими атомарными задачками, а не огромной веткой, которая включает в себя еще 20 нижележащих веток, и которую хер помержишь, не сломав половину проекта
Юра
Всем привет! Подскажите, как вы работаете с вложенными ветками - например, есть ветка A, я из нее наследую ветку B, из которой наследую ветку C. Это все одна большая задача, которую раздробили на более мелкие и по отдельности.
И вот на каком-то этапе, например, отдаю задачу С на тест и нужно в эту ветку влить свежий master. Чтобы это сделать, мне нужно влить master в А, А в B, а В в С. Может быть можно как-то это в один клик делать в шторме или еще как-то?
А зачем вливать мастер в А и Б
Юра
Тебе же в С нужно свежий мастер
Konstantin
чтобы тестировать со свежей версией апстрима? в мастере переименовали метод xxx в yyy, но твой код во всех твоих нижележащих ветках вызывает по-прежнему ххх. если ты вольешь это в ветку С, то А и Б от нее отстанут (а в них тоже разработка ведется, как я понял)
Kirill
да, и еще мердж реквесты С в В будут содержать данные из мастера
Konstantin
я ж говорю, это изначально сложная и херовая ситуация, лучше её избегать. я не понимаю, почему вас релиз-инженер за такое не поубивал)
Kirill
никакого криминала так делать, разумеется, нет, всё в рамках задуманного. просто вносит много лишних действий и суеты. если задуматься, любое дерево можно превратить в плоский лист, упорядоченный по какому-то принципу. типа "сначала Вася делает кор-функционал в ядре" потом, как их вмержили "петя может писать апи", "ваня может пилить миграции" и всё это делать в мастер (ну или какая там у вас транк-ветка), и делать это мелкими атомарными задачками, а не огромной веткой, которая включает в себя еще 20 нижележащих веток, и которую хер помержишь, не сломав половину проекта
иногда нужно большую задачу выкатывать целиком и нет возможности по отдельности делать задачи и релизить их
Kirill
на самом деле, я же просто спросил, есть ли такая возможность, а вы мне говорите, что нужно менять подход)
Konstantin
ну возможность есть - мержьте сверху вниз. сначала в крупную ветку мастер, потом в нижележащии по иерархии вниз, в чем вопрос-то?
Юра
Мне кажется тут нужен rebase
Павел
Всем привет! Подскажите, как вы работаете с вложенными ветками - например, есть ветка A, я из нее наследую ветку B, из которой наследую ветку C. Это все одна большая задача, которую раздробили на более мелкие и по отдельности.
И вот на каком-то этапе, например, отдаю задачу С на тест и нужно в эту ветку влить свежий master. Чтобы это сделать, мне нужно влить master в А, А в B, а В в С. Может быть можно как-то это в один клик делать в шторме или еще как-то?
Некоторые прямо в мастер фигачут и вроде это считается даже отличной практикой (транк что-ли называется). Мне кажется у вас явно слишком много уровней вложенности, даже с вашим кейсом.
Есть девелоп -> фича -> подзадача. У вас вроде еще один уровень нарисовался. Опять таки даже так уже неудобно, скорее всего надо смотреть в сторону более жесткой декомпозиции главной фичи. Особенно если на бэке, вполне можно вылить какие то обновления, даже если фронт не подоспел
Konstantin
а будь у вас фича флаги со-существующие с основным мастером (или новое, нестабильное и непубличное пока апи), вы бы спокойно чинили новый функционал, не откатывая огромный этот релиз, который радостно наплодили
Konstantin
как тут мастер в ветки помержить, право, наименьшая из проблем - ну берете и мержите сверху вниз, в чем вопрос-то?
Павел
Konstantin
микросервисы примерно и отсюда тоже растут: проще сделать accounts_service_v2 рядом с текущим accounts_service и как-то там трафик в него наливать отдельно, а потом полностью переключиться. например, с помощью api gateway/BFF
Павел
Я так понимаю это больше имеет какой то смысл с тестами БЛ/конверсии, которые потом можно откатить. Т.е. типа попробовать фичу в бизнесе, а не ради отката если фича упала из-за кода.
Потому что наливать просто фичу фича флагами с такими сложностями в поддержке - как то перебор наверное.
Konstantin
ну хз, вот надо новое апи для мобильного приложения сделать, допустим, это новое апи аутентификации. мобильное приложение не могут писать, если там не будет аутентификации в самом начале
Konstantin
то есть мы пишем новое апи на сервере, выкладываем только на какой-то стейджинговый контур из отдельной ветки, потом ждем полгода, пока мобильному приложению понадобится новое апи в этой ветке? это неудобно, любой код, который не связан с мастером несколько месяцев, по определению дохлый. он не участвует в рефакторинге, он может ломаться, он может не знать про новые правила какие-то
Konstantin
поэтому удобнее это новое апи аутентификации помержить в мастер, выложить куда-то по "секретному урлу" и жить с ним, будто это часть мастера
Konstantin
параллельно писать мобильное приложение, никого не блокируя
Павел
@sc0rp10 Согласен, но не понял поинт, как это с моими мыслями не согласует.
Юра
Тут вопрос в том для чего А и Б ветки
Юра
Это временные ветки которые сами по себе будут заброшены?
Юра
Или они рано или поздно сами войдут в мастер
Юра
Имхо если чел закончил работу с С, то дальше обычный флоу
Юра
Смерджил мастер в С, потестил, залили обратно в мастер
Юра
Дальше те кто херачят А и Б как обычно когда им надо получили свежий мастер с изменениями от С
Юра
Если для того чтобы протестить С нужно менять другие ветки это бред
Юра
Это очень неудобный флоу
Юра
Не масштабируемый вообще
Павел
Тут вопрос в том для чего А и Б ветки
Я так понял, что есть большая фича и подзадачи, в них ведется разработка и они актуальны. И таких фичей может быть несколько с подзадачами. И пока фича не будет сделана полностью, она не вольется в мастер.
Но большие фичи ведут за собой проблемы с сложными мержреквестами и разрешением конфликтов.
Юра
Просто не пойму зачем здесь и сейчас мерджить мастер в А и Б
Юра
Нужно в С свежее из мастера, смерджил мастер в С
Юра
Нужно свежее из А, смерджил из А
Юра
Те кто работает над А, сами могут решить когда им смерджить себе мастер
Юра
Да конечно будут конфликты, но их
количество зависиь от количества общего кода который меняется а не от того в каком порядке что мерджится
Юра
А не должно по идее зависеть от С никак. Иначе это бред
Павел
Просто не пойму зачем здесь и сейчас мерджить мастер в А и Б
Дано:
master->future->sub1
master->future->sub2
master->future2->sub3
sub 1 и sub2 не должны в себя мержить мастер. Так как будут и конфликты и не нужные мержиться именно в future, хотя задачах sub 1,2. Например future2 была замержена в мастеп. Если сделать мерж миенно мастера в sub1 то когда будет мерж реквест в future - то там будет весь future2. А если еще и конфликты то вообще пздц.
Короче правило точно рабочее: откуда пучкуемся, от туда себе и подмерживаем и вливаемся туда же.
Павел
Таким образом чтобы работать с актуальным кодом в sub1, надо сначало подмержить master в future , а только потом future в sub1
Юра
Хз что за правило и кто его придумал
Павел
Юра
Ты так красиво нарисовал тут
Юра
У тебя тут никакх диверджей нет
Павел
Ну вот пример, мне дали сделать кнопку, а я в свою задачу подмержил мастер (а там новый код). Я когда делаю МР в свою главную задачу, то там будет на проверке и новый код. Оно нафига кому надо?
Юра
Ничего не вижу страшного в том что С напрямую смерджит в себя мастер
Павел