Skip to content

Commit 5e31cb0

Browse files
committed
И ещё немного
1 parent aaf7c66 commit 5e31cb0

1 file changed

Lines changed: 46 additions & 37 deletions

File tree

content/docs/models/ergo-arch.adoc

Lines changed: 46 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -585,19 +585,25 @@ https://azhidkov.pro/posts/25/01/you-dont-need-ca-and-dip-probably/#_%D0%BF%D1%8
585585

586586
На любом уровне можно добавить пакеты platform и infra.
587587

588+
==== Пакеты platform
589+
588590
Пакеты platform содержат:
589-
. определение верхнеуровневых функций (статических методов) и короткоживущих объектов, которые используются в нескольких элементах родительского пакета.
590-
Например, в подпакете myapp.app.users.platform может быть класс ДТО, который используется в нескольких контроллерах пакета app.users.
591-
Или в подпакете myapp.domain.users.platform может быть функция-утилита, которая используется в нескольких моделях/командах/запросах пакета myapp.domain.users.
592-
Или в пакете myapp.platform.spring.jdbc могут быть функции-утилиты для класса JdbcClient, которые используются в разных пакетах ресурсов (в myapp.domain.*);
593-
. Определение классов компонентов для которых во время выполнения создаётся несколько экземпляров.
594-
Например, это может быть компонент `FileStorage(name)`, который является деталью реализации нескольких ресурсов и, соответственно, каждый из которых используюет собственный экземпляр - `UsersRepo(usersDao, usersFileStorage)`, `ExercisesRepo(exercisesDao, exercisesFileStorage)`.
595-
596-
Пакеты infra содержат:
597-
. определения управляемых DI-контейнером долгоживущие объекты, которые создают другие компоненты системы и или объекты их конфигурации, которые используются в нескольких элементах родительского пакета или инфраструктурой.
598-
Например, в подпакете myapp.app.infra может быть определена Spring-конфигурация SecurityConf, задающая настройки авторизации всего приложения.
599-
Или в подпакете myapp.domain.infra может быть определена Spring-конфигурация DataSourceConf, содержащая Spring-бин DataSource для всех ресурсов.
600-
Или в подпакете myapp.infra может быть определена Spring-конфигурация CacheConf, создающая CacheManager, используемый в пакетах myapp.app и myapp.domain.
591+
592+
* определение верхнеуровневых функций (статических методов) и короткоживущих объектов, которые используются в нескольких элементах родительского пакета.
593+
** Например, в пакете `myapp.app.users.platform` может быть класс ДТО, который используется в нескольких контроллерах пакета `app.users`.
594+
** Или в пакете `myapp.domain.users.platform` может быть функция-утилита, которая используется в нескольких моделях/командах/запросах пакета `myapp.domain`.users.
595+
** Или в пакете `myapp.platform.spring.jdbc` могут быть функции-утилиты для класса JdbcClient, которые используются в разных пакетах ресурсов (в `myapp.domain.*`);
596+
* Определение классов компонентов для которых во время выполнения создаётся несколько экземпляров.
597+
** Например, это может быть компонент `FileStorage(name)`, который является деталью реализации нескольких ресурсов и, соответственно, каждый из которых используюет собственный экземпляр - `UsersRepo(usersDao, usersFileStorage)`, `ExercisesRepo(exercisesDao, exercisesFileStorage)`.
598+
599+
==== Пакеты infra
600+
601+
Пакеты infra содержат фабрики (как декларативные, так и императивные) инфраструктурных компонентов.
602+
603+
Например, в пакете `myapp.app.infra` может быть определена Spring-конфигурация `SecurityConf`, задающая настройки авторизации всего приложения.
604+
Или в пакете `myapp.domain.infra` может быть определена Spring-конфигурация `DataSourceConf`, содержащая Spring-бин `DataSource` для всех ресурсов.
605+
Или в пакете `myapp.infra` может быть определена Spring-конфигурация `CacheConf`, создающая `CacheManager`, используемый в пакетах `myapp.app` и `myapp.domain``.
606+
601607

602608
В своём проекте вы можете выбрать другие стандартные имена или вообще выбирать подходящие имена в каждом конкретном случае.
603609

@@ -606,29 +612,32 @@ https://azhidkov.pro/posts/25/01/you-dont-need-ca-and-dip-probably/#_%D0%BF%D1%8
606612
Всё вместе это выглядит так:
607613

608614

609-
* <org.my>
615+
* <org.my.app-name>
616+
617+
** app - порты и операции системы
618+
*** app-module1 - модуль для раздела ТЗ/приложения-клиента/ресурса domain/ресурса REST API/фичи
619+
*** app-module2
620+
621+
** domain - ядро системы - ресурсы, управляемые организацией-разработчиком
622+
*** resource1
623+
**** commands - ДТО команд на модификацию ресурса
624+
**** model - доменная/концептуальная модель данных ресурса
625+
**** persistence - персистентная модель и код работы со слоем персистанса
626+
**** queries - ДТО сложных запросов к состоянию ресурса
627+
**** views - ДТО представлений ресурса
628+
*** resource2
629+
630+
** i9ns - интеграции - ресурсы, управляемые внешними организациями
631+
*** resource1
632+
*** resource2
633+
634+
** infra - фабричный и/или адаптационный код компонентов, необходимых для работы всей системы
635+
610636
** platform - код, который потенциально можно переиспользовать в других приложениях в других предметных областях;
611-
*** lib1
612-
*** lib2
613-
614-
** <org.my.app-name>
615-
*** app - порты и операции системы
616-
**** app-module1 - модуль для раздела ТЗ/приложения-клиента/ресурса domain/ресурса REST API/фичи
617-
**** app-module2
618-
619-
*** domain - ядро системы - ресурсы, управляемые организацией-разработчиком
620-
**** resource1
621-
***** commands
622-
***** model
623-
***** persistence
624-
***** queries
625-
***** views
626-
**** resource2
627-
628-
*** i9ns - интеграции - ресурсы, управляемые внешними организациями
629-
**** resource1
630-
**** resource2
631-
632-
*** infra - фабричный и/или адаптационный код компонентов, необходимых для работы всей системы
633-
634-
*** platform - библиотечный код (как правило - расширения стандартной библиотеки и фреймворков), необходимый для работы системы
637+
*** errros - базоый класс доменных ошибок и классы стандарных доменных ошибок (ResourceNotFoundExceptoin, ResourceAlreadyExistsExeption и т.д.)
638+
*** files_storage - класс компоентов хранилища файлов
639+
*** kotlin - функции расширения для классов из стандартной библиотеки Kotlin
640+
*** postgresql - функции расширения для классов JDBC драйвера PostgreSQL
641+
*** spring
642+
**** data - функции расширения для классов из модуля Spring Data
643+
*** uuid - самописанная реализация UUIDv7

0 commit comments

Comments
 (0)