
Sergey
08.08.2018
08:52:55
(обычно если нет UI то ты делаешь либо SDK либо апишку)

Dmitry
08.08.2018
08:53:27
в апишке может меняться бизнес логика

Sergey
08.08.2018
08:54:03
может, и тут приходят на помощь всякие branch by abstraction и конфигурации а уровне DI (это тоже фича тоглы по сути)
ну и опять же апишка должна сохранять обратную совместимость что бы клиенты могли обновиться

Google

Dmitry
08.08.2018
08:54:48
в случае бизнес-логики не должна

Sergey
08.08.2018
08:54:58
ну значит и тогл тебе не нужен)
опять же - branch by abstraction + DI конфиги это те же тоглы

Dmitry
08.08.2018
08:55:42
речь шла о порядке выкладки кода в прод и миграциях

Sergey
08.08.2018
08:56:27
если у тебя постгрес можно поиграться с переключением схемы, для java видел прикольные либки которые позволяют прозрачно миграции применять в один этап по сути

Dmitry
08.08.2018
08:57:05
спасибо

Sergey
08.08.2018
08:58:01
но самый простой способ - делать деплои чаще (а для этого тоглы что бы разделить понятия "деплой" и "релиз"), тогда проще сохранять обратную совместимости схемы между деплоями. Если деплоишься раз в месяц будет больно
короч все те штуки котоые применяются когда у тебя continious integration (который не CI сервер а который идеология с ежедневными вливаниями изменений в мастер). И чем больше команда тем больше выхлопа от этих загонов. Но да это сложно особенно если до этого команда делала фича брэнчи которые висели по 3 недели

Artem
08.08.2018
09:01:52
фича брэнчи по 3 недели потом выливаются в клёвые мержи =( Особенно если код плохо разделён

Sergey
08.08.2018
09:02:44

Artem
08.08.2018
09:03:30

Sergey
08.08.2018
09:03:44
ну а разделение кода - это извечная проблема... я в своей жизни не видел ни одного проекта где код был бы разделе грамотно.

Google

Artem
08.08.2018
09:05:18

Sergey
08.08.2018
09:06:16
я на предыдущем проекте вообще практиковал что все прямо в мастер херачат

Artem
08.08.2018
09:06:54
а сколько была разница по времени обычно между мержами?

Sergey
08.08.2018
09:07:08
человек 12. Это нужно было что бы мы могли в контексте 2-х паралельных под проектов (типа вторая итерация на основе первой) делать дела и всегда быть вкурсе что поменялось + мы там жестко меняли структуру проекта паралельно
а сколько была разница по времени обычно между мержами?
все прям в мастер, нет мерджей) ну вот сча у нас с короткоживущими брэнчами (так как парное программирование как на том проекте вместо ревью PR-ов в распределенной команде я пока не умею) - есть негласное правило стараться вливать все в течении 2-х дней (в идеале сегодня отвел ветку и вечером вмерджил)
но за счет ревью приходится еще день давать
(ну и есть ветки которые иногда по тем или иным причинам висят неделю например, но это уже редкость к счастью)
хотя ревью можно делать и когда код уже в мастере) Я не считаю что ревью должно блочить мердж

Bohdan
08.08.2018
09:10:15
а фичатоглы все же юзаете?

Sergey
08.08.2018
09:10:18
(разве что у тебя есть джуны которых надо контролировать, и ревью для этого а не для обмена знаниями)

Artem
08.08.2018
09:11:39
это при том, что 3 разраба всего

Sergey
08.08.2018
09:12:53

Roman
08.08.2018
09:13:14
не все проекты позволяют деплоиться часто. например взять ставки на спорт или казино. остановка работы сайта даже на 1 мин болезненно воспримут пользователи которые крутят однорукого бандита

Sergey
08.08.2018
09:13:59
zero downtime организовать тоже проще когда у тебя деплои частые)

Roman
08.08.2018
09:14:43
но а если один бэкенд

Sergey
08.08.2018
09:15:01
один бэкэнд может быть класстером из сотни серверов
это не важно. важна обратная совместимость между деплоями

Google

Sergey
08.08.2018
09:15:19
что бы старый и новый код не конфликтовали
и тогда все изи бризи (потому что первое это пиздец сложно))

Dmitry
08.08.2018
09:15:52
один энджинкс, один пхп, две версии кода… вполне себе перегоняются, хоть сине-зеленый делай

Sergey
08.08.2018
09:17:01
ну вот у меня звонки, вэбсокеты и т.д. с логикой типа отключился - завершить звонок. И тож можно все сделать)

