
Jentry
18.06.2018
15:57:38
Еще подход - обложить все адаптерами - и отовсюду оборачиваться, смотря откуда запрашивал. К худшем случае еще коллбеками, которые сразу мапят вытаскиваемые данные

Bogdan (SirEdvin)
18.06.2018
15:58:23
Если у вас какой-то крутой бизнес-сектор, где все работают с терминалов - ну, круто.

Google

Bogdan (SirEdvin)
18.06.2018
16:01:39
Скажем, какому-то разработчику нужен был не id пользователя, а его имя. И вместо того, что бы делать два запроса, он решил просто поменять формат у orders сервиса.

Roman
18.06.2018
16:02:12

Bogdan (SirEdvin)
18.06.2018
16:03:06

Jentry
18.06.2018
16:03:40

Bogdan (SirEdvin)
18.06.2018
16:05:56
Я не совсем понимаю, что мешает абсолютно такую же аналитику и согласования сделать в монолите для модулей в коде? Или при переходе на микросервисы она сама возникает?
Даже если мы говорим про тот же python, уже есть mypy, который позволит сделать проверку на "этого поля в этом абстрактном классе нет"

Jentry
18.06.2018
16:08:08

Roman
18.06.2018
16:08:37

Bogdan (SirEdvin)
18.06.2018
16:08:38
А как вы избегаете такой же проблемы в микросервисе? Тестами или ручным ревью?

Jentry
18.06.2018
16:08:42
У меня питон-код обложен на 90% и больше юнитами, но все равно где-нибудь за стреляет, про какую ты аналитику говоришь
Ревью у нас везде есть, но заревьювить то, что изменяется api как-то гораздо проще, это проходит тщательный контроль и согласование всех отдельных разработчиков сервисов, если такие есть

Bogdan (SirEdvin)
18.06.2018
16:11:37
Ну, так API же тоже меняется в коде. Вы там добавляете какое-то поле и еще проверку на параметр в запросе.

Roman
18.06.2018
16:11:40

Google

Roman
18.06.2018
16:12:16

Jentry
18.06.2018
16:12:18
да, такую фигню мне и ide подсветит, в этом нет проблемы

Bogdan (SirEdvin)
18.06.2018
16:12:24

Jentry
18.06.2018
16:12:32

Bogdan (SirEdvin)
18.06.2018
16:13:17
Ну и, кто-то меняет grpc конфиг и загорается желтая лапмочка и все бегут ревьют? Окей, что мешает сделать аналогично, если, скажем, программист меняет модель или AbstractDummyService?

Roman
18.06.2018
16:14:34

Bogdan (SirEdvin)
18.06.2018
16:15:15
А на остальные забить

Roman
18.06.2018
16:15:40
и в рантайме остается только минимум проверок.

Tigran
18.06.2018
16:15:49
А давайте замутим сходочку monlithic vs microservices в стиле battle royale

Roman
18.06.2018
16:16:37

Jentry
18.06.2018
16:17:59

Tigran
18.06.2018
16:18:15
Уверен, у него есть друзья

Jentry
18.06.2018
16:18:25
Придется в биполярочку сразу за две стороны выступать, а это мы можем и локально

Roman
18.06.2018
16:18:58

[Anonymous]
18.06.2018
16:19:00
что за тренды
биполярные расстроства ото всех слышу
самоосознавать себя начали чтоли
психологи комнатые)

Google

Tigran
18.06.2018
16:19:42

Roman
18.06.2018
16:20:27

[Anonymous]
18.06.2018
16:20:52
новая информация

Jentry
18.06.2018
16:21:08

Tigran
18.06.2018
16:21:26
да Торвальдс вообще дилетант!

[Anonymous]
18.06.2018
16:21:41
только странно одно

Tigran
18.06.2018
16:21:44
https://kray-zemli.livejournal.com/368252.html

[Anonymous]
18.06.2018
16:21:49
инфу я эту получил год-2 назад

Tigran
18.06.2018
16:22:08
(это пост одного сумасшедшего бывшего коллеги)
ну и Торвальдс к нам, скорее всего, не придёт

Jentry
18.06.2018
16:25:04

Tigran
18.06.2018
16:26:43
ближе некуда

Roman
18.06.2018
16:29:26

Jentry
18.06.2018
16:34:07

Bogdan (SirEdvin)
18.06.2018
16:35:27

Roman
18.06.2018
16:35:48

Bogdan (SirEdvin)
18.06.2018
16:35:58
Дисскусии о цене решения довольно такое себе, потому что сильно зависит от подхода и в кадом случае будет разной.

Roman
18.06.2018
16:36:20

Google

Bogdan (SirEdvin)
18.06.2018
16:37:23
Использование разных языков под задачу?
https://hackernoon.com/extending-python-3-in-go-78f3a69552ac
https://developers.redhat.com/blog/2017/11/16/speed-python-using-rust/
Всегда можно сделать shared library и подключить если язык компилируемый. Если нет, всегда можно создать объект рантайма и с ним работать.

Jentry
18.06.2018
16:37:29

Bogdan (SirEdvin)
18.06.2018
16:38:36

first
18.06.2018
16:39:21
Ребят, есть кто работал с апи сайта на битриксе?

