TGViewer
Лаборатория Математики и Программирования Сергея Бобровского Лаборатория Математики и Программирования Сергея Бобровского @lambda_brain · 1.41K subscribers
Post #2126 746
...Однако контролеры стали более объёмными, так как там добавилось сущностей и они теперь больше знают. Насколько я понимаю, мы перешли к какой-то другой архитектуре, не луковой/чистой.

А ещё показалось, что в луковой архитектуре, ну или том, подобии, что сделал я, не очень сложно тестировать бизнес-логику, по крайней мере в моём случае(Java + Spring). У нас же тут всё на DI и чтобы протестировать логику сервиса я могу просто в тесте вызывать методы этого сервиса, а ответ от БД замокать. И как будто получается почти то же самое, что и при переносе I/O в контроллеры. Также мы можем замокать ответы от сервисов/валидаторов в контроллере. Но возможно, что дело в Spring и его устройстве, а в других стеках всё иначе. Либо у меня пока мало опыта, чтобы осознать почему это плохо даже в Spring с его DI.

1. Какой контроллер мы можем считать "тонким"?
Тот, который вызывает лишь один метод или главное, чтобы такой контроллер не содержал в себе никакой бизнес-логики? И если контроллер будет вызывать валидатор, сервис, маппер, но при этом все эти вещи будут объявлены где-то в другом месте, а в контроллере нет никаких циклов/условий, то этот контроллер можно назвать "тонким".

2. Не совсем чётко понимаю границы "бизнес-логики". Что к ней относится? Вообще всё, что мы вычисляем на бэке(грубо говоря, есть цикл/условие или какое-нибудь преобразование данных -- то это бизнес-логика) или только то, что имеет отношение к нашей доменной области(тут имею в виду действия, совершаемые в рамках спецификации, ожиданий заказчика)? Является ли валидация входных параметров частью бизнес-логики? Или выбор нужного метода для обработки данных?

Глубокие вопросы, и действительно есть довольно тонкий и неочевидный нюанс. Тут нужно продвинутое понимание, чем луковичная архитектура отличается от гексагональной; мы думаем, что делаем порты и адаптеры, но нет -- это просто интерфейсы и полиморфизм, сермяга совсем в другом (чистая семантика домена и частично подходы из DDD). Подробно разберём на "Функциональных архитектурах".

Что интересно, если копать эту тему глубже, то мы придём к тому, что доказали ещё 100 лет назад Тьюринг и Чёрч, и даже Гёдель... Может ли быть язык (формальные спецификации), описывающий предметную область, Тьюринг-полным? В целом нет, но в каждом проекте мы можем к этому стремиться.

Мне тут очень нравится подход святого Эдвина Брэдли, автора Idris - языка с завтипами и пруф-ассистанта (см его книгу "Type-Driven Development with Idris"), который он пытается хотя бы немножко, хотя бы на уровне Хаскеля (так-то Idris его рвёт как тузик грелку), вывести в мэйнстрим. Брэдли предложил более прагматичное понятие "PacMan-полный" язык :)

Если мы можем закодить на некотором "тьюринг-неполном" языке игру в пакмэн, значит, он подходит для 80%..98% повседневных задач.

Точно так же и тут: я покажу, как один, по сути, "PacMan-полный" в архитектурном смысле паттерн (не парадигма, не концепция, не универсальность, как в Clean или DDD) даёт невероятную, буквально магическую, силу. Подходит он не всегда и не везде, но когда попадает в цель...
  • 👍 37
  • ⚡ 12
  • 🏆 4
  • ❤‍🔥 3
More from @lambda_brain
  1. Oct 1, 2026Ребята спрашивают, ну ок, моё скромное мнение. у вас где-нибудь можно прочитать ваше мнени…
  2. Sep 30, 2026Ладно, вот вам база, почему так трудно переучиваться с императивного/объектного стиля коди…
  3. Sep 30, 2026Ну, с Днём Рунета! Многие годы Рунет был эталонным примером свободы, а сегодня превратился…
  4. Sep 28, 2026. Облако драгоценностей за неделю. Дипломный проект разросся уже так, что расширил его до…
  5. Sep 27, 2026GELU (Gaussian Error Linear Unit) -- базовая фича архитектуры трансформеров, да и вообще в…
  6. Sep 27, 2026Продолжение сериала "Совершенно не удивлён, и дальше будет только хуже" (с) На этой неделе…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →