Книжная полка Сохранить
Размер шрифта:
А
А
А
|  Шрифт:
Arial
Times
|  Интервал:
Стандартный
Средний
Большой
|  Цвет сайта:
Ц
Ц
Ц
Ц
Ц

Предметно-ориентированное проектирование в Enterprise Java с помощью Jakarta ЕЕ, Eclipse MicroProfile, Spring Boot и программной среды Axon Framework

Покупка
Артикул: 748361.01.99
Доступ онлайн
999 ₽
В корзину
В книге подробно рассматриваются реализации шаблонов предметно-ориентированного проектирования с применением различных инструментальных средств и рабочих программных сред из Enterprise Java Space. При таком подходе читатель получает завершенную картину и возможность практического применения любого из этих средств в процессе предметно-ориентированного проектирования. В начальных главах описывается эталонная реализация проекта Cargo Tracker -создание монолитного приложения с использованием платформы Jakarta ЕЕ. Затем рассматривается полный процесс преобразования монолитного приложения в архитектуру, основанную на микросервисах. В заключительных главах демонстрируется создание версии приложения с использованием шаблонов CORS и Event Sourcing (ES); основной рабочей средой является Axon Framework. Издание будет полезно специалистам, приступающим к работе в среде Enterprise Java, ведущим разработчикам, которые осуществляют переход с монолитной архитектуры к архитектурам на основе микросервисов, а также для архитекторов ПО, осваивающих методику предметно-ориентированного проектирования для создания приложений.
Наир, В. Предметно-ориентированное проектирование в Enterprise Java с помощью Jakarta ЕЕ, Eclipse MicroProfile, Spring Boot и программной среды Axon Framework : практическое руководство / В. Наир ; пер. с англ. А. В. Снастина. - Москва : ДМК Пресс, 2020. - 306 с. - ISBN 978-5-97060-872-2. - Текст : электронный. - URL: https://znanium.com/catalog/product/1210717 (дата обращения: 24.04.2024). – Режим доступа: по подписке.
Фрагмент текстового слоя документа размещен для индексирующих роботов. Для полноценной работы с документом, пожалуйста, перейдите в ридер.
Виджей Наир

Предметно-ориентированное  
проектирование в 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 со ссылкой на 
подозрительные материалы.
Мы высоко ценим любую помощь по защите наших авторов, помогающую 
нам предоставлять вам качественные материалы.

Доступ онлайн
999 ₽
В корзину