Bogdan (SirEdvin)
18.06.2018
16:39:43
Если у вас для каждого сервиса отдельный человек, так же можно сделать для каждого компонента в монолите.

Roman
18.06.2018
16:39:49

Bogdan (SirEdvin)
18.06.2018
16:40:57
Переписать конкретный кусок кода на cyhton?

Tigran
18.06.2018
16:41:17
Конкретного куска кода может и не быть

Bogdan (SirEdvin)
18.06.2018
16:41:50
Вот прямо вся django тормозит?

Jentry
18.06.2018
16:41:51

Tigran
18.06.2018
16:42:18
Очень много простых функций из разных модулей вызывают друг друга. Какой кусок кода переписывать?

Roman
18.06.2018
16:42:18

Bogdan (SirEdvin)
18.06.2018
16:44:19

Jentry
18.06.2018
16:44:48
К сведению питон-прогрммист перегоняется в го-программиста в среднем за 2 недели и способен уже нормально контрибутить

Bogdan (SirEdvin)
18.06.2018
16:46:01
Микросервисы писать проще, если у вас настроен процесс стандартизирования API, с этим никто не спорит. Проблема в том, что если у команды кто угодно может что угодно делать с кодом в монолите, от перехода на микросервисную архитектуру ничего не поменяется.

Jentry
18.06.2018
16:46:49
Полгода пишу, еще ничего не генерировал, чяднт?

Roman
18.06.2018
16:46:55

Google

Bogdan (SirEdvin)
18.06.2018
16:47:27
И даже interface{} не использовал? Магия какая-то :)

Jentry
18.06.2018
16:52:05

Bogdan (SirEdvin)
18.06.2018
16:54:33
Ну и чисто, что бы все-таки повторить свое мнение, я не то, что бы адепт монолита, но все еще считаю, что разработка микросервисов сложнее из-за того, что нужно уметь во-первых проектировать правильное API для них независимо друг от друга, во-вторых иметь отлично поставленный процесс для внесения изменений, который не позволяет связывать изменения в нескольких сервисах и творить херню.
У вас так - топово, но предлагая делать микросервисы тем, у кого с этим могут быть проблемы, вы предлагает им страдать за бесплатно, потому что преимуществ микросервисов они не получат, зато будут страдать.

Aragaer
18.06.2018
16:54:45
я тоже еще пока кодогенерацией не пользуюсь

Jentry
18.06.2018
16:56:15
Ну и чисто, что бы все-таки повторить свое мнение, я не то, что бы адепт монолита, но все еще считаю, что разработка микросервисов сложнее из-за того, что нужно уметь во-первых проектировать правильное API для них независимо друг от друга, во-вторых иметь отлично поставленный процесс для внесения изменений, который не позволяет связывать изменения в нескольких сервисах и творить херню.
У вас так - топово, но предлагая делать микросервисы тем, у кого с этим могут быть проблемы, вы предлагает им страдать за бесплатно, потому что преимуществ микросервисов они не получат, зато будут страдать.
В случае микросервисов они пострадают и научатся хоршему, закончив страдания, а в случае монолита я не уверен в необходимом времени - можно очень долго пытаться лопатой грести туда-сюда байтики, ничего не достигая архитектурно
Багдрайвен девелопмент)

Aragaer
18.06.2018
16:57:39
я правильно понимаю, что мокросервисы это попытка сделать юникс-вей?

Jentry
18.06.2018
16:58:14
Bogdan (SirEdvin) спасибо за дискуссию энивей, но мне пора уходить)

Aragaer
18.06.2018
16:58:21
но без учета того, что юникс-вей подразумевает две вещи (а не одну, которую обычно все имеют в виду, когда говорят про юникс-вей)

Bogdan (SirEdvin)
18.06.2018
16:58:38
Я не согласен с тем, что с микросервисами у них все будет лучше, но удачи)

Aragaer
18.06.2018
17:00:46
ну я поэтому говорю две вещи - потому что пункты 2 и 3 я бы переформулировал как "которые бы использовали простой универсальный интерфейс"

Roman
18.06.2018
17:08:38

Nikita
18.06.2018
17:11:26
ребят, посоветуйте по рефакту
явно дублирую код
https://pastebin.com/rbvPy2eP
чё тут можно сделать?

Aragaer
18.06.2018
17:13:44
ну я вижу функции, которые различаются только строкой sql
сразу скажу - не надо конструировать строку sql, надо делать prepare с плейсхолдерами и потом подставлять значения
но в любом случае можно сделать обертку для "правильного" выполнения стэйтмента. Например сделать декоратор
def my_decorator(func):
def inner(self, *args, **kwargs):
try:
бла-бла
cur = тыц-тыц
func(self, cur, *args, **kwargs)
бла-бла
except чота:
куда-то
return inner
...
@my_decorator
def add_email(self, cur, email='', status=0):
cur.execute(чего-то)

Nikita
18.06.2018
17:23:42
не сильно понял чё делать (разве что завернуть в декораторы)
но всяко спасиб
я хотел обернуть работу с бд в класс... что б поковырять ООП

Aragaer
18.06.2018
17:24:26
примерно так
cur.execute("INSERT INTO main_table(email, status) VALUES (?, ?)", email, status)