Это пример event driven архитектуры. И я заметил что в тестах для каждого микросервиса используются одинаковые классы для реализации авторизации. И они дублируются для каждого проекта тестов. Сделал PR на удаление этих дублей, но мне сказали что в микросервисной архитектуре такая реализация это норма, чтобы не делать лишних связей между проектами. И вот я не понимаю, а почему? Почему лучше задублировать код, а не сделать референс на другой проект, где такой код есть?
Потому что микросервисы не должны зависеть друг от друга, чтоб их независимо можно было вести А Вы куда код вынесли дублирующий?
в тестах для каждого микросервиса
Дублирование кода - дело заведомо плохое, хотя бы потому, что изменив его в одном месте тебе нужно не забыть его изменить во всех остальных
Вот и мне тоже всегда так внушали
Ну ок, тогда нужно тащить с собой отдельную зависимость только для тестов
Вот там вроде такая и была, я собственно там оставил, в остальных удалил
Есть другая сторона. Когда раньше времени выносишь, а потом одному нужно правки внести, а другому нет
Зависимость - интерфейс, который: 1) Гораздо проще таскать с собой 2) Можно соблюдать обратную совместимость и не делать брейкингов, тогда это вообще не проблема
Тут важен изначально правильно описаный контракт взаимодействия между сервисами
Согласен. Я против изначально "дублирование всегда плохо и нужно выносить" - нет, не всегда
Вот я вот в этом и хочу разобраться. Когда же лучше убрать дубли, а когда они могут быть нужны
Всегда все решается индивидуально, зависит от того какую архитектуру и развитие проекты ты закладываешь) Естественно, если у тебя два сервиса и в них есть немного схожего кода, то ты потратишь больше сил на обеспечение микросервисности. А есть у тебя 50 сервисов используют одинаковый кусок кода, да его еще и масштабировать под нагрузку надо - это мастхэв
Есть правило, что два повтора норм, в три - уже повод задуматься Но, в первую очередь,головой думать))
В случае с аутентификацией/авторизацией вынесение в отдельный сервис еще важно по причине централизованного управления ей. Даже на примере JWT токенов, тебе нужно уметь ими управлять. Даже тем же secret'om для вычисления сигнатуры
В разных микросервисах разная авторизация может быть)
Согласен, зависит от кейса) Но аутентификация обычно одна)
Обсуждают сегодня