Я бы не сказал что это из функционального программирования. То о чем пишет valery1707 это банальное соблюдение SOLID, разделение на слои (Транспортный, бизнес сервис, хранение данных и т.д.). Отделение бизнес логики от различных технических штук. В первоначальном варианте консюмер сочетает две роли 1) Транспортную - точка входа, где мы получаем объект из кафки. 2) декоратор - содержащий цепочку вызову всего бизнес процесса. Нарушен принцип единственной ответственности.
Не претендую на последнюю инстанцию, выскажу свое мнение - вы смешиваете транспортный уровень и бизнес логику. И от этого ваши мучения. Консюмер транспортный уровень его задача - получить дто в нужном формате, конвертнуть в модель и скормить сервису (бизнес сервису или круд-сервису - если нам нужно просто сохранить). И уже внутри этого сервиса если нужно вы вызываете публикацию в другой какой то топик. Профит - консюмер становится простой до безобразия. Некоторые горячие головы даже не тестят а другие накидывают очень простой тест на моках (который в состоянии написать любой джун - т.к. по сути просто проверить вызовы через verify() ). Логика у вас изолирована от транспорта, и, если в какой то момент у вас появляется взаимодействие по ресту, например, вы легко и не принужденно делаете контроллер и вызываете всю ту же цепочку от конвертера из дто в модель до публикации в новый топик.
Я бы не сказал что это из функционального программирования. То о чем пишет valery1707 это банальное соблюдение SOLID, разделение на слои (Транспортный, бизнес сервис, хранение данных и т.д.). Отделение бизнес логики от различных технических штук. В первоначальном варианте консюмер сочетает две роли 1) Транспортную - точка входа, где мы получаем объект из кафки. 2) декоратор - содержащий цепочку вызову всего бизнес процесса. Нарушен принцип единственной ответственности.
Не претендую на последнюю инстанцию, выскажу свое мнение - вы смешиваете транспортный уровень и бизнес логику. И от этого ваши мучения. Консюмер транспортный уровень его задача - получить дто в нужном формате, конвертнуть в модель и скормить сервису (бизнес сервису или круд-сервису - если нам нужно просто сохранить). И уже внутри этого сервиса если нужно вы вызываете публикацию в другой какой то топик. Профит - консюмер становится простой до безобразия. Некоторые горячие головы даже не тестят а другие накидывают очень простой тест на моках (который в состоянии написать любой джун - т.к. по сути просто проверить вызовы через verify() ). Логика у вас изолирована от транспорта, и, если в какой то момент у вас появляется взаимодействие по ресту, например, вы легко и не принужденно делаете контроллер и вызываете всю ту же цепочку от конвертера из дто в модель до публикации в новый топик.