Anton
08.08.2018
09:17:07
В целом все говорят и мы на своем опыте тоже увидели что чем чаще деплои тем меньше время простоя по багам, потому что быстрее реакция и понятнее в чем дело, так что я бы сказал если важный проект то наоборот чаще надо деплоиться

Sergey
08.08.2018
09:17:37
главное помимо "часто деплоить" еще грамотно мониторинг организовать)

Anton
08.08.2018
09:17:52
Да

Sergey
08.08.2018
09:17:59
@anton_serdyuk как ты рассказывал собственно когда-то)

Anton
08.08.2018
09:18:45
А еще один бэкенд рисково в плане а что если сервер тютю
Ночью
В субботу

Sergey
08.08.2018
09:21:22
у нас как-то один из продакшенов любил в 2-3 часа ночи приуныть

Bohdan
08.08.2018
09:21:45

Sergey
08.08.2018
09:22:08
лечилось ребутом сервака) какая-то трабла на aws была с конкретным инстансом
благо у меня хоть и хэлскер но метрика "умерло пациентов" пока не нужна

Bohdan
08.08.2018
09:23:07
а "умерло серверов"?)

Sergey
08.08.2018
09:23:29
пока тоже... мало серваков.
по 3 сервака + RDS в трех регионах
вот будет по 20 серваков в разных регионах - тогда можно вводить такие метрики)
(точнее как, метрика есть - просто пока алертика не срабатывает по ней чаще чем раз в год)

Google

Anton
08.08.2018
09:42:10
Всем привет. Народ подскажите можно ли как-то проверить реализует ли объект определенный интерфейс еще до момента инициализации этого объекта? Что-то типа
if (OrderRepository::class instanceOf SearchableRepository)

Roman
08.08.2018
09:45:03
$class = new ReflectionClass('Foo');
if ($class->isInstance('Interface')) {
echo "Yes";
}
нет не то

?
08.08.2018
09:47:27
interface Apple {
function taste();
}
class Fruit implements Apple {
public function taste() {
}
}
$obj = new ReflectionClass('Fruit');
var_dump($obj->implementsInterface('Apple'));

Vitaly
08.08.2018
09:47:28
http://php.net/manual/ru/function.class-implements.php

Evgeniy
08.08.2018
09:47:52
опередили

Sergey
08.08.2018
09:48:40
http://php.net/manual/en/function.is-subclass-of.php

Evgeniy
08.08.2018
09:49:33

Admin
ERROR: S client not available

Roman
08.08.2018
09:50:18
я уже понял(

Anton
08.08.2018
09:59:45
Задача немного изменилась, надо проверить не интерфейс а класс от которого наследуется
нашел class_parents, спасибо всем

Vitaly
08.08.2018
10:05:18
Я вот сожалею, что ответил на вопрос чувака, касательно проверки интерфейса. Это гуглится за 30 секунд. По этому поводу идея, что если всем новым пользователям ставить статус readonly, и давать возможность писать сообщения только после успешного завершения теста, через специального бота?

Shmaltorhbooks
08.08.2018
10:05:45
После теста на iq)

Vitaly
08.08.2018
10:07:04

Sergey
08.08.2018
11:35:44
Привет
https://toster.ru/q/552902
Может кто-то знает ответ?

Dmitry
08.08.2018
11:37:43

Anton
08.08.2018
11:38:43
Похоже на нарушение LSP

Google

Anton
08.08.2018
11:38:53
Логически

Artem
08.08.2018
11:39:21

Anton
08.08.2018
11:39:23
Нельзя сужать диапазон входных параметров

F01134H
08.08.2018
11:40:21

Anton
08.08.2018
11:40:50
А вот как в PHP это реализовано и почему я не знаю
Но вообще, так нельзя код писать, если бы язык позволял это делать даже

F01134H
08.08.2018
11:41:07
PHP это боль
контрвариантность + в последней вроде версии ввели возможность убирать тайпхинт назначенный в интерфейсе ?♂️

Anton
08.08.2018
11:42:37
Не уверен, что контрвариантность применима в этом контексте

Artem
08.08.2018
11:42:53

Anton
08.08.2018
11:42:57
Это про метатипы
Про дженерики

F01134H
08.08.2018
11:43:26
просто он не в курсе что object это про другое
а есть еще stdClass

Anton
08.08.2018
11:44:00
Ты мне кажется неправильно применяешь ковариантность/котравариантность
Оно не про типы, а про метатипы

F01134H
08.08.2018
11:44:42

Anton
08.08.2018
11:45:21
ну у тебя есть List<Object>
Например
метатип я имею ввиду это List<template T>