170 похожих чатов

Доброе утро. Недавно изучал пример от майкрософт, eshop on containers.

Это пример event driven архитектуры. И я заметил что в тестах для каждого микросервиса используются одинаковые классы для реализации авторизации. И они дублируются для каждого проекта тестов. Сделал PR на удаление этих дублей, но мне сказали что в микросервисной архитектуре такая реализация это норма, чтобы не делать лишних связей между проектами. И вот я не понимаю, а почему? Почему лучше задублировать код, а не сделать референс на другой проект, где такой код есть?

16 ответов

23 просмотра

Потому что микросервисы не должны зависеть друг от друга, чтоб их независимо можно было вести А Вы куда код вынесли дублирующий?

Дублирование кода - дело заведомо плохое, хотя бы потому, что изменив его в одном месте тебе нужно не забыть его изменить во всех остальных

CountNeuroman- Автор вопроса
Michael Snytko
в тестах для каждого микросервиса

Ну ок, тогда нужно тащить с собой отдельную зависимость только для тестов

CountNeuroman- Автор вопроса
Oleg Safonov
Ну ок, тогда нужно тащить с собой отдельную зависи...

Вот там вроде такая и была, я собственно там оставил, в остальных удалил

Artem iokir
Дублирование кода - дело заведомо плохое, хотя бы ...

Есть другая сторона. Когда раньше времени выносишь, а потом одному нужно правки внести, а другому нет

Oleg Safonov
Ну ок, тогда нужно тащить с собой отдельную зависи...

Зависимость - интерфейс, который: 1) Гораздо проще таскать с собой 2) Можно соблюдать обратную совместимость и не делать брейкингов, тогда это вообще не проблема

Oleg Safonov
Есть другая сторона. Когда раньше времени выносишь...

Тут важен изначально правильно описаный контракт взаимодействия между сервисами

Artem iokir
Зависимость - интерфейс, который: 1) Гораздо проще...

Согласен. Я против изначально "дублирование всегда плохо и нужно выносить" - нет, не всегда

CountNeuroman- Автор вопроса
Oleg Safonov
Согласен. Я против изначально "дублирование всегда...

Вот я вот в этом и хочу разобраться. Когда же лучше убрать дубли, а когда они могут быть нужны

Oleg Safonov
Согласен. Я против изначально "дублирование всегда...

Всегда все решается индивидуально, зависит от того какую архитектуру и развитие проекты ты закладываешь) Естественно, если у тебя два сервиса и в них есть немного схожего кода, то ты потратишь больше сил на обеспечение микросервисности. А есть у тебя 50 сервисов используют одинаковый кусок кода, да его еще и масштабировать под нагрузку надо - это мастхэв

CountNeuroman
Вот я вот в этом и хочу разобраться. Когда же лучш...

Есть правило, что два повтора норм, в три - уже повод задуматься Но, в первую очередь,головой думать))

CountNeuroman
Вот я вот в этом и хочу разобраться. Когда же лучш...

В случае с аутентификацией/авторизацией вынесение в отдельный сервис еще важно по причине централизованного управления ей. Даже на примере JWT токенов, тебе нужно уметь ими управлять. Даже тем же secret'om для вычисления сигнатуры

Artem iokir
В случае с аутентификацией/авторизацией вынесение ...

В разных микросервисах разная авторизация может быть)

Oleg Safonov
В разных микросервисах разная авторизация может бы...

Согласен, зависит от кейса) Но аутентификация обычно одна)

Похожие вопросы

Обсуждают сегодня

а через ESC-код ?
Alexey Kulakov
29
30500 за редактор? )
Владимир
47
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
13
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
в JclConsole объявлено так: function CtrlHandler(CtrlType: DWORD): BOOL; stdcall; - где ваше объявление с stdcall? у вас на картинке нет stdcall
Karagy
8
Как передать управляющий символ в открытую через CreateProcess консоль? Собсна, есть процедура: procedure TRedirectThread.WriteData(Data: OEMString); var Written: Cardinal;...
Serjone
6
Ребят в СИ можно реализовать ООП?
Николай
33
program test; {$mode delphi} procedure proc(v: int32); overload; begin end; procedure proc(v: int64); overload; begin end; var x: uint64; begin proc(x); end. Уж не знаю...
notme
6
у вас два процесса. один посылает другому сигнал. у вас есть код обоих процессов? если всё не так - расскажите как оно на самом деле. а именно кто кому чего, есть-ли консоли,...
Karagy
6
Карта сайта