Предметно-ориентированное проектирование в Enterprise Java с помощью Jakarta ЕЕ, Eclipse MicroProfile, Spring Boot и программной среды Axon Framework
Покупка
Тематика:
Программирование на Java
Издательство:
ДМК Пресс
Автор:
Наир Виджей
Перевод:
Снастин А. В.
Год издания: 2020
Кол-во страниц: 306
Дополнительно
Вид издания:
Практическое пособие
Уровень образования:
ВО - Специалитет
ISBN: 978-5-97060-872-2
Артикул: 748361.01.99
Доступ онлайн
В корзину
В книге подробно рассматриваются реализации шаблонов предметно-ориентированного проектирования с применением различных инструментальных средств и рабочих программных сред из Enterprise Java Space. При таком подходе читатель получает завершенную картину и возможность практического применения любого из этих средств в процессе предметно-ориентированного проектирования. В начальных главах описывается эталонная реализация проекта Cargo Tracker -создание монолитного приложения с использованием платформы Jakarta ЕЕ. Затем рассматривается полный процесс преобразования монолитного приложения в архитектуру, основанную на микросервисах. В заключительных главах демонстрируется создание версии приложения с использованием шаблонов CORS и Event Sourcing (ES); основной рабочей средой является Axon Framework. Издание будет полезно специалистам, приступающим к работе в среде Enterprise Java, ведущим разработчикам, которые осуществляют переход с монолитной архитектуры к архитектурам на основе микросервисов, а также для архитекторов ПО, осваивающих методику предметно-ориентированного проектирования для создания приложений.
Тематика:
ББК:
УДК:
ОКСО:
- ВО - Специалитет
- 09.05.01: Применение и эксплуатация автоматизированных систем специального назначения
ГРНТИ:
Скопировать запись
Фрагмент текстового слоя документа размещен для индексирующих роботов.
Для полноценной работы с документом, пожалуйста, перейдите в
ридер.
Виджей Наир Предметно-ориентированное проектирование в Enterprise Java с помощью Jakarta EE, Eclipse MicroProfile, Spring Boot и программной среды Axon Framework
Practical Domain-Driven Design in Enterprise Java Using Jakarta EE, Eclipse MicroProfile, Spring Boot, and the Axon Framework Vijay Nair
Предметно-ориентированное проектирование в Enterprise Java с помощью Jakarta EE, Eclipse MicroProfile, Spring Boot и программной среды Axon Framework Виджей Наир Москва, 2020
УДК 004.42Java ББК 32.972 Н20 Наир В. Н20 Предметно-ориентированное проектирование в Enterprise Java с помощью Jakarta EE, Eclipse MicroProfile, Spring Boot и программной среды Axon Framework / пер. с англ. А. В. Снастина. – М.: ДМК Пресс, 2020. – 306 с.: ил. ISBN 978-5-97060-872-2 В книге подробно рассматриваются реализации шаблонов предметно-ориентированного проектирования с применением различных инструментальных средств и рабочих программных сред из Enterprise Java Space. При таком подходе читатель получает завершенную картину и возможность практического применения любого из этих средств в процессе предметно-ориентированного проектирования. В начальных главах описывается эталонная реализация проекта Cargo Tracker – создание монолитного приложения с использованием платформы Jakarta EE. Затем рассматривается полный процесс преобразования монолитного приложения в архитектуру, основанную на микросервисах. В заключительных главах демонстрируется создание версии приложения с использованием шаблонов CQRS и Event Sourcing (ES); основной рабочей средой является Axon Framework. Издание будет полезно специалистам, приступающим к работе в среде Enterprise Java, ведущим разработчикам, которые осуществляют переход с монолитной архитектуры к архитектурам на основе микросервисов, а также для архитекторов ПО, осваивающих методику предметно-ориентированного проектирования для создания приложений. УДК 004.42Java ББК 32.972 First published in English under the title Practical Domain-Driven Design in Enterprise Java; Using Jakarta EE, Eclipse MicroProfile, Spring Boot, and the Axon Framework by Vijay Nair, edition: 1. This edition has been translated and published under licence from APress Media, LLC, part of Springer Nature. APress Media, LLC, part of Springer Nature takes no responsibility and shall not be made liable for the accuracy of the translation. Russian language edition copyright © 2020 by DMK Press. All rights reserved. Все права защищены. Любая часть этой книги не может быть воспроизведена в какой бы то ни было форме и какими бы то ни было средствами без письменного разрешения владельцев авторских прав. ISBN 978-1-4842-4542-2 (англ.) Copyright © Vijay Nair, 2019 ISBN 978-5-97060-872-2 (рус.) © Оформление, издание, перевод, ДМК Пресс, 2020
Посвящается Тине и Майе
Содержание Об авторе ...........................................................................................................11 О техническом рецензенте ........................................................................12 Благодарности .................................................................................................13 Введение ............................................................................................................14 От издательства ..............................................................................................15 Глава 1. Предметно-ориентированное проектирование ...............16 Концепции предметно-ориентированного проектирования ...........................17 Предметная область/бизнес-домен .................................................................17 Поддомены/ограниченные контексты ...........................................................19 Модель предметной области................................................................................22 Агрегаты/объекты-сущности/объекты-значения ..........................................23 Правила предметной области ..........................................................................24 Команды/запросы .............................................................................................25 События .............................................................................................................26 Саги ....................................................................................................................26 Резюме ...................................................................................................................27 Глава 2. Проект Cargo Tracker ....................................................................29 Основная предметная область (домен) ...............................................................29 Проект Cargo Tracker: поддомены/ограниченные контексты ...........................30 Проект Cargo Tracker: модель предметной области (домена) ...........................33 Агрегаты ............................................................................................................34 Идентификаторы агрегатов .............................................................................34 Сущности ...........................................................................................................35 Объекты-значения ...........................................................................................36 Проект Cargo Tracker: операции модели предметной области (домена) .........39 Саги ........................................................................................................................40 Сервисы модели предметной области ................................................................41 Проектирование сервисов модели предметной области (домена) ...................43 Проект Cargo Tracker : реализации с использованием предметно-ориентированного проектирования ...............................................45 Резюме ...................................................................................................................46 Глава 3. Проект Cargo Tracker: Jakarta EE .............................................47 Платформа Java EE ................................................................................................48 Смена торговой марки на Jakarta EE и дальнейшее развитие ...........................48
Содержание 7 Спецификации платформы Jakarta EE ................................................................49 Технологии веб-приложений ...........................................................................50 Сервлет Java ..............................................................................................50 JavaServer Faces .........................................................................................51 JavaServer Pages .........................................................................................51 Expression Language ..................................................................................51 JSP Standard Tag Library (JSTL) .................................................................52 Java API для WebSocket .............................................................................52 Java API для связывания с форматом JSON ............................................52 Java API для обработки формата JSON ....................................................52 Технологии корпоративных приложений ......................................................52 Enterprise Java Beans (3.2) .........................................................................52 Contexts and Dependency Injection для Java (2.0) ....................................53 Валидация компонентов Bean .................................................................53 Java Persistence API (JPA) ..........................................................................53 Java Transaction API (JTA) .........................................................................54 Общие аннотации (Common Annotations) ..............................................54 Перехватчики (Interceptors) .....................................................................54 Веб-сервисы в Jakarta EE ..................................................................................54 Java API for RESTful Web Services (JAX-RS) ..............................................54 Технологии обеспечения безопасности ..........................................................54 Java EE Security API (1.0) ...........................................................................55 Итоговый обзор спецификаций Jakarta EE .....................................................55 Cargo Tracker как модульное монолитное приложение .....................................55 Ограниченные контексты с использованием платформы Jakarta EE ...........56 Пакет interfaces .........................................................................................58 Пакет application .......................................................................................59 Пакет domain .............................................................................................60 Пакет infrastructure...................................................................................61 Совместно используемые ядра ................................................................61 Реализация модели предметной области (домена) с использованием Jakarta EE ...........................................................................................................62 Агрегаты ....................................................................................................62 Сущности ...................................................................................................70 Объекты-значения ...................................................................................72 Правила предметной области (домена) ..................................................76 Команды ....................................................................................................77 Запросы .....................................................................................................78 Реализация сервисов предметной области с использованием Jakarta EE ....79 Входящие сервисы ............................................................................................79 RESTful API ........................................................................................................79 Собственные веб-API ........................................................................................80 Сервисы приложения .......................................................................................81 Сервисы приложения: события .......................................................................83 Исходящие сервисы ..........................................................................................86 Общая схема реализации .................................................................................87 Резюме ...................................................................................................................88
Содержание Глава 4. Проект Cargo Tracker: Eclipse MicroProfile ..........................89 Платформа Eclipse MicroProfile ............................................................................89 Платформа Eclipse MicroProfile: функциональные возможности .....................91 Платформа MicroProfile: основные спецификации .......................................93 Конфигурация Eclipse MicroProfile ..........................................................93 Проверка работоспособности Eclipse MicroProfile .................................94 Аутентификация Eclipse MicroProfile JWT Authentication .....................94 Метрики Eclipse MicroProfile....................................................................94 Eclipse MicroProfile OpenAPI ....................................................................94 Eclipse MicroProfile OpenTracing ..............................................................94 Eclipse MicroProfile Type Safe Rest Client .................................................95 Eclipse MicroProfile: спецификации поддержки .............................................95 Context and Dependency Injection (CDI) for Java (2.0) ..............................95 Общие аннотации .....................................................................................96 Java API for RESTful Web Services (JAX-RS) ..............................................96 Java API for JSON Binding ..........................................................................96 Java API for JSON Processing .....................................................................96 Итоговый обзор спецификаций Eclipse MicroProfile .....................................97 Реализация Cargo Tracker: Eclipse MicroProfile ...................................................97 Выбор реализации: проект Helidon MP ...........................................................98 Реализация Cargo Tracker: ограниченные контексты ....................................99 Ограниченные контексты: создание пакетов ..............................................101 Ограниченные контексты: структура пакета ...............................................103 Интерфейсы ............................................................................................104 Приложение ............................................................................................105 Предметная область (домен) .................................................................106 Инфраструктура ......................................................................................106 Реализация приложения Cargo Tracker .........................................................108 Модель предметной области (домена): реализация ....................................110 Модель основного домена: реализация ........................................................111 Агрегаты, сущности и объекты-значения ............................................111 Операции модели предметной области (домена) ........................................122 Команды ..................................................................................................122 Запросы ...................................................................................................125 События ...................................................................................................125 Сервисы модели предметной области (домена) ..........................................128 Входящие сервисы ..................................................................................129 Сервисы приложения .............................................................................136 Исходящие сервисы ................................................................................144 Итоговый обзор реализации..........................................................................159 Резюме .................................................................................................................160 Глава 5. Проект Cargo Tracker: платформа Spring ...........................161 Платформа Spring ...............................................................................................162 Spring Boot: функциональные возможности ................................................164 Spring Cloud .....................................................................................................165
Содержание 9 Итог краткого обзора рабочей среды Spring .................................................166 Ограниченные контексты и платформа Spring Boot ........................................166 Ограниченные контексты: формирование пакетов ....................................168 Ограниченные контексты: структура пакета ...............................................169 Пакет interfaces ...............................................................................................171 Пакет application .............................................................................................171 Пакет domain ...................................................................................................172 Пакет infrastructure .........................................................................................173 Реализация приложения Cargo Tracker .........................................................176 Модель предметной области (домена): реализация ........................................177 Модель основного домена: реализация ........................................................178 Агрегаты, сущности и объекты-значения ............................................178 Операции модели предметной области (домена) ........................................188 Команды ..........................................................................................................188 Запросы ...........................................................................................................191 События ...........................................................................................................192 Регистрация событий .............................................................................194 Сервисы модели предметной области (домена) ..............................................197 Входящие сервисы ..........................................................................................198 REST API ..................................................................................................198 Сервисы приложения .....................................................................................206 Сервисы приложения: делегирование команд и запросов .................207 Исходящие сервисы ........................................................................................211 Исходящие сервисы: классы репозиториев..........................................212 Исходящие сервисы: REST API ..............................................................213 Итоговый обзор реализации..........................................................................225 Резюме .................................................................................................................225 Глава 6. Проект Cargo Tracker: рабочая среда Axon .......................226 Шаблон Event Sourcing .......................................................................................227 Методика CQRS ...................................................................................................230 Рабочая среда Axon .............................................................................................233 Компоненты рабочей среды Axon .................................................................233 Компоненты предметной области (домена) Axon Framework .....................234 Агрегаты ..................................................................................................234 Команды и обработчики команд ...........................................................235 События и обработчики событий ..........................................................235 Обработчики запросов ...........................................................................235 Саги .........................................................................................................235 Компоненты модели регулирования и координации Axon Framework ......236 Шина команд ..........................................................................................236 Шина запросов ........................................................................................237 Шина событий .........................................................................................238 Саги .........................................................................................................239 Компоненты инфраструктуры Axon: Axon Server ........................................240 Приложение Cargo Tracker и рабочая среда Axon .............................................244 Ограниченные контексты в Axon ..................................................................244
Содержание Ограниченные контексты: создание артефакта ..........................................247 Ограниченные контексты: структура пакета ...............................................248 Пакет interfaces .......................................................................................249 Пакет application .....................................................................................250 Пакет domain ...........................................................................................251 Пакет infrastructure.................................................................................251 Реализация модели предметной области с использованием Axon.............254 Агрегаты ..................................................................................................254 Состояние ................................................................................................257 Обработка команд ..................................................................................261 Публикация событий ..............................................................................265 Сопровождение состояния ....................................................................267 Проекции агрегатов ...............................................................................278 Обработчики запросов ...........................................................................282 Саги .........................................................................................................286 Подведение итогов реализации ....................................................................291 Реализация сервисов модели предметной области (домена) с использованием Axon ..................................................................................292 Входящие сервисы ..................................................................................292 Сервисы приложения .............................................................................296 Резюме .................................................................................................................298 Предметный указатель ..............................................................................299
Об авторе Виджей Наир (Vijay Nair) в настоящее время является руководителем подразделения проектирования и разработки платформ для банковских приложений типа «программное обеспечение как услуга» (SaaS) компании Oracle. Как энтузиаст предметно-ориентированного проектирования и распределенных систем, он обладает 18-летним практическим опытом в области проектирования архитектуры, создания и реализации особо ответственных приложений непрерывного действия для сферы финансовых услуг по всему миру. Виджей Наир доступен для общения на собственном веб-сайте www.practicalddd.com или через «Твиттер» @FusionVJ. Виджей Наир живет в Маунтин Вью (Калифорния) вместе с женой и дочерью.
О техническом рецензенте Мануэль Хордан (Джордан) Элера (Manuel Jordan Elera) – разработчик и исследователь-самоучка (автодидакт), которому очень нравится изучать и осваивать новые технологии на собственном практическом опыте (экспериментах) и создавать новые технологические комбинации. Мануэль является обладателем наград Springy Award – Community Champion и Spring Champion 2013. Несмотря на дефицит свободного времени, он читает Библию и играет на гитаре, сочиняет музыку. Мануэль известен под псевдонимом dr_pompeii. Он является техническим рецензентом многочисленных книг издательства Apress, в том числе Pro Spring, Fourth Edition (2014); Practical Spring LDAP (2013); Pro JPA 2, Second Edition (2013) и Pro Spring Security (2013). Можно прочесть его 13 подробных руководств по многим технологиям Spring, а также связаться с ним лично через его блог на сайте www.manueljordanelera.blogspot.com и наблюдать за его деятельностью в аккаунте «Твиттера» @dr_pompeii.
Благодарности В первую очередь моя самая глубокая сердечная благодарность за то, что создание этой книги стало возможным, адресована гуру Jakarta EE (Enterprise Edition) Реза Рахману (Reza Rahman). Работая в компании Oracle, он создал инициативное направление Cargo Tracker как эскизный проект для Java EE Patterns на основе предметно-ориентированного проектирования (DDD). Я буду вечно благодарен ему за предоставленную мне возможность участвовать в этом проекте. Благодарю приверженца предметно-ориентированного проектирования и энтузиаста использования программной среды Axon Framework Свапнила Сурве (Swapnil Surve), инженера-архитектора ПО из Феникса (Phoenix) за техническое рецензирование содержимого и предложения по главам 5 и 6. Отдельная благодарность Элларду Бьюзи (Allard Buijze) (создателю программной среды Axon Framework) за техническое рецензирование главы 6. Спасибо всем сотрудникам компании Oracle, которые помогали написать эту книгу, моим руководителям (Викраму, Тиксу, Чету) и моей команде подчиненных, которые ежедневно обучают меня (Сурабу, Шрипаду, Хари, Павану, Дашарату и Махендрану). Спасибо городу Маунтин Вью (Калифорния) за предоставление отдельной комнаты в потрясающей библиотеке, где я провел многие часы за написанием этой книги. Если в семье появляется новорожденный, то человек в здравом уме вряд ли займется написанием книги. Поддержка моей семьи была колоссальной на протяжении всего периода работы над книгой, и я безмерно благодарен за это. Спасибо моим братьям Гаутаму, Рохиту, Сумиту и Сачину, моей сестре Вините и ее мужу Мадху, моим детям Варуну и Арье, наконец моим родителям и родителям моей жены, за то, что они не пожалели своего времени и были с нами, помогали нам. Последняя, но самая главная благодарность моей жене Тине. Она разрывалась между множеством дел, заботилась о новорожденном и обеспечивала мне возможность работать над книгой, прилагая нечеловеческие усилия и в прямом смысле жертвуя собой. Эта книга твоя в той же мере, что и моя. Спасибо тебе.
Введение Предметно-ориентированное проектирование (Domain Driven Design) никогда не было настолько востребованным, как в современном мире разработки программного обеспечения. Концепции и шаблоны предметно-ориентированного проектирования помогают создавать правильно спроектированные приложения масштаба предприятия вне зависимости от того, являются ли эти приложения привычными монолитным программами или более современными приложениями на основе микросервисов. Цель этой книги – снять покров мистики с концепций предметно-ориентированного проектирования, представив практические методы их реализации для более привычных устоявшихся монолитных приложений, а также для современных приложений, использующих микросервисы. С помощью реально существующего проекта приложения Cargo Tracker в книге подробно рассматриваются практические реализации разнообразных шаблонов предметноориентированного проектирования для обоих стилей приложений с применением различных инструментальных средств и рабочих программных сред из Enterprise Java Space (Jakarta EE, Eclipse MicroProfile, Spring Boot и Axon Framework). При таком подходе читатель получает полностью завершенную картину и возможность практического использования любого из этих инструментальных программных средств и сред в собственном процессе предметно-ориентированного проектирования. Надеюсь, что чтение этой книги принесет вам пользу.
От издательства Отзывы и пОжелания Мы всегда рады отзывам наших читателей. Расскажите нам, что вы думаете об этой книге, – что понравилось или, может быть, не понравилось. Отзывы важны для нас, чтобы выпускать книги, которые будут для вас максимально полезны. Вы можете написать отзыв прямо на нашем сайте www.dmkpress.com, зайдя на страницу книги, и оставить комментарий в разделе «Отзывы и рецензии». Также можно послать письмо главному редактору по адресу dmkpress@gmail. com, при этом напишите название книги в теме письма. Если есть тема, в которой вы квалифицированы, и вы заинтересованы в написании новой книги, заполните форму на нашем сайте http://dmkpress.com/ authors/publish_book/ или напишите в издательство: dmkpress@gmail.com. СпиСОк ОпечатОк Хотя мы приняли все возможные меры для того, чтобы удостовериться в качестве наших текстов, ошибки все равно случаются. Если вы найдете ошибку в одной из наших книг – возможно, ошибку в тексте или в коде, – мы будем очень благодарны, если вы сообщите нам о ней. Сделав это, вы избавите других читателей от расстройств и поможете нам улучшить последующие версии данной книги. Если вы найдете какие-либо ошибки в коде, пожалуйста, сообщите о них главному редактору по адресу dmkpress@gmail.com, и мы исправим это в следующих тиражах. Скачивание иСхОднОгО кОда Скачать файлы с дополнительной информацией для книг издательства «ДМК Пресс» можно на сайте www.dmkpress.com на странице с описанием соответствую щей книги. нарушение автОрСких прав Пиратство в интернете по-прежнему остается насущной проблемой. Издательства «ДМК Пресс» и Packt Publishing очень серьезно относятся к вопросам защиты авторских прав и лицензирования. Если вы столкнетесь в интернете с незаконно выполненной копией любой нашей книги, пожалуйста, сообщите нам адрес копии или веб-сайта, чтобы мы могли применить санкции. Пожалуйста, свяжитесь с нами по адресу dmkpress@gmail.com со ссылкой на подозрительные материалы. Мы высоко ценим любую помощь по защите наших авторов, помогающую нам предоставлять вам качественные материалы.
Доступ онлайн
В корзину