Upgrade to Pro — share decks privately, control downloads, hide ads and more …

[SnowOne 2025] Артём Бояршинов: Fluent API на Java

[SnowOne 2025] Артём Бояршинов: Fluent API на Java

Вы замечали, что при использовании одних библиотек вам постоянно приходится копаться в исходниках, штудировать Javadocs, а при использовании других — код будто сам пишется, и нужные методы выпрыгивают в подсказках IDE? Это происходит из-за разных подходов к проектированию API. Такие API, в которых последовательный вызов методов выстраивается в цепочку, формируя DSL-библиотеки, называются Fluent API.

Из доклада вы узнаете, почему Fluent API — это больше чем Builder. Рассмотрим различные приемы проектирования Fluent API на примере популярных библиотек: Spring Security, AssertJ, Awaitility и других. Напишем свой небольшой Fluent API.

Видео: https://youtu.be/iamsGOHNpCo

Avatar for jugnsk

jugnsk

May 08, 2025
Tweet

More Decks by jugnsk

Other Decks in Programming

Transcript

  1. Артём Бояршинов - Software developer - СБП - Система быстрых

    платежей - Был в ПК Podlodka Java Crew 2 https://github.com/Boiarshinov/fluent-api-demo
  2. Fluent API - это API, реализующий внутренний DSL, нацеленный на

    удобство чтения и использования. Martin Fowler 6 https://martinfowler.com/bliki/FluentInterface.html
  3. СБП Прокси / Gateway 15 Клиенты API СБП Бэкенд Т-

    Банка Бэкенд СБП Proxy / Gateway СПб СБП СПб СБП
  4. СБП Прокси / Gateway. Фичи • Список получателей • Балансировка

    запросов по получателям • Контроль request’ов ◦ Проверка входящего контента на вхождение в черный список • Контроль respons’ов ◦ Замена части исходящего контента 16
  5. Приёмы Fluent API 18 • Method chaining - последовательный вызов

    методов • Step interfaces - шаги, регулирующие последовательность и обязательность вызова методов • Смена контекста ◦ С помощью method chaining ◦ С помощью лямбда-выражений • Selftypes - самообобщение
  6. Приёмы Fluent API 22 • Method chaining - последовательный вызов

    методов • Step interfaces - шаги, регулирующие последовательность и обязательность вызова методов • Смена контекста ◦ С помощью method chaining ◦ С помощью лямбда-выражений • Selftypes - самообобщение
  7. 24

  8. Приёмы Fluent API 25 • Method chaining - последовательный вызов

    методов • Step interfaces - шаги, регулирующие последовательность и обязательность вызова методов • Смена контекста ◦ С помощью method chaining ◦ С помощью лямбда-выражений • Selftypes - самообобщение
  9. 27

  10. Смена контекста 30 • Для визуализации смены контекста нужны отступы

    • Отступы пропадают при автоформатировании • Паразитные методы and() для переходов между контекстами
  11. Приёмы Fluent API 31 • Method chaining - последовательный вызов

    методов • Step interfaces - шаги, регулирующие последовательность и обязательность вызова методов • Смена контекста ◦ С помощью method chaining ◦ С помощью лямбда-выражений • Selftypes - самообобщение
  12. 32

  13. Приёмы Fluent API 33 • Method chaining - последовательный вызов

    методов • Step interfaces - шаги, регулирующие последовательность и обязательность вызова методов • Смена контекста ◦ С помощью method chaining ◦ С помощью лямбда-выражений • Selftypes - самообобщение
  14. Когда писать? • Фреймворк • Либа для многих команд •

    PR в Lombok для обязательных полей в Builder :) 37
  15. Приёмы Fluent API 38 • Method chaining - последовательный вызов

    методов • Step interfaces - шаги, регулирующие последовательность и обязательность вызова методов • Смена контекста ◦ С помощью method chaining ◦ С помощью лямбда-выражений • Selftypes - самообобщение • …